From: Sandeep Paulraj <[email protected]>

Patch adds support for EDMA in DM365 SOC.
The EDMA interrupts for DM365 are also setup in the
DM365 EVM


Signed-off-by: Sandeep Paulraj <[email protected]>
---
 arch/arm/mach-davinci/board-dm365-evm.c |   15 ++++++
 arch/arm/mach-davinci/dm365.c           |   82 +++++++++++++++++++++++++++++++
 2 files changed, 97 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-davinci/board-dm365-evm.c 
b/arch/arm/mach-davinci/board-dm365-evm.c
index 9dda399..6a921a4 100644
--- a/arch/arm/mach-davinci/board-dm365-evm.c
+++ b/arch/arm/mach-davinci/board-dm365-evm.c
@@ -93,6 +93,20 @@ static void dm365evm_emac_configure(void)
        davinci_cfg_reg(DM365_INT_EMAC_MISCPULSE);
 }
 
+static void dm365evm_edma_configure(void)
+{
+       /*
+        * EDMA interrupts are multiplexed
+        * Details are available at the DM365 ARM
+        * Subsystem Users Guide(sprufg5.pdf) pages 133 - 134
+        */
+       davinci_cfg_reg(DM365_INT_EDMA_CC);
+       davinci_cfg_reg(DM365_INT_EDMA_TC0_ERR);
+       davinci_cfg_reg(DM365_INT_EDMA_TC1_ERR);
+       davinci_cfg_reg(DM365_INT_EDMA_TC2_ERR);
+       davinci_cfg_reg(DM365_INT_EDMA_TC3_ERR);
+}
+
 static void __init evm_init_i2c(void)
 {
        davinci_init_i2c(&i2c_pdata);
@@ -116,6 +130,7 @@ static __init void dm365_evm_init(void)
        davinci_serial_init(&uart_config);
 
        dm365evm_emac_configure();
+       dm365evm_edma_configure();
 
        soc_info->emac_pdata->phy_mask = DM365_EVM_PHY_MASK;
        soc_info->emac_pdata->mdio_max_freq = DM365_EVM_MDIO_FREQUENCY;
diff --git a/arch/arm/mach-davinci/dm365.c b/arch/arm/mach-davinci/dm365.c
index 9d615db..4d430a6 100644
--- a/arch/arm/mach-davinci/dm365.c
+++ b/arch/arm/mach-davinci/dm365.c
@@ -660,6 +660,87 @@ static u8 dm365_default_priorities[DAVINCI_N_AINTC_IRQ] = {
        [IRQ_DM365_EMUINT]              = 7,
 };
 
+/* Four Transfer Controllers on DM365 */
+static const s8
+dm365_queue_tc_mapping[][2] = {
+       /* {event queue no, TC no} */
+       {0, 0},
+       {1, 1},
+       {2, 2},
+       {3, 3},
+       {-1, -1},
+};
+
+static const s8
+dm365_queue_priority_mapping[][2] = {
+       /* {event queue no, Priority} */
+       {0, 7},
+       {1, 7},
+       {2, 7},
+       {3, 0},
+       {-1, -1},
+};
+
+static struct edma_soc_info dm365_edma_info = {
+       .n_channel              = 64,
+       .n_region               = 4,
+       .n_slot                 = 256,
+       .n_tc                   = 4,
+       .n_cc                   = 1,
+       .queue_tc_mapping       = dm365_queue_tc_mapping,
+       .queue_priority_mapping = dm365_queue_priority_mapping,
+};
+
+static struct resource edma_resources[] = {
+       {
+               .name   = "edma_cc0",
+               .start  = 0x01c00000,
+               .end    = 0x01c00000 + SZ_64K - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       {
+               .name   = "edma_tc0",
+               .start  = 0x01c10000,
+               .end    = 0x01c10000 + SZ_1K - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       {
+               .name   = "edma_tc1",
+               .start  = 0x01c10400,
+               .end    = 0x01c10400 + SZ_1K - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       {
+               .name   = "edma_tc2",
+               .start  = 0x01c10800,
+               .end    = 0x01c10800 + SZ_1K - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       {
+               .name   = "edma_tc3",
+               .start  = 0x01c10c00,
+               .end    = 0x01c10c00 + SZ_1K - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       {
+               .start  = IRQ_CCINT0,
+               .flags  = IORESOURCE_IRQ,
+       },
+       {
+               .start  = IRQ_CCERRINT,
+               .flags  = IORESOURCE_IRQ,
+       },
+       /* not using TC*_ERR */
+};
+
+static struct platform_device dm365_edma_device = {
+       .name                   = "edma",
+       .id                     = 0,
+       .dev.platform_data      = &dm365_edma_info,
+       .num_resources          = ARRAY_SIZE(edma_resources),
+       .resource               = edma_resources,
+};
+
 static struct map_desc dm365_io_desc[] = {
        {
                .virtual        = IO_VIRT,
@@ -763,6 +844,7 @@ static int __init dm365_init_devices(void)
        if (!cpu_is_davinci_dm365())
                return 0;
 
+       platform_device_register(&dm365_edma_device);
        platform_device_register(&dm365_emac_device);
 
        return 0;
-- 
1.6.0.4

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to