From: Sudhakar Rajashekhara <sudhakar....@ti.com>

EDMA in DM355 and DM644x has two transfer controllers while DM646x has four
transfer controllers. Moving the queue to tc mapping and queue priority
mapping to dm<soc>.c will be helpful to probe these mappings from platform
device so that the machine_is_* testing will be avoided.

Signed-off-by: Naresh Medisetty <nar...@ti.com>
Signed-off-by: Sudhakar Rajashekhara <sudhakar....@ti.com>
Signed-off-by: Kevin Hilman <khil...@deeprootsystems.com>
---
 arch/arm/mach-davinci/dm355.c             |   30 ++++++++++++++++++----
 arch/arm/mach-davinci/dm644x.c            |   30 ++++++++++++++++++----
 arch/arm/mach-davinci/dm646x.c            |   38 +++++++++++++++++++++++-----
 arch/arm/mach-davinci/dma.c               |   22 ++++-------------
 arch/arm/mach-davinci/include/mach/edma.h |    2 +
 5 files changed, 86 insertions(+), 36 deletions(-)

diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c
index beda643..9baeed3 100644
--- a/arch/arm/mach-davinci/dm355.c
+++ b/arch/arm/mach-davinci/dm355.c
@@ -558,13 +558,31 @@ static const s8 dma_chan_dm355_no_event[] = {
        -1
 };
 
+static const s8
+queue_tc_mapping[][2] = {
+       /* {event queue no, TC no} */
+       {0, 0},
+       {1, 1},
+       {-1, -1},
+};
+
+static const s8
+queue_priority_mapping[][2] = {
+       /* {event queue no, Priority} */
+       {0, 3},
+       {1, 7},
+       {-1, -1},
+};
+
 static struct edma_soc_info dm355_edma_info = {
-       .n_channel      = 64,
-       .n_region       = 4,
-       .n_slot         = 128,
-       .n_tc           = 2,
-       .n_cc           = 1,
-       .noevent        = dma_chan_dm355_no_event,
+       .n_channel              = 64,
+       .n_region               = 4,
+       .n_slot                 = 128,
+       .n_tc                   = 2,
+       .n_cc                   = 1,
+       .noevent                = dma_chan_dm355_no_event,
+       .queue_tc_mapping       = queue_tc_mapping,
+       .queue_priority_mapping = queue_priority_mapping,
 };
 
 static struct resource edma_resources[] = {
diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c
index ddc1d4f..a2f83af 100644
--- a/arch/arm/mach-davinci/dm644x.c
+++ b/arch/arm/mach-davinci/dm644x.c
@@ -484,13 +484,31 @@ static const s8 dma_chan_dm644x_no_event[] = {
        -1
 };
 
+static const s8
+queue_tc_mapping[][2] = {
+       /* {event queue no, TC no} */
+       {0, 0},
+       {1, 1},
+       {-1, -1},
+};
+
+static const s8
+queue_priority_mapping[][2] = {
+       /* {event queue no, Priority} */
+       {0, 3},
+       {1, 7},
+       {-1, -1},
+};
+
 static struct edma_soc_info dm644x_edma_info = {
-       .n_channel      = 64,
-       .n_region       = 4,
-       .n_slot         = 128,
-       .n_tc           = 2,
-       .n_cc           = 1,
-       .noevent        = dma_chan_dm644x_no_event,
+       .n_channel              = 64,
+       .n_region               = 4,
+       .n_slot                 = 128,
+       .n_tc                   = 2,
+       .n_cc                   = 1,
+       .noevent                = dma_chan_dm644x_no_event,
+       .queue_tc_mapping       = queue_tc_mapping,
+       .queue_priority_mapping = queue_priority_mapping,
 };
 
 static struct resource edma_resources[] = {
diff --git a/arch/arm/mach-davinci/dm646x.c b/arch/arm/mach-davinci/dm646x.c
index 334f071..d32d2b8 100644
--- a/arch/arm/mach-davinci/dm646x.c
+++ b/arch/arm/mach-davinci/dm646x.c
@@ -451,17 +451,41 @@ static const s8 dma_chan_dm646x_no_event[] = {
        -1
 };
 
+/* Four Transfer Controllers on DM646x */
+static const s8
+dm646x_queue_tc_mapping[][2] = {
+       /* {event queue no, TC no} */
+       {0, 0},
+       {1, 1},
+       {2, 2},
+       {3, 3},
+       {-1, -1},
+};
+
+static const s8
+dm646x_queue_priority_mapping[][2] = {
+       /* {event queue no, Priority} */
+       {0, 4},
+       {1, 0},
+       {2, 5},
+       {3, 1},
+       {-1, -1},
+};
+
 static struct edma_soc_info dm646x_edma_info = {
-       .n_channel      = 64,
-       .n_region       = 6,    /* 0-1, 4-7 */
-       .n_slot         = 512,
-       .n_tc           = 4,
-       .noevent        = dma_chan_dm646x_no_event,
+       .n_channel              = 64,
+       .n_region               = 6,    /* 0-1, 4-7 */
+       .n_slot                 = 512,
+       .n_tc                   = 4,
+       .n_cc                   = 1,
+       .noevent                = dma_chan_dm646x_no_event,
+       .queue_tc_mapping       = dm646x_queue_tc_mapping,
+       .queue_priority_mapping = dm646x_queue_priority_mapping,
 };
 
 static struct resource edma_resources[] = {
        {
-               .name   = "edma_cc",
+               .name   = "edma_cc0",
                .start  = 0x01c00000,
                .end    = 0x01c00000 + SZ_64K - 1,
                .flags  = IORESOURCE_MEM,
@@ -503,7 +527,7 @@ static struct resource edma_resources[] = {
 
 static struct platform_device dm646x_edma_device = {
        .name                   = "edma",
-       .id                     = -1,
+       .id                     = 0,
        .dev.platform_data      = &dm646x_edma_info,
        .num_resources          = ARRAY_SIZE(edma_resources),
        .resource               = edma_resources,
diff --git a/arch/arm/mach-davinci/dma.c b/arch/arm/mach-davinci/dma.c
index 0a021ff..50ac74f 100644
--- a/arch/arm/mach-davinci/dma.c
+++ b/arch/arm/mach-davinci/dma.c
@@ -106,7 +106,6 @@
 
 #define EDMA_MAX_DMACH           64
 #define EDMA_MAX_PARAMENTRY     512
-#define EDMA_MAX_EVQUE            2    /* FIXME too small */
 #define EDMA_MAX_CC               2
 
 
@@ -258,22 +257,6 @@ static const struct edmacc_param dummy_paramset = {
        .ccnt = 1,
 };
 
-static const int __initconst
-queue_tc_mapping[EDMA_MAX_EVQUE + 1][2] = {
-/* {event queue no, TC no} */
-       {0, 0},
-       {1, 1},
-       {-1, -1}
-};
-
-static const int __initconst
-queue_priority_mapping[EDMA_MAX_EVQUE + 1][2] = {
-       /* {event queue no, Priority} */
-       {0, 3},
-       {1, 7},
-       {-1, -1}
-};
-
 /*****************************************************************************/
 
 static void map_dmach_queue(unsigned ctlr, unsigned ch_no,
@@ -1191,6 +1174,8 @@ EXPORT_SYMBOL(edma_clear_event);
 static int __init edma_probe(struct platform_device *pdev)
 {
        struct edma_soc_info    *info = pdev->dev.platform_data;
+       const s8                (*queue_priority_mapping)[2];
+       const s8                (*queue_tc_mapping)[2];
        int                     i;
        int                     status;
        const s8                *noevent;
@@ -1289,6 +1274,9 @@ static int __init edma_probe(struct platform_device *pdev)
        for (i = 0; i < edma_info[pdev->id]->num_channels; i++)
                map_dmach_queue(pdev->id, i, EVENTQ_1);
 
+       queue_tc_mapping = info->queue_tc_mapping;
+       queue_priority_mapping = info->queue_priority_mapping;
+
        /* Event queue to TC mapping */
        for (i = 0; queue_tc_mapping[i][0] != -1; i++)
                map_queue_tc(pdev->id, queue_tc_mapping[i][0],
diff --git a/arch/arm/mach-davinci/include/mach/edma.h 
b/arch/arm/mach-davinci/include/mach/edma.h
index e2f7deb..ba2ebdd 100644
--- a/arch/arm/mach-davinci/include/mach/edma.h
+++ b/arch/arm/mach-davinci/include/mach/edma.h
@@ -224,6 +224,8 @@ struct edma_soc_info {
 
        /* list of channels with no even trigger; terminated by "-1" */
        const s8        *noevent;
+       const s8        (*queue_tc_mapping)[2];
+       const s8        (*queue_priority_mapping)[2];
 };
 
 #endif
-- 
1.6.3.3


_______________________________________________
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to