| .. | .. |
|---|
| 19 | 19 | #include <linux/dma-mapping.h> |
|---|
| 20 | 20 | #include <linux/dmaengine.h> |
|---|
| 21 | 21 | #include <linux/init.h> |
|---|
| 22 | +#include <linux/io.h> |
|---|
| 23 | +#include <linux/irqchip/irq-davinci-aintc.h> |
|---|
| 22 | 24 | #include <linux/platform_data/edma.h> |
|---|
| 23 | 25 | #include <linux/platform_data/gpio-davinci.h> |
|---|
| 24 | 26 | #include <linux/platform_data/keyscan-davinci.h> |
|---|
| .. | .. |
|---|
| 31 | 33 | |
|---|
| 32 | 34 | #include <mach/common.h> |
|---|
| 33 | 35 | #include <mach/cputype.h> |
|---|
| 34 | | -#include <mach/irqs.h> |
|---|
| 35 | 36 | #include <mach/mux.h> |
|---|
| 36 | 37 | #include <mach/serial.h> |
|---|
| 37 | | -#include <mach/time.h> |
|---|
| 38 | + |
|---|
| 39 | +#include <clocksource/timer-davinci.h> |
|---|
| 38 | 40 | |
|---|
| 39 | 41 | #include "asp.h" |
|---|
| 40 | 42 | #include "davinci.h" |
|---|
| 43 | +#include "irqs.h" |
|---|
| 41 | 44 | #include "mux.h" |
|---|
| 42 | 45 | |
|---|
| 43 | 46 | #define DM365_REF_FREQ 24000000 /* 24 MHz on the DM365 EVM */ |
|---|
| .. | .. |
|---|
| 224 | 227 | .flags = IORESOURCE_MEM, |
|---|
| 225 | 228 | }, |
|---|
| 226 | 229 | { |
|---|
| 227 | | - .start = IRQ_DM365_SPIINT0_0, |
|---|
| 230 | + .start = DAVINCI_INTC_IRQ(IRQ_DM365_SPIINT0_0), |
|---|
| 228 | 231 | .flags = IORESOURCE_IRQ, |
|---|
| 229 | 232 | }, |
|---|
| 230 | 233 | }; |
|---|
| .. | .. |
|---|
| 266 | 269 | .flags = IORESOURCE_MEM, |
|---|
| 267 | 270 | }, |
|---|
| 268 | 271 | { /* interrupt */ |
|---|
| 269 | | - .start = IRQ_DM365_GPIO0, |
|---|
| 270 | | - .end = IRQ_DM365_GPIO0, |
|---|
| 272 | + .start = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO0), |
|---|
| 273 | + .end = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO0), |
|---|
| 271 | 274 | .flags = IORESOURCE_IRQ, |
|---|
| 272 | 275 | }, |
|---|
| 273 | 276 | { |
|---|
| 274 | | - .start = IRQ_DM365_GPIO1, |
|---|
| 275 | | - .end = IRQ_DM365_GPIO1, |
|---|
| 277 | + .start = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO1), |
|---|
| 278 | + .end = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO1), |
|---|
| 276 | 279 | .flags = IORESOURCE_IRQ, |
|---|
| 277 | 280 | }, |
|---|
| 278 | 281 | { |
|---|
| 279 | | - .start = IRQ_DM365_GPIO2, |
|---|
| 280 | | - .end = IRQ_DM365_GPIO2, |
|---|
| 282 | + .start = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO2), |
|---|
| 283 | + .end = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO2), |
|---|
| 281 | 284 | .flags = IORESOURCE_IRQ, |
|---|
| 282 | 285 | }, |
|---|
| 283 | 286 | { |
|---|
| 284 | | - .start = IRQ_DM365_GPIO3, |
|---|
| 285 | | - .end = IRQ_DM365_GPIO3, |
|---|
| 287 | + .start = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO3), |
|---|
| 288 | + .end = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO3), |
|---|
| 286 | 289 | .flags = IORESOURCE_IRQ, |
|---|
| 287 | 290 | }, |
|---|
| 288 | 291 | { |
|---|
| 289 | | - .start = IRQ_DM365_GPIO4, |
|---|
| 290 | | - .end = IRQ_DM365_GPIO4, |
|---|
| 292 | + .start = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO4), |
|---|
| 293 | + .end = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO4), |
|---|
| 291 | 294 | .flags = IORESOURCE_IRQ, |
|---|
| 292 | 295 | }, |
|---|
| 293 | 296 | { |
|---|
| 294 | | - .start = IRQ_DM365_GPIO5, |
|---|
| 295 | | - .end = IRQ_DM365_GPIO5, |
|---|
| 297 | + .start = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO5), |
|---|
| 298 | + .end = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO5), |
|---|
| 296 | 299 | .flags = IORESOURCE_IRQ, |
|---|
| 297 | 300 | }, |
|---|
| 298 | 301 | { |
|---|
| 299 | | - .start = IRQ_DM365_GPIO6, |
|---|
| 300 | | - .end = IRQ_DM365_GPIO6, |
|---|
| 302 | + .start = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO6), |
|---|
| 303 | + .end = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO6), |
|---|
| 301 | 304 | .flags = IORESOURCE_IRQ, |
|---|
| 302 | 305 | }, |
|---|
| 303 | 306 | { |
|---|
| 304 | | - .start = IRQ_DM365_GPIO7, |
|---|
| 305 | | - .end = IRQ_DM365_GPIO7, |
|---|
| 307 | + .start = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO7), |
|---|
| 308 | + .end = DAVINCI_INTC_IRQ(IRQ_DM365_GPIO7), |
|---|
| 306 | 309 | .flags = IORESOURCE_IRQ, |
|---|
| 307 | 310 | }, |
|---|
| 308 | 311 | }; |
|---|
| 309 | 312 | |
|---|
| 310 | 313 | static struct davinci_gpio_platform_data dm365_gpio_platform_data = { |
|---|
| 314 | + .no_auto_base = true, |
|---|
| 315 | + .base = 0, |
|---|
| 311 | 316 | .ngpio = 104, |
|---|
| 312 | 317 | .gpio_unbanked = 8, |
|---|
| 313 | 318 | }; |
|---|
| .. | .. |
|---|
| 334 | 339 | .flags = IORESOURCE_MEM, |
|---|
| 335 | 340 | }, |
|---|
| 336 | 341 | { |
|---|
| 337 | | - .start = IRQ_DM365_EMAC_RXTHRESH, |
|---|
| 338 | | - .end = IRQ_DM365_EMAC_RXTHRESH, |
|---|
| 342 | + .start = DAVINCI_INTC_IRQ(IRQ_DM365_EMAC_RXTHRESH), |
|---|
| 343 | + .end = DAVINCI_INTC_IRQ(IRQ_DM365_EMAC_RXTHRESH), |
|---|
| 339 | 344 | .flags = IORESOURCE_IRQ, |
|---|
| 340 | 345 | }, |
|---|
| 341 | 346 | { |
|---|
| 342 | | - .start = IRQ_DM365_EMAC_RXPULSE, |
|---|
| 343 | | - .end = IRQ_DM365_EMAC_RXPULSE, |
|---|
| 347 | + .start = DAVINCI_INTC_IRQ(IRQ_DM365_EMAC_RXPULSE), |
|---|
| 348 | + .end = DAVINCI_INTC_IRQ(IRQ_DM365_EMAC_RXPULSE), |
|---|
| 344 | 349 | .flags = IORESOURCE_IRQ, |
|---|
| 345 | 350 | }, |
|---|
| 346 | 351 | { |
|---|
| 347 | | - .start = IRQ_DM365_EMAC_TXPULSE, |
|---|
| 348 | | - .end = IRQ_DM365_EMAC_TXPULSE, |
|---|
| 352 | + .start = DAVINCI_INTC_IRQ(IRQ_DM365_EMAC_TXPULSE), |
|---|
| 353 | + .end = DAVINCI_INTC_IRQ(IRQ_DM365_EMAC_TXPULSE), |
|---|
| 349 | 354 | .flags = IORESOURCE_IRQ, |
|---|
| 350 | 355 | }, |
|---|
| 351 | 356 | { |
|---|
| 352 | | - .start = IRQ_DM365_EMAC_MISCPULSE, |
|---|
| 353 | | - .end = IRQ_DM365_EMAC_MISCPULSE, |
|---|
| 357 | + .start = DAVINCI_INTC_IRQ(IRQ_DM365_EMAC_MISCPULSE), |
|---|
| 358 | + .end = DAVINCI_INTC_IRQ(IRQ_DM365_EMAC_MISCPULSE), |
|---|
| 354 | 359 | .flags = IORESOURCE_IRQ, |
|---|
| 355 | 360 | }, |
|---|
| 356 | 361 | }; |
|---|
| .. | .. |
|---|
| 516 | 521 | }, |
|---|
| 517 | 522 | { |
|---|
| 518 | 523 | .name = "edma3_ccint", |
|---|
| 519 | | - .start = IRQ_CCINT0, |
|---|
| 524 | + .start = DAVINCI_INTC_IRQ(IRQ_CCINT0), |
|---|
| 520 | 525 | .flags = IORESOURCE_IRQ, |
|---|
| 521 | 526 | }, |
|---|
| 522 | 527 | { |
|---|
| 523 | 528 | .name = "edma3_ccerrint", |
|---|
| 524 | | - .start = IRQ_CCERRINT, |
|---|
| 529 | + .start = DAVINCI_INTC_IRQ(IRQ_CCERRINT), |
|---|
| 525 | 530 | .flags = IORESOURCE_IRQ, |
|---|
| 526 | 531 | }, |
|---|
| 527 | 532 | /* not using TC*_ERR */ |
|---|
| .. | .. |
|---|
| 595 | 600 | .flags = IORESOURCE_MEM, |
|---|
| 596 | 601 | }, |
|---|
| 597 | 602 | { |
|---|
| 598 | | - .start = IRQ_DM365_RTCINT, |
|---|
| 603 | + .start = DAVINCI_INTC_IRQ(IRQ_DM365_RTCINT), |
|---|
| 599 | 604 | .flags = IORESOURCE_IRQ, |
|---|
| 600 | 605 | }, |
|---|
| 601 | 606 | }; |
|---|
| .. | .. |
|---|
| 625 | 630 | }, |
|---|
| 626 | 631 | { |
|---|
| 627 | 632 | /* interrupt */ |
|---|
| 628 | | - .start = IRQ_DM365_KEYINT, |
|---|
| 629 | | - .end = IRQ_DM365_KEYINT, |
|---|
| 633 | + .start = DAVINCI_INTC_IRQ(IRQ_DM365_KEYINT), |
|---|
| 634 | + .end = DAVINCI_INTC_IRQ(IRQ_DM365_KEYINT), |
|---|
| 630 | 635 | .flags = IORESOURCE_IRQ, |
|---|
| 631 | 636 | }, |
|---|
| 632 | 637 | }; |
|---|
| .. | .. |
|---|
| 656 | 661 | }, |
|---|
| 657 | 662 | }; |
|---|
| 658 | 663 | |
|---|
| 659 | | -static struct davinci_timer_info dm365_timer_info = { |
|---|
| 660 | | - .timers = davinci_timer_instance, |
|---|
| 661 | | - .clockevent_id = T0_BOT, |
|---|
| 662 | | - .clocksource_id = T0_TOP, |
|---|
| 664 | +/* |
|---|
| 665 | + * Bottom half of timer0 is used for clockevent, top half is used for |
|---|
| 666 | + * clocksource. |
|---|
| 667 | + */ |
|---|
| 668 | +static const struct davinci_timer_cfg dm365_timer_cfg = { |
|---|
| 669 | + .reg = DEFINE_RES_IO(DAVINCI_TIMER0_BASE, SZ_128), |
|---|
| 670 | + .irq = { |
|---|
| 671 | + DEFINE_RES_IRQ(DAVINCI_INTC_IRQ(IRQ_TINT0_TINT12)), |
|---|
| 672 | + DEFINE_RES_IRQ(DAVINCI_INTC_IRQ(IRQ_TINT0_TINT34)), |
|---|
| 673 | + }, |
|---|
| 663 | 674 | }; |
|---|
| 664 | 675 | |
|---|
| 665 | 676 | #define DM365_UART1_BASE (IO_PHYS + 0x106000) |
|---|
| .. | .. |
|---|
| 667 | 678 | static struct plat_serial8250_port dm365_serial0_platform_data[] = { |
|---|
| 668 | 679 | { |
|---|
| 669 | 680 | .mapbase = DAVINCI_UART0_BASE, |
|---|
| 670 | | - .irq = IRQ_UARTINT0, |
|---|
| 681 | + .irq = DAVINCI_INTC_IRQ(IRQ_UARTINT0), |
|---|
| 671 | 682 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | |
|---|
| 672 | 683 | UPF_IOREMAP, |
|---|
| 673 | 684 | .iotype = UPIO_MEM, |
|---|
| .. | .. |
|---|
| 680 | 691 | static struct plat_serial8250_port dm365_serial1_platform_data[] = { |
|---|
| 681 | 692 | { |
|---|
| 682 | 693 | .mapbase = DM365_UART1_BASE, |
|---|
| 683 | | - .irq = IRQ_UARTINT1, |
|---|
| 694 | + .irq = DAVINCI_INTC_IRQ(IRQ_UARTINT1), |
|---|
| 684 | 695 | .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | |
|---|
| 685 | 696 | UPF_IOREMAP, |
|---|
| 686 | 697 | .iotype = UPIO_MEM, |
|---|
| .. | .. |
|---|
| 719 | 730 | .pinmux_base = DAVINCI_SYSTEM_MODULE_BASE, |
|---|
| 720 | 731 | .pinmux_pins = dm365_pins, |
|---|
| 721 | 732 | .pinmux_pins_num = ARRAY_SIZE(dm365_pins), |
|---|
| 722 | | - .intc_base = DAVINCI_ARM_INTC_BASE, |
|---|
| 723 | | - .intc_type = DAVINCI_INTC_TYPE_AINTC, |
|---|
| 724 | | - .intc_irq_prios = dm365_default_priorities, |
|---|
| 725 | | - .intc_irq_num = DAVINCI_N_AINTC_IRQ, |
|---|
| 726 | | - .timer_info = &dm365_timer_info, |
|---|
| 727 | 733 | .emac_pdata = &dm365_emac_pdata, |
|---|
| 728 | 734 | .sram_dma = 0x00010000, |
|---|
| 729 | 735 | .sram_len = SZ_32K, |
|---|
| .. | .. |
|---|
| 771 | 777 | { |
|---|
| 772 | 778 | void __iomem *pll1, *pll2, *psc; |
|---|
| 773 | 779 | struct clk *clk; |
|---|
| 780 | + int rv; |
|---|
| 774 | 781 | |
|---|
| 775 | 782 | clk_register_fixed_rate(NULL, "ref_clk", NULL, 0, DM365_REF_FREQ); |
|---|
| 776 | 783 | |
|---|
| .. | .. |
|---|
| 784 | 791 | dm365_psc_init(NULL, psc); |
|---|
| 785 | 792 | |
|---|
| 786 | 793 | clk = clk_get(NULL, "timer0"); |
|---|
| 794 | + if (WARN_ON(IS_ERR(clk))) { |
|---|
| 795 | + pr_err("Unable to get the timer clock\n"); |
|---|
| 796 | + return; |
|---|
| 797 | + } |
|---|
| 787 | 798 | |
|---|
| 788 | | - davinci_timer_init(clk); |
|---|
| 799 | + rv = davinci_timer_register(clk, &dm365_timer_cfg); |
|---|
| 800 | + WARN(rv, "Unable to register the timer: %d\n", rv); |
|---|
| 789 | 801 | } |
|---|
| 790 | 802 | |
|---|
| 791 | 803 | void __init dm365_register_clocks(void) |
|---|
| .. | .. |
|---|
| 820 | 832 | |
|---|
| 821 | 833 | static struct resource vpfe_resources[] = { |
|---|
| 822 | 834 | { |
|---|
| 823 | | - .start = IRQ_VDINT0, |
|---|
| 824 | | - .end = IRQ_VDINT0, |
|---|
| 835 | + .start = DAVINCI_INTC_IRQ(IRQ_VDINT0), |
|---|
| 836 | + .end = DAVINCI_INTC_IRQ(IRQ_VDINT0), |
|---|
| 825 | 837 | .flags = IORESOURCE_IRQ, |
|---|
| 826 | 838 | }, |
|---|
| 827 | 839 | { |
|---|
| 828 | | - .start = IRQ_VDINT1, |
|---|
| 829 | | - .end = IRQ_VDINT1, |
|---|
| 840 | + .start = DAVINCI_INTC_IRQ(IRQ_VDINT1), |
|---|
| 841 | + .end = DAVINCI_INTC_IRQ(IRQ_VDINT1), |
|---|
| 830 | 842 | .flags = IORESOURCE_IRQ, |
|---|
| 831 | 843 | }, |
|---|
| 832 | 844 | }; |
|---|
| .. | .. |
|---|
| 907 | 919 | |
|---|
| 908 | 920 | static struct resource dm365_venc_resources[] = { |
|---|
| 909 | 921 | { |
|---|
| 910 | | - .start = IRQ_VENCINT, |
|---|
| 911 | | - .end = IRQ_VENCINT, |
|---|
| 922 | + .start = DAVINCI_INTC_IRQ(IRQ_VENCINT), |
|---|
| 923 | + .end = DAVINCI_INTC_IRQ(IRQ_VENCINT), |
|---|
| 912 | 924 | .flags = IORESOURCE_IRQ, |
|---|
| 913 | 925 | }, |
|---|
| 914 | 926 | /* venc registers io space */ |
|---|
| .. | .. |
|---|
| 927 | 939 | |
|---|
| 928 | 940 | static struct resource dm365_v4l2_disp_resources[] = { |
|---|
| 929 | 941 | { |
|---|
| 930 | | - .start = IRQ_VENCINT, |
|---|
| 931 | | - .end = IRQ_VENCINT, |
|---|
| 942 | + .start = DAVINCI_INTC_IRQ(IRQ_VENCINT), |
|---|
| 943 | + .end = DAVINCI_INTC_IRQ(IRQ_VENCINT), |
|---|
| 932 | 944 | .flags = IORESOURCE_IRQ, |
|---|
| 933 | 945 | }, |
|---|
| 934 | 946 | /* venc registers io space */ |
|---|
| .. | .. |
|---|
| 1050 | 1062 | return 0; |
|---|
| 1051 | 1063 | } |
|---|
| 1052 | 1064 | |
|---|
| 1065 | +static const struct davinci_aintc_config dm365_aintc_config = { |
|---|
| 1066 | + .reg = { |
|---|
| 1067 | + .start = DAVINCI_ARM_INTC_BASE, |
|---|
| 1068 | + .end = DAVINCI_ARM_INTC_BASE + SZ_4K - 1, |
|---|
| 1069 | + .flags = IORESOURCE_MEM, |
|---|
| 1070 | + }, |
|---|
| 1071 | + .num_irqs = 64, |
|---|
| 1072 | + .prios = dm365_default_priorities, |
|---|
| 1073 | +}; |
|---|
| 1074 | + |
|---|
| 1075 | +void __init dm365_init_irq(void) |
|---|
| 1076 | +{ |
|---|
| 1077 | + davinci_aintc_init(&dm365_aintc_config); |
|---|
| 1078 | +} |
|---|
| 1079 | + |
|---|
| 1053 | 1080 | static int __init dm365_init_devices(void) |
|---|
| 1054 | 1081 | { |
|---|
| 1055 | 1082 | struct platform_device *edma_pdev; |
|---|