.. | .. |
---|
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; |
---|