blob: a34df64bea2ac4ce2b854e037d4ef433977b1553 [file] [log] [blame]
Sudhakar Rajashekhara0fbc5592009-07-16 06:42:18 -04001/*
2 * TI DA850/OMAP-L138 EVM board
3 *
4 * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/
5 *
6 * Derived from: arch/arm/mach-davinci/board-da830-evm.c
7 * Original Copyrights follow:
8 *
9 * 2007, 2009 (c) MontaVista Software, Inc. This file is licensed under
10 * the terms of the GNU General Public License version 2. This program
11 * is licensed "as is" without any warranty of any kind, whether express
12 * or implied.
13 */
14#include <linux/kernel.h>
15#include <linux/module.h>
16#include <linux/init.h>
17#include <linux/console.h>
18#include <linux/i2c.h>
19#include <linux/i2c/at24.h>
Sudhakar Rajashekhara5cbdf272009-08-13 14:33:14 -040020#include <linux/gpio.h>
Sudhakar Rajashekhara38beb922009-08-13 16:21:11 -040021#include <linux/platform_device.h>
22#include <linux/mtd/mtd.h>
23#include <linux/mtd/nand.h>
24#include <linux/mtd/partitions.h>
Sudhakar Rajashekhara7c5ec602009-08-13 17:36:25 -040025#include <linux/mtd/physmap.h>
Sekhar Noria9eb1f62009-09-22 21:14:04 +053026#include <linux/regulator/machine.h>
Sudhakar Rajashekhara0fbc5592009-07-16 06:42:18 -040027
28#include <asm/mach-types.h>
29#include <asm/mach/arch.h>
30
31#include <mach/common.h>
32#include <mach/irqs.h>
33#include <mach/cp_intc.h>
34#include <mach/da8xx.h>
Sudhakar Rajashekhara38beb922009-08-13 16:21:11 -040035#include <mach/nand.h>
Sudhakar Rajashekhara7761ef62009-09-15 17:46:14 -040036#include <mach/mux.h>
Sudhakar Rajashekhara0fbc5592009-07-16 06:42:18 -040037
Sudhakar Rajashekhara5a4b1312009-07-17 04:47:10 -040038#define DA850_EVM_PHY_MASK 0x1
39#define DA850_EVM_MDIO_FREQUENCY 2200000 /* PHY bus frequency */
40
Sudhakar Rajashekhara7761ef62009-09-15 17:46:14 -040041#define DA850_LCD_PWR_PIN GPIO_TO_PIN(2, 8)
Sudhakar Rajashekhara5cbdf272009-08-13 14:33:14 -040042#define DA850_LCD_BL_PIN GPIO_TO_PIN(2, 15)
Sudhakar Rajashekhara5cbdf272009-08-13 14:33:14 -040043
Sudhakar Rajashekhara700691f2009-08-13 15:16:23 -040044#define DA850_MMCSD_CD_PIN GPIO_TO_PIN(4, 0)
45#define DA850_MMCSD_WP_PIN GPIO_TO_PIN(4, 1)
46
Sudhakar Rajashekhara7c5ec602009-08-13 17:36:25 -040047static struct mtd_partition da850_evm_norflash_partition[] = {
48 {
49 .name = "NOR filesystem",
50 .offset = 0,
51 .size = MTDPART_SIZ_FULL,
52 .mask_flags = 0,
53 },
54};
55
56static struct physmap_flash_data da850_evm_norflash_data = {
57 .width = 2,
58 .parts = da850_evm_norflash_partition,
59 .nr_parts = ARRAY_SIZE(da850_evm_norflash_partition),
60};
61
62static struct resource da850_evm_norflash_resource[] = {
63 {
64 .start = DA8XX_AEMIF_CS2_BASE,
65 .end = DA8XX_AEMIF_CS2_BASE + SZ_32M - 1,
66 .flags = IORESOURCE_MEM,
67 },
68};
69
70static struct platform_device da850_evm_norflash_device = {
71 .name = "physmap-flash",
72 .id = 0,
73 .dev = {
74 .platform_data = &da850_evm_norflash_data,
75 },
76 .num_resources = 1,
77 .resource = da850_evm_norflash_resource,
78};
79
Sudhakar Rajashekhara38beb922009-08-13 16:21:11 -040080/* DA850/OMAP-L138 EVM includes a 512 MByte large-page NAND flash
81 * (128K blocks). It may be used instead of the (default) SPI flash
82 * to boot, using TI's tools to install the secondary boot loader
83 * (UBL) and U-Boot.
84 */
85struct mtd_partition da850_evm_nandflash_partition[] = {
86 {
87 .name = "u-boot env",
88 .offset = 0,
89 .size = SZ_128K,
90 .mask_flags = MTD_WRITEABLE,
91 },
92 {
93 .name = "UBL",
94 .offset = MTDPART_OFS_APPEND,
95 .size = SZ_128K,
96 .mask_flags = MTD_WRITEABLE,
97 },
98 {
99 .name = "u-boot",
100 .offset = MTDPART_OFS_APPEND,
101 .size = 4 * SZ_128K,
102 .mask_flags = MTD_WRITEABLE,
103 },
104 {
105 .name = "kernel",
106 .offset = 0x200000,
107 .size = SZ_2M,
108 .mask_flags = 0,
109 },
110 {
111 .name = "filesystem",
112 .offset = MTDPART_OFS_APPEND,
113 .size = MTDPART_SIZ_FULL,
114 .mask_flags = 0,
115 },
116};
117
118static struct davinci_nand_pdata da850_evm_nandflash_data = {
119 .parts = da850_evm_nandflash_partition,
120 .nr_parts = ARRAY_SIZE(da850_evm_nandflash_partition),
121 .ecc_mode = NAND_ECC_HW,
122 .options = NAND_USE_FLASH_BBT,
123};
124
125static struct resource da850_evm_nandflash_resource[] = {
126 {
127 .start = DA8XX_AEMIF_CS3_BASE,
128 .end = DA8XX_AEMIF_CS3_BASE + SZ_512K + 2 * SZ_1K - 1,
129 .flags = IORESOURCE_MEM,
130 },
131 {
132 .start = DA8XX_AEMIF_CTL_BASE,
133 .end = DA8XX_AEMIF_CTL_BASE + SZ_32K - 1,
134 .flags = IORESOURCE_MEM,
135 },
136};
137
138static struct platform_device da850_evm_nandflash_device = {
139 .name = "davinci_nand",
140 .id = 1,
141 .dev = {
142 .platform_data = &da850_evm_nandflash_data,
143 },
144 .num_resources = ARRAY_SIZE(da850_evm_nandflash_resource),
145 .resource = da850_evm_nandflash_resource,
146};
147
Chaithrika U S1a7ff8f2009-08-25 15:20:05 +0300148static struct i2c_board_info __initdata da850_evm_i2c_devices[] = {
149 {
150 I2C_BOARD_INFO("tlv320aic3x", 0x18),
151 }
152};
153
Sudhakar Rajashekhara0fbc5592009-07-16 06:42:18 -0400154static struct davinci_i2c_platform_data da850_evm_i2c_0_pdata = {
155 .bus_freq = 100, /* kHz */
156 .bus_delay = 0, /* usec */
157};
158
159static struct davinci_uart_config da850_evm_uart_config __initdata = {
160 .enabled_uarts = 0x7,
161};
162
Sudhakar Rajashekhara38beb922009-08-13 16:21:11 -0400163static struct platform_device *da850_evm_devices[] __initdata = {
164 &da850_evm_nandflash_device,
Sudhakar Rajashekhara7c5ec602009-08-13 17:36:25 -0400165 &da850_evm_norflash_device,
Sudhakar Rajashekhara38beb922009-08-13 16:21:11 -0400166};
167
Chaithrika U S491214e2009-08-11 17:03:25 -0400168/* davinci da850 evm audio machine driver */
169static u8 da850_iis_serializer_direction[] = {
170 INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
171 INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
172 INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, TX_MODE,
173 RX_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
174};
175
176static struct snd_platform_data da850_evm_snd_data = {
177 .tx_dma_offset = 0x2000,
178 .rx_dma_offset = 0x2000,
179 .op_mode = DAVINCI_MCASP_IIS_MODE,
180 .num_serializer = ARRAY_SIZE(da850_iis_serializer_direction),
181 .tdm_slots = 2,
182 .serial_dir = da850_iis_serializer_direction,
183 .eventq_no = EVENTQ_1,
184 .version = MCASP_VERSION_2,
185 .txnumevt = 1,
186 .rxnumevt = 1,
187};
188
Sudhakar Rajashekhara700691f2009-08-13 15:16:23 -0400189static int da850_evm_mmc_get_ro(int index)
190{
191 return gpio_get_value(DA850_MMCSD_WP_PIN);
192}
193
194static int da850_evm_mmc_get_cd(int index)
195{
196 return !gpio_get_value(DA850_MMCSD_CD_PIN);
197}
198
199static struct davinci_mmc_config da850_mmc_config = {
200 .get_ro = da850_evm_mmc_get_ro,
201 .get_cd = da850_evm_mmc_get_cd,
202 .wires = 4,
203 .version = MMC_CTLR_VERSION_2,
204};
205
Sudhakar Rajashekhara5cbdf272009-08-13 14:33:14 -0400206static int da850_lcd_hw_init(void)
207{
208 int status;
209
210 status = gpio_request(DA850_LCD_BL_PIN, "lcd bl\n");
211 if (status < 0)
212 return status;
213
214 status = gpio_request(DA850_LCD_PWR_PIN, "lcd pwr\n");
215 if (status < 0) {
216 gpio_free(DA850_LCD_BL_PIN);
217 return status;
218 }
219
220 gpio_direction_output(DA850_LCD_BL_PIN, 0);
221 gpio_direction_output(DA850_LCD_PWR_PIN, 0);
222
223 /* disable lcd backlight */
224 gpio_set_value(DA850_LCD_BL_PIN, 0);
225
226 /* disable lcd power */
227 gpio_set_value(DA850_LCD_PWR_PIN, 0);
228
229 /* enable lcd power */
230 gpio_set_value(DA850_LCD_PWR_PIN, 1);
231
232 /* enable lcd backlight */
233 gpio_set_value(DA850_LCD_BL_PIN, 1);
234
235 return 0;
236}
Chaithrika U S491214e2009-08-11 17:03:25 -0400237
Sudhakar Rajashekhara7c5ec602009-08-13 17:36:25 -0400238#define DA8XX_AEMIF_CE2CFG_OFFSET 0x10
239#define DA8XX_AEMIF_ASIZE_16BIT 0x1
240
241static void __init da850_evm_init_nor(void)
242{
243 void __iomem *aemif_addr;
244
245 aemif_addr = ioremap(DA8XX_AEMIF_CTL_BASE, SZ_32K);
246
247 /* Configure data bus width of CS2 to 16 bit */
248 writel(readl(aemif_addr + DA8XX_AEMIF_CE2CFG_OFFSET) |
249 DA8XX_AEMIF_ASIZE_16BIT,
250 aemif_addr + DA8XX_AEMIF_CE2CFG_OFFSET);
251
252 iounmap(aemif_addr);
253}
254
Sekhar Noria9eb1f62009-09-22 21:14:04 +0530255/* TPS65070 voltage regulator support */
256
257/* 3.3V */
258struct regulator_consumer_supply tps65070_dcdc1_consumers[] = {
259 {
260 .supply = "usb0_vdda33",
261 },
262 {
263 .supply = "usb1_vdda33",
264 },
265};
266
267/* 3.3V or 1.8V */
268struct regulator_consumer_supply tps65070_dcdc2_consumers[] = {
269 {
270 .supply = "dvdd3318_a",
271 },
272 {
273 .supply = "dvdd3318_b",
274 },
275 {
276 .supply = "dvdd3318_c",
277 },
278};
279
280/* 1.2V */
281struct regulator_consumer_supply tps65070_dcdc3_consumers[] = {
282 {
283 .supply = "cvdd",
284 },
285};
286
287/* 1.8V LDO */
288struct regulator_consumer_supply tps65070_ldo1_consumers[] = {
289 {
290 .supply = "sata_vddr",
291 },
292 {
293 .supply = "usb0_vdda18",
294 },
295 {
296 .supply = "usb1_vdda18",
297 },
298 {
299 .supply = "ddr_dvdd18",
300 },
301};
302
303/* 1.2V LDO */
304struct regulator_consumer_supply tps65070_ldo2_consumers[] = {
305 {
306 .supply = "sata_vdd",
307 },
308 {
309 .supply = "pll0_vdda",
310 },
311 {
312 .supply = "pll1_vdda",
313 },
314 {
315 .supply = "usbs_cvdd",
316 },
317 {
318 .supply = "vddarnwa1",
319 },
320};
321
322struct regulator_init_data tps65070_regulator_data[] = {
323 /* dcdc1 */
324 {
325 .constraints = {
326 .min_uV = 3150000,
327 .max_uV = 3450000,
328 .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE |
329 REGULATOR_CHANGE_STATUS),
330 .boot_on = 1,
331 },
332 .num_consumer_supplies = ARRAY_SIZE(tps65070_dcdc1_consumers),
333 .consumer_supplies = tps65070_dcdc1_consumers,
334 },
335
336 /* dcdc2 */
337 {
338 .constraints = {
339 .min_uV = 1710000,
340 .max_uV = 3450000,
341 .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE |
342 REGULATOR_CHANGE_STATUS),
343 .boot_on = 1,
344 },
345 .num_consumer_supplies = ARRAY_SIZE(tps65070_dcdc2_consumers),
346 .consumer_supplies = tps65070_dcdc2_consumers,
347 },
348
349 /* dcdc3 */
350 {
351 .constraints = {
352 .min_uV = 950000,
353 .max_uV = 1320000,
354 .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE |
355 REGULATOR_CHANGE_STATUS),
356 .boot_on = 1,
357 },
358 .num_consumer_supplies = ARRAY_SIZE(tps65070_dcdc3_consumers),
359 .consumer_supplies = tps65070_dcdc3_consumers,
360 },
361
362 /* ldo1 */
363 {
364 .constraints = {
365 .min_uV = 1710000,
366 .max_uV = 1890000,
367 .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE |
368 REGULATOR_CHANGE_STATUS),
369 .boot_on = 1,
370 },
371 .num_consumer_supplies = ARRAY_SIZE(tps65070_ldo1_consumers),
372 .consumer_supplies = tps65070_ldo1_consumers,
373 },
374
375 /* ldo2 */
376 {
377 .constraints = {
378 .min_uV = 1140000,
379 .max_uV = 1320000,
380 .valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE |
381 REGULATOR_CHANGE_STATUS),
382 .boot_on = 1,
383 },
384 .num_consumer_supplies = ARRAY_SIZE(tps65070_ldo2_consumers),
385 .consumer_supplies = tps65070_ldo2_consumers,
386 },
387};
388
389static struct i2c_board_info __initdata da850evm_tps65070_info[] = {
390 {
391 I2C_BOARD_INFO("tps6507x", 0x48),
392 .platform_data = &tps65070_regulator_data[0],
393 },
394};
395
396static int __init pmic_tps65070_init(void)
397{
398 return i2c_register_board_info(1, da850evm_tps65070_info,
399 ARRAY_SIZE(da850evm_tps65070_info));
400}
401
Sudhakar Rajashekhara820c4fe2009-08-13 18:16:28 -0400402#if defined(CONFIG_MTD_PHYSMAP) || \
403 defined(CONFIG_MTD_PHYSMAP_MODULE)
404#define HAS_NOR 1
405#else
406#define HAS_NOR 0
407#endif
408
409#if defined(CONFIG_MMC_DAVINCI) || \
410 defined(CONFIG_MMC_DAVINCI_MODULE)
411#define HAS_MMC 1
412#else
413#define HAS_MMC 0
414#endif
415
Sudhakar Rajashekhara7761ef62009-09-15 17:46:14 -0400416static const short da850_evm_lcdc_pins[] = {
417 DA850_GPIO2_8, DA850_GPIO2_15,
418 -1
419};
420
Sudhakar Rajashekhara0fbc5592009-07-16 06:42:18 -0400421static __init void da850_evm_init(void)
422{
Sudhakar Rajashekhara5a4b1312009-07-17 04:47:10 -0400423 struct davinci_soc_info *soc_info = &davinci_soc_info;
Sudhakar Rajashekhara0fbc5592009-07-16 06:42:18 -0400424 int ret;
425
Sekhar Noria9eb1f62009-09-22 21:14:04 +0530426 ret = pmic_tps65070_init();
427 if (ret)
428 pr_warning("da850_evm_init: TPS65070 PMIC init failed: %d\n",
429 ret);
430
Sudhakar Rajashekhara38beb922009-08-13 16:21:11 -0400431 ret = da8xx_pinmux_setup(da850_nand_pins);
432 if (ret)
433 pr_warning("da850_evm_init: nand mux setup failed: %d\n",
434 ret);
435
Sudhakar Rajashekhara7c5ec602009-08-13 17:36:25 -0400436 ret = da8xx_pinmux_setup(da850_nor_pins);
437 if (ret)
438 pr_warning("da850_evm_init: nor mux setup failed: %d\n",
439 ret);
440
441 da850_evm_init_nor();
442
Sudhakar Rajashekhara38beb922009-08-13 16:21:11 -0400443 platform_add_devices(da850_evm_devices,
444 ARRAY_SIZE(da850_evm_devices));
445
Sudhakar Rajashekhara0fbc5592009-07-16 06:42:18 -0400446 ret = da8xx_register_edma();
447 if (ret)
448 pr_warning("da850_evm_init: edma registration failed: %d\n",
449 ret);
450
451 ret = da8xx_pinmux_setup(da850_i2c0_pins);
452 if (ret)
453 pr_warning("da850_evm_init: i2c0 mux setup failed: %d\n",
454 ret);
455
456 ret = da8xx_register_i2c(0, &da850_evm_i2c_0_pdata);
457 if (ret)
458 pr_warning("da850_evm_init: i2c0 registration failed: %d\n",
459 ret);
460
Sudhakar Rajashekhara5a4b1312009-07-17 04:47:10 -0400461 soc_info->emac_pdata->phy_mask = DA850_EVM_PHY_MASK;
462 soc_info->emac_pdata->mdio_max_freq = DA850_EVM_MDIO_FREQUENCY;
463 soc_info->emac_pdata->rmii_en = 0;
464
465 ret = da8xx_pinmux_setup(da850_cpgmac_pins);
466 if (ret)
467 pr_warning("da850_evm_init: cpgmac mux setup failed: %d\n",
468 ret);
469
470 ret = da8xx_register_emac();
471 if (ret)
472 pr_warning("da850_evm_init: emac registration failed: %d\n",
473 ret);
474
Sudhakar Rajashekhara0fbc5592009-07-16 06:42:18 -0400475 ret = da8xx_register_watchdog();
476 if (ret)
477 pr_warning("da830_evm_init: watchdog registration failed: %d\n",
478 ret);
479
Sudhakar Rajashekhara820c4fe2009-08-13 18:16:28 -0400480 if (HAS_MMC) {
481 if (HAS_NOR)
482 pr_warning("WARNING: both NOR Flash and MMC/SD are "
483 "enabled, but they share AEMIF pins.\n"
484 "\tDisable one of them.\n");
Sudhakar Rajashekhara700691f2009-08-13 15:16:23 -0400485
Sudhakar Rajashekhara820c4fe2009-08-13 18:16:28 -0400486 ret = da8xx_pinmux_setup(da850_mmcsd0_pins);
487 if (ret)
488 pr_warning("da850_evm_init: mmcsd0 mux setup failed:"
489 " %d\n", ret);
Sudhakar Rajashekhara700691f2009-08-13 15:16:23 -0400490
Sudhakar Rajashekhara820c4fe2009-08-13 18:16:28 -0400491 ret = gpio_request(DA850_MMCSD_CD_PIN, "MMC CD\n");
492 if (ret)
493 pr_warning("da850_evm_init: can not open GPIO %d\n",
494 DA850_MMCSD_CD_PIN);
495 gpio_direction_input(DA850_MMCSD_CD_PIN);
Sudhakar Rajashekhara700691f2009-08-13 15:16:23 -0400496
Sudhakar Rajashekhara820c4fe2009-08-13 18:16:28 -0400497 ret = gpio_request(DA850_MMCSD_WP_PIN, "MMC WP\n");
498 if (ret)
499 pr_warning("da850_evm_init: can not open GPIO %d\n",
500 DA850_MMCSD_WP_PIN);
501 gpio_direction_input(DA850_MMCSD_WP_PIN);
502
503 ret = da8xx_register_mmcsd0(&da850_mmc_config);
504 if (ret)
505 pr_warning("da850_evm_init: mmcsd0 registration failed:"
506 " %d\n", ret);
507 }
Sudhakar Rajashekhara700691f2009-08-13 15:16:23 -0400508
Sudhakar Rajashekhara0fbc5592009-07-16 06:42:18 -0400509 davinci_serial_init(&da850_evm_uart_config);
510
Chaithrika U S1a7ff8f2009-08-25 15:20:05 +0300511 i2c_register_board_info(1, da850_evm_i2c_devices,
512 ARRAY_SIZE(da850_evm_i2c_devices));
513
Sudhakar Rajashekhara0fbc5592009-07-16 06:42:18 -0400514 /*
515 * shut down uart 0 and 1; they are not used on the board and
516 * accessing them causes endless "too much work in irq53" messages
517 * with arago fs
518 */
519 __raw_writel(0, IO_ADDRESS(DA8XX_UART1_BASE) + 0x30);
520 __raw_writel(0, IO_ADDRESS(DA8XX_UART0_BASE) + 0x30);
Chaithrika U S491214e2009-08-11 17:03:25 -0400521
522 ret = da8xx_pinmux_setup(da850_mcasp_pins);
523 if (ret)
524 pr_warning("da850_evm_init: mcasp mux setup failed: %d\n",
525 ret);
526
Mark A. Greerb8864aa2009-08-28 15:05:02 -0700527 da8xx_register_mcasp(0, &da850_evm_snd_data);
Sudhakar Rajashekhara5cbdf272009-08-13 14:33:14 -0400528
529 ret = da8xx_pinmux_setup(da850_lcdcntl_pins);
530 if (ret)
531 pr_warning("da850_evm_init: lcdcntl mux setup failed: %d\n",
532 ret);
533
Sudhakar Rajashekhara7761ef62009-09-15 17:46:14 -0400534 /* Handle board specific muxing for LCD here */
535 ret = da8xx_pinmux_setup(da850_evm_lcdc_pins);
536 if (ret)
537 pr_warning("da850_evm_init: evm specific lcd mux setup "
538 "failed: %d\n", ret);
539
Sudhakar Rajashekhara5cbdf272009-08-13 14:33:14 -0400540 ret = da850_lcd_hw_init();
541 if (ret)
542 pr_warning("da850_evm_init: lcd initialization failed: %d\n",
543 ret);
544
Mark A. Greerb9e63422009-09-15 18:14:19 -0700545 ret = da8xx_register_lcdc(&sharp_lk043t1dg01_pdata);
Sudhakar Rajashekhara5cbdf272009-08-13 14:33:14 -0400546 if (ret)
547 pr_warning("da850_evm_init: lcdc registration failed: %d\n",
548 ret);
Mark A. Greerc51df702009-09-15 18:15:54 -0700549
550 ret = da8xx_register_rtc();
551 if (ret)
552 pr_warning("da850_evm_init: rtc setup failed: %d\n", ret);
Sekhar Nori09dc2d42009-09-22 21:14:03 +0530553
554 ret = da850_register_cpufreq();
555 if (ret)
556 pr_warning("da850_evm_init: cpufreq registration failed: %d\n",
557 ret);
Sudhakar Rajashekhara0fbc5592009-07-16 06:42:18 -0400558}
559
560#ifdef CONFIG_SERIAL_8250_CONSOLE
561static int __init da850_evm_console_init(void)
562{
563 return add_preferred_console("ttyS", 2, "115200");
564}
565console_initcall(da850_evm_console_init);
566#endif
567
568static __init void da850_evm_irq_init(void)
569{
570 struct davinci_soc_info *soc_info = &davinci_soc_info;
571
572 cp_intc_init((void __iomem *)DA8XX_CP_INTC_VIRT, DA850_N_CP_INTC_IRQ,
573 soc_info->intc_irq_prios);
574}
575
576static void __init da850_evm_map_io(void)
577{
578 da850_init();
579}
580
581MACHINE_START(DAVINCI_DA850_EVM, "DaVinci DA850/OMAP-L138 EVM")
582 .phys_io = IO_PHYS,
583 .io_pg_offst = (__IO_ADDRESS(IO_PHYS) >> 18) & 0xfffc,
584 .boot_params = (DA8XX_DDR_BASE + 0x100),
585 .map_io = da850_evm_map_io,
586 .init_irq = da850_evm_irq_init,
587 .timer = &davinci_timer,
588 .init_machine = da850_evm_init,
589MACHINE_END