| .. | .. |
|---|
| 14 | 14 | #include <linux/clkdev.h> |
|---|
| 15 | 15 | #include <linux/dmaengine.h> |
|---|
| 16 | 16 | #include <linux/init.h> |
|---|
| 17 | +#include <linux/io.h> |
|---|
| 18 | +#include <linux/irqchip/irq-davinci-aintc.h> |
|---|
| 17 | 19 | #include <linux/platform_data/edma.h> |
|---|
| 18 | 20 | #include <linux/platform_data/gpio-davinci.h> |
|---|
| 19 | 21 | #include <linux/platform_device.h> |
|---|
| .. | .. |
|---|
| 23 | 25 | |
|---|
| 24 | 26 | #include <mach/common.h> |
|---|
| 25 | 27 | #include <mach/cputype.h> |
|---|
| 26 | | -#include <mach/irqs.h> |
|---|
| 27 | 28 | #include <mach/mux.h> |
|---|
| 28 | 29 | #include <mach/serial.h> |
|---|
| 29 | | -#include <mach/time.h> |
|---|
| 30 | + |
|---|
| 31 | +#include <clocksource/timer-davinci.h> |
|---|
| 30 | 32 | |
|---|
| 31 | 33 | #include "asp.h" |
|---|
| 32 | 34 | #include "davinci.h" |
|---|
| 35 | +#include "irqs.h" |
|---|
| 33 | 36 | #include "mux.h" |
|---|
| 34 | 37 | |
|---|
| 35 | 38 | /* |
|---|
| .. | .. |
|---|
| 59 | 62 | .flags = IORESOURCE_MEM, |
|---|
| 60 | 63 | }, |
|---|
| 61 | 64 | { |
|---|
| 62 | | - .start = IRQ_EMACINT, |
|---|
| 63 | | - .end = IRQ_EMACINT, |
|---|
| 65 | + .start = DAVINCI_INTC_IRQ(IRQ_EMACINT), |
|---|
| 66 | + .end = DAVINCI_INTC_IRQ(IRQ_EMACINT), |
|---|
| 64 | 67 | .flags = IORESOURCE_IRQ, |
|---|
| 65 | 68 | }, |
|---|
| 66 | 69 | }; |
|---|
| .. | .. |
|---|
| 260 | 263 | }, |
|---|
| 261 | 264 | { |
|---|
| 262 | 265 | .name = "edma3_ccint", |
|---|
| 263 | | - .start = IRQ_CCINT0, |
|---|
| 266 | + .start = DAVINCI_INTC_IRQ(IRQ_CCINT0), |
|---|
| 264 | 267 | .flags = IORESOURCE_IRQ, |
|---|
| 265 | 268 | }, |
|---|
| 266 | 269 | { |
|---|
| 267 | 270 | .name = "edma3_ccerrint", |
|---|
| 268 | | - .start = IRQ_CCERRINT, |
|---|
| 271 | + .start = DAVINCI_INTC_IRQ(IRQ_CCERRINT), |
|---|
| 269 | 272 | .flags = IORESOURCE_IRQ, |
|---|
| 270 | 273 | }, |
|---|
| 271 | 274 | /* not using TC*_ERR */ |
|---|
| .. | .. |
|---|
| 330 | 333 | |
|---|
| 331 | 334 | static struct resource dm644x_vpfe_resources[] = { |
|---|
| 332 | 335 | { |
|---|
| 333 | | - .start = IRQ_VDINT0, |
|---|
| 334 | | - .end = IRQ_VDINT0, |
|---|
| 336 | + .start = DAVINCI_INTC_IRQ(IRQ_VDINT0), |
|---|
| 337 | + .end = DAVINCI_INTC_IRQ(IRQ_VDINT0), |
|---|
| 335 | 338 | .flags = IORESOURCE_IRQ, |
|---|
| 336 | 339 | }, |
|---|
| 337 | 340 | { |
|---|
| 338 | | - .start = IRQ_VDINT1, |
|---|
| 339 | | - .end = IRQ_VDINT1, |
|---|
| 341 | + .start = DAVINCI_INTC_IRQ(IRQ_VDINT1), |
|---|
| 342 | + .end = DAVINCI_INTC_IRQ(IRQ_VDINT1), |
|---|
| 340 | 343 | .flags = IORESOURCE_IRQ, |
|---|
| 341 | 344 | }, |
|---|
| 342 | 345 | }; |
|---|
| .. | .. |
|---|
| 442 | 445 | |
|---|
| 443 | 446 | static struct resource dm644x_v4l2_disp_resources[] = { |
|---|
| 444 | 447 | { |
|---|
| 445 | | - .start = IRQ_VENCINT, |
|---|
| 446 | | - .end = IRQ_VENCINT, |
|---|
| 448 | + .start = DAVINCI_INTC_IRQ(IRQ_VENCINT), |
|---|
| 449 | + .end = DAVINCI_INTC_IRQ(IRQ_VENCINT), |
|---|
| 447 | 450 | .flags = IORESOURCE_IRQ, |
|---|
| 448 | 451 | }, |
|---|
| 449 | 452 | }; |
|---|
| .. | .. |
|---|
| 491 | 494 | .flags = IORESOURCE_MEM, |
|---|
| 492 | 495 | }, |
|---|
| 493 | 496 | { /* interrupt */ |
|---|
| 494 | | - .start = IRQ_GPIOBNK0, |
|---|
| 495 | | - .end = IRQ_GPIOBNK0, |
|---|
| 497 | + .start = DAVINCI_INTC_IRQ(IRQ_GPIOBNK0), |
|---|
| 498 | + .end = DAVINCI_INTC_IRQ(IRQ_GPIOBNK0), |
|---|
| 496 | 499 | .flags = IORESOURCE_IRQ, |
|---|
| 497 | 500 | }, |
|---|
| 498 | 501 | { |
|---|
| 499 | | - .start = IRQ_GPIOBNK1, |
|---|
| 500 | | - .end = IRQ_GPIOBNK1, |
|---|
| 502 | + .start = DAVINCI_INTC_IRQ(IRQ_GPIOBNK1), |
|---|
| 503 | + .end = DAVINCI_INTC_IRQ(IRQ_GPIOBNK1), |
|---|
| 501 | 504 | .flags = IORESOURCE_IRQ, |
|---|
| 502 | 505 | }, |
|---|
| 503 | 506 | { |
|---|
| 504 | | - .start = IRQ_GPIOBNK2, |
|---|
| 505 | | - .end = IRQ_GPIOBNK2, |
|---|
| 507 | + .start = DAVINCI_INTC_IRQ(IRQ_GPIOBNK2), |
|---|
| 508 | + .end = DAVINCI_INTC_IRQ(IRQ_GPIOBNK2), |
|---|
| 506 | 509 | .flags = IORESOURCE_IRQ, |
|---|
| 507 | 510 | }, |
|---|
| 508 | 511 | { |
|---|
| 509 | | - .start = IRQ_GPIOBNK3, |
|---|
| 510 | | - .end = IRQ_GPIOBNK3, |
|---|
| 512 | + .start = DAVINCI_INTC_IRQ(IRQ_GPIOBNK3), |
|---|
| 513 | + .end = DAVINCI_INTC_IRQ(IRQ_GPIOBNK3), |
|---|
| 511 | 514 | .flags = IORESOURCE_IRQ, |
|---|
| 512 | 515 | }, |
|---|
| 513 | 516 | { |
|---|
| 514 | | - .start = IRQ_GPIOBNK4, |
|---|
| 515 | | - .end = IRQ_GPIOBNK4, |
|---|
| 517 | + .start = DAVINCI_INTC_IRQ(IRQ_GPIOBNK4), |
|---|
| 518 | + .end = DAVINCI_INTC_IRQ(IRQ_GPIOBNK4), |
|---|
| 516 | 519 | .flags = IORESOURCE_IRQ, |
|---|
| 517 | 520 | }, |
|---|
| 518 | 521 | }; |
|---|
| 519 | 522 | |
|---|
| 520 | 523 | static struct davinci_gpio_platform_data dm644_gpio_platform_data = { |
|---|
| 524 | + .no_auto_base = true, |
|---|
| 525 | + .base = 0, |
|---|
| 521 | 526 | .ngpio = 71, |
|---|
| 522 | 527 | }; |
|---|
| 523 | 528 | |
|---|
| .. | .. |
|---|
| 557 | 562 | }; |
|---|
| 558 | 563 | |
|---|
| 559 | 564 | /* |
|---|
| 560 | | - * T0_BOT: Timer 0, bottom: clockevent source for hrtimers |
|---|
| 561 | | - * T0_TOP: Timer 0, top : clocksource for generic timekeeping |
|---|
| 562 | | - * T1_BOT: Timer 1, bottom: (used by DSP in TI DSPLink code) |
|---|
| 563 | | - * T1_TOP: Timer 1, top : <unused> |
|---|
| 565 | + * Bottom half of timer0 is used for clockevent, top half is used for |
|---|
| 566 | + * clocksource. |
|---|
| 564 | 567 | */ |
|---|
| 565 | | -static struct davinci_timer_info dm644x_timer_info = { |
|---|
| 566 | | - .timers = davinci_timer_instance, |
|---|
| 567 | | - .clockevent_id = T0_BOT, |
|---|
| 568 | | - .clocksource_id = T0_TOP, |
|---|
| 568 | +static const struct davinci_timer_cfg dm644x_timer_cfg = { |
|---|
| 569 | + .reg = DEFINE_RES_IO(DAVINCI_TIMER0_BASE, SZ_4K), |
|---|
| 570 | + .irq = { |
|---|
| 571 | + DEFINE_RES_IRQ(DAVINCI_INTC_IRQ(IRQ_TINT0_TINT12)), |
|---|
| 572 | + DEFINE_RES_IRQ(DAVINCI_INTC_IRQ(IRQ_TINT0_TINT34)), |
|---|
| 573 | + }, |
|---|
| 569 | 574 | }; |
|---|
| 570 | 575 | |
|---|
| 571 | 576 | static struct plat_serial8250_port dm644x_serial0_platform_data[] = { |
|---|
| 572 | 577 | { |
|---|
| 573 | 578 | .mapbase = DAVINCI_UART0_BASE, |
|---|
| 574 | | - .irq = IRQ_UARTINT0, |
|---|
| 579 | + .irq = DAVINCI_INTC_IRQ(IRQ_UARTINT0), |
|---|
| 575 | 580 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | |
|---|
| 576 | 581 | UPF_IOREMAP, |
|---|
| 577 | 582 | .iotype = UPIO_MEM, |
|---|
| .. | .. |
|---|
| 584 | 589 | static struct plat_serial8250_port dm644x_serial1_platform_data[] = { |
|---|
| 585 | 590 | { |
|---|
| 586 | 591 | .mapbase = DAVINCI_UART1_BASE, |
|---|
| 587 | | - .irq = IRQ_UARTINT1, |
|---|
| 592 | + .irq = DAVINCI_INTC_IRQ(IRQ_UARTINT1), |
|---|
| 588 | 593 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | |
|---|
| 589 | 594 | UPF_IOREMAP, |
|---|
| 590 | 595 | .iotype = UPIO_MEM, |
|---|
| .. | .. |
|---|
| 597 | 602 | static struct plat_serial8250_port dm644x_serial2_platform_data[] = { |
|---|
| 598 | 603 | { |
|---|
| 599 | 604 | .mapbase = DAVINCI_UART2_BASE, |
|---|
| 600 | | - .irq = IRQ_UARTINT2, |
|---|
| 605 | + .irq = DAVINCI_INTC_IRQ(IRQ_UARTINT2), |
|---|
| 601 | 606 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | |
|---|
| 602 | 607 | UPF_IOREMAP, |
|---|
| 603 | 608 | .iotype = UPIO_MEM, |
|---|
| .. | .. |
|---|
| 643 | 648 | .pinmux_base = DAVINCI_SYSTEM_MODULE_BASE, |
|---|
| 644 | 649 | .pinmux_pins = dm644x_pins, |
|---|
| 645 | 650 | .pinmux_pins_num = ARRAY_SIZE(dm644x_pins), |
|---|
| 646 | | - .intc_base = DAVINCI_ARM_INTC_BASE, |
|---|
| 647 | | - .intc_type = DAVINCI_INTC_TYPE_AINTC, |
|---|
| 648 | | - .intc_irq_prios = dm644x_default_priorities, |
|---|
| 649 | | - .intc_irq_num = DAVINCI_N_AINTC_IRQ, |
|---|
| 650 | | - .timer_info = &dm644x_timer_info, |
|---|
| 651 | 651 | .emac_pdata = &dm644x_emac_pdata, |
|---|
| 652 | 652 | .sram_dma = 0x00008000, |
|---|
| 653 | 653 | .sram_len = SZ_16K, |
|---|
| .. | .. |
|---|
| 669 | 669 | { |
|---|
| 670 | 670 | void __iomem *pll1, *psc; |
|---|
| 671 | 671 | struct clk *clk; |
|---|
| 672 | + int rv; |
|---|
| 672 | 673 | |
|---|
| 673 | 674 | clk_register_fixed_rate(NULL, "ref_clk", NULL, 0, DM644X_REF_FREQ); |
|---|
| 674 | 675 | |
|---|
| .. | .. |
|---|
| 679 | 680 | dm644x_psc_init(NULL, psc); |
|---|
| 680 | 681 | |
|---|
| 681 | 682 | clk = clk_get(NULL, "timer0"); |
|---|
| 683 | + if (WARN_ON(IS_ERR(clk))) { |
|---|
| 684 | + pr_err("Unable to get the timer clock\n"); |
|---|
| 685 | + return; |
|---|
| 686 | + } |
|---|
| 682 | 687 | |
|---|
| 683 | | - davinci_timer_init(clk); |
|---|
| 688 | + rv = davinci_timer_register(clk, &dm644x_timer_cfg); |
|---|
| 689 | + WARN(rv, "Unable to register the timer: %d\n", rv); |
|---|
| 684 | 690 | } |
|---|
| 685 | 691 | |
|---|
| 686 | 692 | static struct resource dm644x_pll2_resources[] = { |
|---|
| .. | .. |
|---|
| 727 | 733 | return 0; |
|---|
| 728 | 734 | } |
|---|
| 729 | 735 | |
|---|
| 736 | +static const struct davinci_aintc_config dm644x_aintc_config = { |
|---|
| 737 | + .reg = { |
|---|
| 738 | + .start = DAVINCI_ARM_INTC_BASE, |
|---|
| 739 | + .end = DAVINCI_ARM_INTC_BASE + SZ_4K - 1, |
|---|
| 740 | + .flags = IORESOURCE_MEM, |
|---|
| 741 | + }, |
|---|
| 742 | + .num_irqs = 64, |
|---|
| 743 | + .prios = dm644x_default_priorities, |
|---|
| 744 | +}; |
|---|
| 745 | + |
|---|
| 746 | +void __init dm644x_init_irq(void) |
|---|
| 747 | +{ |
|---|
| 748 | + davinci_aintc_init(&dm644x_aintc_config); |
|---|
| 749 | +} |
|---|
| 750 | + |
|---|
| 730 | 751 | void __init dm644x_init_devices(void) |
|---|
| 731 | 752 | { |
|---|
| 732 | 753 | struct platform_device *edma_pdev; |
|---|