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