diff options
author | Viresh Kumar <viresh.kumar@st.com> | 2012-03-26 00:59:23 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2012-04-22 16:41:35 -0400 |
commit | 0b7ee71794b043de8a02d8887b69a57e4003106a (patch) | |
tree | fb4386d24146993d3c1400abbc6974c27c16722d /arch/arm/mach-spear3xx/spear320.c | |
parent | c5fa4fdcdbe5f52c3e36892cc81f9378339b00ce (diff) |
SPEAr: Add PL080 DMA support for 3xx and 6xx
Both SPEAr3xx and SPEAr6xx families have one instance of ARM PL080 DMA
controller. This patch adds in support for that.
Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
Diffstat (limited to 'arch/arm/mach-spear3xx/spear320.c')
-rw-r--r-- | arch/arm/mach-spear3xx/spear320.c | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/arch/arm/mach-spear3xx/spear320.c b/arch/arm/mach-spear3xx/spear320.c index 9c571d0f20c3..1e74031e1213 100644 --- a/arch/arm/mach-spear3xx/spear320.c +++ b/arch/arm/mach-spear3xx/spear320.c | |||
@@ -535,6 +535,193 @@ static struct pmx_dev *spear320_evb_pmx_devs[] = { | |||
535 | &spear320_pmx_mii1, | 535 | &spear320_pmx_mii1, |
536 | }; | 536 | }; |
537 | 537 | ||
538 | /* DMAC platform data's slave info */ | ||
539 | struct pl08x_channel_data spear320_dma_info[] = { | ||
540 | { | ||
541 | .bus_id = "uart0_rx", | ||
542 | .min_signal = 2, | ||
543 | .max_signal = 2, | ||
544 | .muxval = 0, | ||
545 | .cctl = 0, | ||
546 | .periph_buses = PL08X_AHB1, | ||
547 | }, { | ||
548 | .bus_id = "uart0_tx", | ||
549 | .min_signal = 3, | ||
550 | .max_signal = 3, | ||
551 | .muxval = 0, | ||
552 | .cctl = 0, | ||
553 | .periph_buses = PL08X_AHB1, | ||
554 | }, { | ||
555 | .bus_id = "ssp0_rx", | ||
556 | .min_signal = 8, | ||
557 | .max_signal = 8, | ||
558 | .muxval = 0, | ||
559 | .cctl = 0, | ||
560 | .periph_buses = PL08X_AHB1, | ||
561 | }, { | ||
562 | .bus_id = "ssp0_tx", | ||
563 | .min_signal = 9, | ||
564 | .max_signal = 9, | ||
565 | .muxval = 0, | ||
566 | .cctl = 0, | ||
567 | .periph_buses = PL08X_AHB1, | ||
568 | }, { | ||
569 | .bus_id = "i2c0_rx", | ||
570 | .min_signal = 10, | ||
571 | .max_signal = 10, | ||
572 | .muxval = 0, | ||
573 | .cctl = 0, | ||
574 | .periph_buses = PL08X_AHB1, | ||
575 | }, { | ||
576 | .bus_id = "i2c0_tx", | ||
577 | .min_signal = 11, | ||
578 | .max_signal = 11, | ||
579 | .muxval = 0, | ||
580 | .cctl = 0, | ||
581 | .periph_buses = PL08X_AHB1, | ||
582 | }, { | ||
583 | .bus_id = "irda", | ||
584 | .min_signal = 12, | ||
585 | .max_signal = 12, | ||
586 | .muxval = 0, | ||
587 | .cctl = 0, | ||
588 | .periph_buses = PL08X_AHB1, | ||
589 | }, { | ||
590 | .bus_id = "adc", | ||
591 | .min_signal = 13, | ||
592 | .max_signal = 13, | ||
593 | .muxval = 0, | ||
594 | .cctl = 0, | ||
595 | .periph_buses = PL08X_AHB1, | ||
596 | }, { | ||
597 | .bus_id = "to_jpeg", | ||
598 | .min_signal = 14, | ||
599 | .max_signal = 14, | ||
600 | .muxval = 0, | ||
601 | .cctl = 0, | ||
602 | .periph_buses = PL08X_AHB1, | ||
603 | }, { | ||
604 | .bus_id = "from_jpeg", | ||
605 | .min_signal = 15, | ||
606 | .max_signal = 15, | ||
607 | .muxval = 0, | ||
608 | .cctl = 0, | ||
609 | .periph_buses = PL08X_AHB1, | ||
610 | }, { | ||
611 | .bus_id = "ssp1_rx", | ||
612 | .min_signal = 0, | ||
613 | .max_signal = 0, | ||
614 | .muxval = 1, | ||
615 | .cctl = 0, | ||
616 | .periph_buses = PL08X_AHB2, | ||
617 | }, { | ||
618 | .bus_id = "ssp1_tx", | ||
619 | .min_signal = 1, | ||
620 | .max_signal = 1, | ||
621 | .muxval = 1, | ||
622 | .cctl = 0, | ||
623 | .periph_buses = PL08X_AHB2, | ||
624 | }, { | ||
625 | .bus_id = "ssp2_rx", | ||
626 | .min_signal = 2, | ||
627 | .max_signal = 2, | ||
628 | .muxval = 1, | ||
629 | .cctl = 0, | ||
630 | .periph_buses = PL08X_AHB2, | ||
631 | }, { | ||
632 | .bus_id = "ssp2_tx", | ||
633 | .min_signal = 3, | ||
634 | .max_signal = 3, | ||
635 | .muxval = 1, | ||
636 | .cctl = 0, | ||
637 | .periph_buses = PL08X_AHB2, | ||
638 | }, { | ||
639 | .bus_id = "uart1_rx", | ||
640 | .min_signal = 4, | ||
641 | .max_signal = 4, | ||
642 | .muxval = 1, | ||
643 | .cctl = 0, | ||
644 | .periph_buses = PL08X_AHB2, | ||
645 | }, { | ||
646 | .bus_id = "uart1_tx", | ||
647 | .min_signal = 5, | ||
648 | .max_signal = 5, | ||
649 | .muxval = 1, | ||
650 | .cctl = 0, | ||
651 | .periph_buses = PL08X_AHB2, | ||
652 | }, { | ||
653 | .bus_id = "uart2_rx", | ||
654 | .min_signal = 6, | ||
655 | .max_signal = 6, | ||
656 | .muxval = 1, | ||
657 | .cctl = 0, | ||
658 | .periph_buses = PL08X_AHB2, | ||
659 | }, { | ||
660 | .bus_id = "uart2_tx", | ||
661 | .min_signal = 7, | ||
662 | .max_signal = 7, | ||
663 | .muxval = 1, | ||
664 | .cctl = 0, | ||
665 | .periph_buses = PL08X_AHB2, | ||
666 | }, { | ||
667 | .bus_id = "i2c1_rx", | ||
668 | .min_signal = 8, | ||
669 | .max_signal = 8, | ||
670 | .muxval = 1, | ||
671 | .cctl = 0, | ||
672 | .periph_buses = PL08X_AHB2, | ||
673 | }, { | ||
674 | .bus_id = "i2c1_tx", | ||
675 | .min_signal = 9, | ||
676 | .max_signal = 9, | ||
677 | .muxval = 1, | ||
678 | .cctl = 0, | ||
679 | .periph_buses = PL08X_AHB2, | ||
680 | }, { | ||
681 | .bus_id = "i2c2_rx", | ||
682 | .min_signal = 10, | ||
683 | .max_signal = 10, | ||
684 | .muxval = 1, | ||
685 | .cctl = 0, | ||
686 | .periph_buses = PL08X_AHB2, | ||
687 | }, { | ||
688 | .bus_id = "i2c2_tx", | ||
689 | .min_signal = 11, | ||
690 | .max_signal = 11, | ||
691 | .muxval = 1, | ||
692 | .cctl = 0, | ||
693 | .periph_buses = PL08X_AHB2, | ||
694 | }, { | ||
695 | .bus_id = "i2s_rx", | ||
696 | .min_signal = 12, | ||
697 | .max_signal = 12, | ||
698 | .muxval = 1, | ||
699 | .cctl = 0, | ||
700 | .periph_buses = PL08X_AHB2, | ||
701 | }, { | ||
702 | .bus_id = "i2s_tx", | ||
703 | .min_signal = 13, | ||
704 | .max_signal = 13, | ||
705 | .muxval = 1, | ||
706 | .cctl = 0, | ||
707 | .periph_buses = PL08X_AHB2, | ||
708 | }, { | ||
709 | .bus_id = "rs485_rx", | ||
710 | .min_signal = 14, | ||
711 | .max_signal = 14, | ||
712 | .muxval = 1, | ||
713 | .cctl = 0, | ||
714 | .periph_buses = PL08X_AHB2, | ||
715 | }, { | ||
716 | .bus_id = "rs485_tx", | ||
717 | .min_signal = 15, | ||
718 | .max_signal = 15, | ||
719 | .muxval = 1, | ||
720 | .cctl = 0, | ||
721 | .periph_buses = PL08X_AHB2, | ||
722 | }, | ||
723 | }; | ||
724 | |||
538 | static struct pl022_ssp_controller spear320_ssp_data[] = { | 725 | static struct pl022_ssp_controller spear320_ssp_data[] = { |
539 | { | 726 | { |
540 | .bus_id = 1, | 727 | .bus_id = 1, |
@@ -569,6 +756,8 @@ static struct amba_pl011_data spear320_uart_data[] = { | |||
569 | static struct of_dev_auxdata spear320_auxdata_lookup[] __initdata = { | 756 | static struct of_dev_auxdata spear320_auxdata_lookup[] __initdata = { |
570 | OF_DEV_AUXDATA("arm,pl022", SPEAR3XX_ICM1_SSP_BASE, NULL, | 757 | OF_DEV_AUXDATA("arm,pl022", SPEAR3XX_ICM1_SSP_BASE, NULL, |
571 | &pl022_plat_data), | 758 | &pl022_plat_data), |
759 | OF_DEV_AUXDATA("arm,pl080", SPEAR3XX_ICM3_DMA_BASE, NULL, | ||
760 | &pl080_plat_data), | ||
572 | OF_DEV_AUXDATA("arm,pl022", SPEAR320_SSP0_BASE, NULL, | 761 | OF_DEV_AUXDATA("arm,pl022", SPEAR320_SSP0_BASE, NULL, |
573 | &spear320_ssp_data[0]), | 762 | &spear320_ssp_data[0]), |
574 | OF_DEV_AUXDATA("arm,pl022", SPEAR320_SSP1_BASE, NULL, | 763 | OF_DEV_AUXDATA("arm,pl022", SPEAR320_SSP1_BASE, NULL, |
@@ -585,6 +774,9 @@ static void __init spear320_dt_init(void) | |||
585 | void __iomem *base; | 774 | void __iomem *base; |
586 | int ret = 0; | 775 | int ret = 0; |
587 | 776 | ||
777 | pl080_plat_data.slave_channels = spear320_dma_info; | ||
778 | pl080_plat_data.num_slave_channels = ARRAY_SIZE(spear320_dma_info); | ||
779 | |||
588 | of_platform_populate(NULL, of_default_bus_match_table, | 780 | of_platform_populate(NULL, of_default_bus_match_table, |
589 | spear320_auxdata_lookup, NULL); | 781 | spear320_auxdata_lookup, NULL); |
590 | 782 | ||