diff options
Diffstat (limited to 'arch/arm/mach-davinci/dm644x.c')
-rw-r--r-- | arch/arm/mach-davinci/dm644x.c | 204 |
1 files changed, 200 insertions, 4 deletions
diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c index d428ef192eac..fb5449b3c97b 100644 --- a/arch/arm/mach-davinci/dm644x.c +++ b/arch/arm/mach-davinci/dm644x.c | |||
@@ -11,7 +11,11 @@ | |||
11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/clk.h> | 13 | #include <linux/clk.h> |
14 | #include <linux/serial_8250.h> | ||
14 | #include <linux/platform_device.h> | 15 | #include <linux/platform_device.h> |
16 | #include <linux/gpio.h> | ||
17 | |||
18 | #include <asm/mach/map.h> | ||
15 | 19 | ||
16 | #include <mach/dm644x.h> | 20 | #include <mach/dm644x.h> |
17 | #include <mach/clock.h> | 21 | #include <mach/clock.h> |
@@ -20,6 +24,9 @@ | |||
20 | #include <mach/irqs.h> | 24 | #include <mach/irqs.h> |
21 | #include <mach/psc.h> | 25 | #include <mach/psc.h> |
22 | #include <mach/mux.h> | 26 | #include <mach/mux.h> |
27 | #include <mach/time.h> | ||
28 | #include <mach/serial.h> | ||
29 | #include <mach/common.h> | ||
23 | 30 | ||
24 | #include "clock.h" | 31 | #include "clock.h" |
25 | #include "mux.h" | 32 | #include "mux.h" |
@@ -312,7 +319,14 @@ struct davinci_clk dm644x_clks[] = { | |||
312 | CLK(NULL, NULL, NULL), | 319 | CLK(NULL, NULL, NULL), |
313 | }; | 320 | }; |
314 | 321 | ||
315 | #if defined(CONFIG_TI_DAVINCI_EMAC) || defined(CONFIG_TI_DAVINCI_EMAC_MODULE) | 322 | static struct emac_platform_data dm644x_emac_pdata = { |
323 | .ctrl_reg_offset = DM644X_EMAC_CNTRL_OFFSET, | ||
324 | .ctrl_mod_reg_offset = DM644X_EMAC_CNTRL_MOD_OFFSET, | ||
325 | .ctrl_ram_offset = DM644X_EMAC_CNTRL_RAM_OFFSET, | ||
326 | .mdio_reg_offset = DM644X_EMAC_MDIO_OFFSET, | ||
327 | .ctrl_ram_size = DM644X_EMAC_CNTRL_RAM_SIZE, | ||
328 | .version = EMAC_VERSION_1, | ||
329 | }; | ||
316 | 330 | ||
317 | static struct resource dm644x_emac_resources[] = { | 331 | static struct resource dm644x_emac_resources[] = { |
318 | { | 332 | { |
@@ -330,11 +344,15 @@ static struct resource dm644x_emac_resources[] = { | |||
330 | static struct platform_device dm644x_emac_device = { | 344 | static struct platform_device dm644x_emac_device = { |
331 | .name = "davinci_emac", | 345 | .name = "davinci_emac", |
332 | .id = 1, | 346 | .id = 1, |
347 | .dev = { | ||
348 | .platform_data = &dm644x_emac_pdata, | ||
349 | }, | ||
333 | .num_resources = ARRAY_SIZE(dm644x_emac_resources), | 350 | .num_resources = ARRAY_SIZE(dm644x_emac_resources), |
334 | .resource = dm644x_emac_resources, | 351 | .resource = dm644x_emac_resources, |
335 | }; | 352 | }; |
336 | 353 | ||
337 | #endif | 354 | #define PINMUX0 0x00 |
355 | #define PINMUX1 0x04 | ||
338 | 356 | ||
339 | /* | 357 | /* |
340 | * Device specific mux setup | 358 | * Device specific mux setup |
@@ -343,6 +361,7 @@ static struct platform_device dm644x_emac_device = { | |||
343 | * reg offset mask mode | 361 | * reg offset mask mode |
344 | */ | 362 | */ |
345 | static const struct mux_config dm644x_pins[] = { | 363 | static const struct mux_config dm644x_pins[] = { |
364 | #ifdef CONFIG_DAVINCI_MUX | ||
346 | MUX_CFG(DM644X, HDIREN, 0, 16, 1, 1, true) | 365 | MUX_CFG(DM644X, HDIREN, 0, 16, 1, 1, true) |
347 | MUX_CFG(DM644X, ATAEN, 0, 17, 1, 1, true) | 366 | MUX_CFG(DM644X, ATAEN, 0, 17, 1, 1, true) |
348 | MUX_CFG(DM644X, ATAEN_DISABLE, 0, 17, 1, 0, true) | 367 | MUX_CFG(DM644X, ATAEN_DISABLE, 0, 17, 1, 0, true) |
@@ -383,8 +402,76 @@ MUX_CFG(DM644X, RGB666, 0, 22, 1, 1, true) | |||
383 | 402 | ||
384 | MUX_CFG(DM644X, LOEEN, 0, 24, 1, 1, true) | 403 | MUX_CFG(DM644X, LOEEN, 0, 24, 1, 1, true) |
385 | MUX_CFG(DM644X, LFLDEN, 0, 25, 1, 1, false) | 404 | MUX_CFG(DM644X, LFLDEN, 0, 25, 1, 1, false) |
405 | #endif | ||
386 | }; | 406 | }; |
387 | 407 | ||
408 | /* FIQ are pri 0-1; otherwise 2-7, with 7 lowest priority */ | ||
409 | static u8 dm644x_default_priorities[DAVINCI_N_AINTC_IRQ] = { | ||
410 | [IRQ_VDINT0] = 2, | ||
411 | [IRQ_VDINT1] = 6, | ||
412 | [IRQ_VDINT2] = 6, | ||
413 | [IRQ_HISTINT] = 6, | ||
414 | [IRQ_H3AINT] = 6, | ||
415 | [IRQ_PRVUINT] = 6, | ||
416 | [IRQ_RSZINT] = 6, | ||
417 | [7] = 7, | ||
418 | [IRQ_VENCINT] = 6, | ||
419 | [IRQ_ASQINT] = 6, | ||
420 | [IRQ_IMXINT] = 6, | ||
421 | [IRQ_VLCDINT] = 6, | ||
422 | [IRQ_USBINT] = 4, | ||
423 | [IRQ_EMACINT] = 4, | ||
424 | [14] = 7, | ||
425 | [15] = 7, | ||
426 | [IRQ_CCINT0] = 5, /* dma */ | ||
427 | [IRQ_CCERRINT] = 5, /* dma */ | ||
428 | [IRQ_TCERRINT0] = 5, /* dma */ | ||
429 | [IRQ_TCERRINT] = 5, /* dma */ | ||
430 | [IRQ_PSCIN] = 7, | ||
431 | [21] = 7, | ||
432 | [IRQ_IDE] = 4, | ||
433 | [23] = 7, | ||
434 | [IRQ_MBXINT] = 7, | ||
435 | [IRQ_MBRINT] = 7, | ||
436 | [IRQ_MMCINT] = 7, | ||
437 | [IRQ_SDIOINT] = 7, | ||
438 | [28] = 7, | ||
439 | [IRQ_DDRINT] = 7, | ||
440 | [IRQ_AEMIFINT] = 7, | ||
441 | [IRQ_VLQINT] = 4, | ||
442 | [IRQ_TINT0_TINT12] = 2, /* clockevent */ | ||
443 | [IRQ_TINT0_TINT34] = 2, /* clocksource */ | ||
444 | [IRQ_TINT1_TINT12] = 7, /* DSP timer */ | ||
445 | [IRQ_TINT1_TINT34] = 7, /* system tick */ | ||
446 | [IRQ_PWMINT0] = 7, | ||
447 | [IRQ_PWMINT1] = 7, | ||
448 | [IRQ_PWMINT2] = 7, | ||
449 | [IRQ_I2C] = 3, | ||
450 | [IRQ_UARTINT0] = 3, | ||
451 | [IRQ_UARTINT1] = 3, | ||
452 | [IRQ_UARTINT2] = 3, | ||
453 | [IRQ_SPINT0] = 3, | ||
454 | [IRQ_SPINT1] = 3, | ||
455 | [45] = 7, | ||
456 | [IRQ_DSP2ARM0] = 4, | ||
457 | [IRQ_DSP2ARM1] = 4, | ||
458 | [IRQ_GPIO0] = 7, | ||
459 | [IRQ_GPIO1] = 7, | ||
460 | [IRQ_GPIO2] = 7, | ||
461 | [IRQ_GPIO3] = 7, | ||
462 | [IRQ_GPIO4] = 7, | ||
463 | [IRQ_GPIO5] = 7, | ||
464 | [IRQ_GPIO6] = 7, | ||
465 | [IRQ_GPIO7] = 7, | ||
466 | [IRQ_GPIOBNK0] = 7, | ||
467 | [IRQ_GPIOBNK1] = 7, | ||
468 | [IRQ_GPIOBNK2] = 7, | ||
469 | [IRQ_GPIOBNK3] = 7, | ||
470 | [IRQ_GPIOBNK4] = 7, | ||
471 | [IRQ_COMMTX] = 7, | ||
472 | [IRQ_COMMRX] = 7, | ||
473 | [IRQ_EMUINT] = 7, | ||
474 | }; | ||
388 | 475 | ||
389 | /*----------------------------------------------------------------------*/ | 476 | /*----------------------------------------------------------------------*/ |
390 | 477 | ||
@@ -444,10 +531,118 @@ static struct platform_device dm644x_edma_device = { | |||
444 | }; | 531 | }; |
445 | 532 | ||
446 | /*----------------------------------------------------------------------*/ | 533 | /*----------------------------------------------------------------------*/ |
534 | |||
535 | static struct map_desc dm644x_io_desc[] = { | ||
536 | { | ||
537 | .virtual = IO_VIRT, | ||
538 | .pfn = __phys_to_pfn(IO_PHYS), | ||
539 | .length = IO_SIZE, | ||
540 | .type = MT_DEVICE | ||
541 | }, | ||
542 | { | ||
543 | .virtual = SRAM_VIRT, | ||
544 | .pfn = __phys_to_pfn(0x00008000), | ||
545 | .length = SZ_16K, | ||
546 | /* MT_MEMORY_NONCACHED requires supersection alignment */ | ||
547 | .type = MT_DEVICE, | ||
548 | }, | ||
549 | }; | ||
550 | |||
551 | /* Contents of JTAG ID register used to identify exact cpu type */ | ||
552 | static struct davinci_id dm644x_ids[] = { | ||
553 | { | ||
554 | .variant = 0x0, | ||
555 | .part_no = 0xb700, | ||
556 | .manufacturer = 0x017, | ||
557 | .cpu_id = DAVINCI_CPU_ID_DM6446, | ||
558 | .name = "dm6446", | ||
559 | }, | ||
560 | }; | ||
561 | |||
562 | static void __iomem *dm644x_psc_bases[] = { | ||
563 | IO_ADDRESS(DAVINCI_PWR_SLEEP_CNTRL_BASE), | ||
564 | }; | ||
565 | |||
566 | /* | ||
567 | * T0_BOT: Timer 0, bottom: clockevent source for hrtimers | ||
568 | * T0_TOP: Timer 0, top : clocksource for generic timekeeping | ||
569 | * T1_BOT: Timer 1, bottom: (used by DSP in TI DSPLink code) | ||
570 | * T1_TOP: Timer 1, top : <unused> | ||
571 | */ | ||
572 | struct davinci_timer_info dm644x_timer_info = { | ||
573 | .timers = davinci_timer_instance, | ||
574 | .clockevent_id = T0_BOT, | ||
575 | .clocksource_id = T0_TOP, | ||
576 | }; | ||
577 | |||
578 | static struct plat_serial8250_port dm644x_serial_platform_data[] = { | ||
579 | { | ||
580 | .mapbase = DAVINCI_UART0_BASE, | ||
581 | .irq = IRQ_UARTINT0, | ||
582 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | | ||
583 | UPF_IOREMAP, | ||
584 | .iotype = UPIO_MEM, | ||
585 | .regshift = 2, | ||
586 | }, | ||
587 | { | ||
588 | .mapbase = DAVINCI_UART1_BASE, | ||
589 | .irq = IRQ_UARTINT1, | ||
590 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | | ||
591 | UPF_IOREMAP, | ||
592 | .iotype = UPIO_MEM, | ||
593 | .regshift = 2, | ||
594 | }, | ||
595 | { | ||
596 | .mapbase = DAVINCI_UART2_BASE, | ||
597 | .irq = IRQ_UARTINT2, | ||
598 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | | ||
599 | UPF_IOREMAP, | ||
600 | .iotype = UPIO_MEM, | ||
601 | .regshift = 2, | ||
602 | }, | ||
603 | { | ||
604 | .flags = 0 | ||
605 | }, | ||
606 | }; | ||
607 | |||
608 | static struct platform_device dm644x_serial_device = { | ||
609 | .name = "serial8250", | ||
610 | .id = PLAT8250_DEV_PLATFORM, | ||
611 | .dev = { | ||
612 | .platform_data = dm644x_serial_platform_data, | ||
613 | }, | ||
614 | }; | ||
615 | |||
616 | static struct davinci_soc_info davinci_soc_info_dm644x = { | ||
617 | .io_desc = dm644x_io_desc, | ||
618 | .io_desc_num = ARRAY_SIZE(dm644x_io_desc), | ||
619 | .jtag_id_base = IO_ADDRESS(0x01c40028), | ||
620 | .ids = dm644x_ids, | ||
621 | .ids_num = ARRAY_SIZE(dm644x_ids), | ||
622 | .cpu_clks = dm644x_clks, | ||
623 | .psc_bases = dm644x_psc_bases, | ||
624 | .psc_bases_num = ARRAY_SIZE(dm644x_psc_bases), | ||
625 | .pinmux_base = IO_ADDRESS(DAVINCI_SYSTEM_MODULE_BASE), | ||
626 | .pinmux_pins = dm644x_pins, | ||
627 | .pinmux_pins_num = ARRAY_SIZE(dm644x_pins), | ||
628 | .intc_base = IO_ADDRESS(DAVINCI_ARM_INTC_BASE), | ||
629 | .intc_type = DAVINCI_INTC_TYPE_AINTC, | ||
630 | .intc_irq_prios = dm644x_default_priorities, | ||
631 | .intc_irq_num = DAVINCI_N_AINTC_IRQ, | ||
632 | .timer_info = &dm644x_timer_info, | ||
633 | .wdt_base = IO_ADDRESS(DAVINCI_WDOG_BASE), | ||
634 | .gpio_base = IO_ADDRESS(DAVINCI_GPIO_BASE), | ||
635 | .gpio_num = 71, | ||
636 | .gpio_irq = IRQ_GPIOBNK0, | ||
637 | .serial_dev = &dm644x_serial_device, | ||
638 | .emac_pdata = &dm644x_emac_pdata, | ||
639 | .sram_dma = 0x00008000, | ||
640 | .sram_len = SZ_16K, | ||
641 | }; | ||
642 | |||
447 | void __init dm644x_init(void) | 643 | void __init dm644x_init(void) |
448 | { | 644 | { |
449 | davinci_clk_init(dm644x_clks); | 645 | davinci_common_init(&davinci_soc_info_dm644x); |
450 | davinci_mux_register(dm644x_pins, ARRAY_SIZE(dm644x_pins)); | ||
451 | } | 646 | } |
452 | 647 | ||
453 | static int __init dm644x_init_devices(void) | 648 | static int __init dm644x_init_devices(void) |
@@ -456,6 +651,7 @@ static int __init dm644x_init_devices(void) | |||
456 | return 0; | 651 | return 0; |
457 | 652 | ||
458 | platform_device_register(&dm644x_edma_device); | 653 | platform_device_register(&dm644x_edma_device); |
654 | platform_device_register(&dm644x_emac_device); | ||
459 | return 0; | 655 | return 0; |
460 | } | 656 | } |
461 | postcore_initcall(dm644x_init_devices); | 657 | postcore_initcall(dm644x_init_devices); |