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

Not all the channels and slots available on the DM646x EVM
are used by the devices on the EVM. These resources can be
used by the DSP to speed up codec operations.

This patch reserves these channels for the DSP.

Signed-off-by: Sudhakar Rajashekhara <sudhakar....@ti.com>
Signed-off-by: Sekhar Nori <nsek...@ti.com>
---
Since v2, the channel/slot reservation has been made board specific
instead of imposing it on all users. 

Unfortunately it has been a long time since the patches were reviewed
last. Here is the relevant discussion thread:
http://www.mail-archive.com/davinci-linux-open-source@linux.davincidsp.com/msg16506.html

 arch/arm/mach-davinci/board-dm646x-evm.c    |   28 +++++++++++++++++++++++++++
 arch/arm/mach-davinci/dm646x.c              |   10 ++++++++-
 arch/arm/mach-davinci/include/mach/dm646x.h |    3 ++
 3 files changed, 40 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c 
b/arch/arm/mach-davinci/board-dm646x-evm.c
index 5ba3cb2..ed47189 100644
--- a/arch/arm/mach-davinci/board-dm646x-evm.c
+++ b/arch/arm/mach-davinci/board-dm646x-evm.c
@@ -724,6 +724,32 @@ static struct davinci_uart_config uart_config __initdata = 
{
 #define DM646X_EVM_PHY_MASK            (0x2)
 #define DM646X_EVM_MDIO_FREQUENCY      (2200000) /* PHY bus frequency */
 
+/*
+ * The following EDMA channels/slots are not being used by drivers (for
+ * example: Timer, GPIO, UART events etc) on dm646x, hence they are being
+ * reserved for codecs on the DSP side.
+ */
+static const s16 dm646x_dma_rsv_chans[][2] = {
+       /* (offset, number) */
+       { 0,  4},
+       {13,  3},
+       {24,  4},
+       {30,  2},
+       {54,  3},
+       {-1, -1}
+};
+
+static const s16 dm646x_dma_rsv_slots[][2] = {
+       /* (offset, number) */
+       { 0,  4},
+       {13,  3},
+       {24,  4},
+       {30,  2},
+       {54,  3},
+       {128, 384},
+       {-1, -1}
+};
+
 static __init void evm_init(void)
 {
        struct davinci_soc_info *soc_info = &davinci_soc_info;
@@ -735,6 +761,8 @@ static __init void evm_init(void)
 
        platform_device_register(&davinci_nand_device);
 
+       dm646x_init_edma(dm646x_dma_rsv_chans, dm646x_dma_rsv_slots);
+
        if (HAS_ATA)
                dm646x_init_ide();
 
diff --git a/arch/arm/mach-davinci/dm646x.c b/arch/arm/mach-davinci/dm646x.c
index 893baf4..33ae939 100644
--- a/arch/arm/mach-davinci/dm646x.c
+++ b/arch/arm/mach-davinci/dm646x.c
@@ -912,6 +912,15 @@ void dm646x_setup_vpif(struct vpif_display_config 
*display_config,
        platform_device_register(&vpif_capture_dev);
 }
 
+int __init dm646x_init_edma(const s16 (*rsv_chans)[2],
+               const s16 (*rsv_slots)[2])
+{
+       dm646x_edma_info[0].rsv_chans = rsv_chans;
+       dm646x_edma_info[0].rsv_slots = rsv_slots;
+
+       return platform_device_register(&dm646x_edma_device);
+}
+
 void __init dm646x_init(void)
 {
        dm646x_board_setup_refclk(&ref_clk);
@@ -923,7 +932,6 @@ static int __init dm646x_init_devices(void)
        if (!cpu_is_davinci_dm646x())
                return 0;
 
-       platform_device_register(&dm646x_edma_device);
        platform_device_register(&dm646x_emac_device);
        return 0;
 }
diff --git a/arch/arm/mach-davinci/include/mach/dm646x.h 
b/arch/arm/mach-davinci/include/mach/dm646x.h
index 846da98..f281054 100644
--- a/arch/arm/mach-davinci/include/mach/dm646x.h
+++ b/arch/arm/mach-davinci/include/mach/dm646x.h
@@ -32,6 +32,9 @@ void __init dm646x_init_ide(void);
 void __init dm646x_init_mcasp0(struct snd_platform_data *pdata);
 void __init dm646x_init_mcasp1(struct snd_platform_data *pdata);
 void __init dm646x_board_setup_refclk(struct clk *clk);
+int __init dm646x_init_edma(const s16 (*rsv_chans)[2],
+               const s16 (*rsv_slots)[2]);
+
 
 void dm646x_video_init(void);
 
-- 
1.6.2.4

_______________________________________________
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