From 5c6dad9e00315e8301ba6d5f99d6ef1a40695e9b Mon Sep 17 00:00:00 2001 From: root Date: Fri, 28 Jan 2011 14:49:56 +0800 Subject: [PATCH] change memcpy dma path --- arch/arm/mach-rk29/dma.c | 7 ++++--- arch/arm/mach-rk29/memcpy_dma.c | 21 ++++++++++++--------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/arch/arm/mach-rk29/dma.c b/arch/arm/mach-rk29/dma.c index 5799662ca1df..9a7875530488 100755 --- a/arch/arm/mach-rk29/dma.c +++ b/arch/arm/mach-rk29/dma.c @@ -30,7 +30,7 @@ static struct rk29_pl330_platdata rk29_dmac0_pdata = { [4] = DMACH_I2S_2CH_TX, [5] = DMACH_I2S_2CH_RX, [6] = DMACH_SPDIF, - [7] = DMACH_DMAC0_MEMTOMEM, + [7] = DMACH_MAX, [8] = DMACH_MAX, [9] = DMACH_MAX, [10] = DMACH_MAX, @@ -83,8 +83,9 @@ static struct rk29_pl330_platdata rk29_dmac2_pdata = { [11] = DMACH_SPI0_RX, [12] = DMACH_SPI1_TX, [13] = DMACH_SPI1_RX, - [14] = DMACH_PID_FILTER, - [15] = DMACH_MAX, + [14] = DMACH_PID_FILTER, + [15] = DMACH_DMAC0_MEMTOMEM, + [16] = DMACH_MAX, }, }; diff --git a/arch/arm/mach-rk29/memcpy_dma.c b/arch/arm/mach-rk29/memcpy_dma.c index da17f9018256..d7db46d944e1 100755 --- a/arch/arm/mach-rk29/memcpy_dma.c +++ b/arch/arm/mach-rk29/memcpy_dma.c @@ -14,6 +14,7 @@ static DECLARE_WAIT_QUEUE_HEAD(wq); static int wq_condition = 0; +//wait_queue_head_t dma_memcpy_wait; static struct rk29_dma_client rk29_dma_memcpy_client = { .name = "rk29-dma-memcpy", @@ -31,6 +32,7 @@ static void rk29_dma_memcpy_callback(struct rk29_dma_chan *dma_ch, void *buf_id, { wq_condition = 1; wake_up_interruptible(&wq); + //wake_up_interruptible(&dma_memcpy_wait); } //int slecount = 0; @@ -53,16 +55,14 @@ static ssize_t memcpy_dma_write (struct device *device,struct device_attribute * struct Dma_MemToMem *DmaMemInfo = (struct Dma_MemToMem *)argv; - dma_flag = rk29_dma_request(DMACH_DMAC0_MEMTOMEM, &rk29_dma_memcpy_client, NULL); - dma_flag = DMACH_DMAC0_MEMTOMEM; - - rt = rk29_dma_devconfig(dma_flag, RK29_DMASRC_MEMTOMEM, DmaMemInfo->SrcAddr); - rt = rk29_dma_config(dma_flag, 8); - rt = rk29_dma_set_buffdone_fn(dma_flag, rk29_dma_memcpy_callback); - rt = rk29_dma_enqueue(dma_flag, NULL, DmaMemInfo->DstAddr, DmaMemInfo->MenSize); - rt = rk29_dma_ctrl(dma_flag, RK29_DMAOP_START); - wait_event_interruptible_timeout(wq, wq_condition, HZ/20); + + rt = rk29_dma_devconfig(DMACH_DMAC0_MEMTOMEM, RK29_DMASRC_MEMTOMEM, DmaMemInfo->SrcAddr); + rt = rk29_dma_enqueue(DMACH_DMAC0_MEMTOMEM, NULL, DmaMemInfo->DstAddr, DmaMemInfo->MenSize); + rt = rk29_dma_ctrl(DMACH_DMAC0_MEMTOMEM, RK29_DMAOP_START); + wait_event_interruptible_timeout(wq, wq_condition, 200); wq_condition = 0; + //init_waitqueue_head(&dma_memcpy_wait); + //interruptible_sleep_on(&dma_memcpy_wait); return 0; } @@ -74,6 +74,9 @@ static int __init dma_memcpy_probe(struct platform_device *pdev) int ret; ret = device_create_file(&pdev->dev, &driver_attr_dmamemcpy); + rk29_dma_request(DMACH_DMAC0_MEMTOMEM, &rk29_dma_memcpy_client, NULL); + rk29_dma_config(DMACH_DMAC0_MEMTOMEM, 8); + rk29_dma_set_buffdone_fn(DMACH_DMAC0_MEMTOMEM, rk29_dma_memcpy_callback); if(ret) { printk(">> fb1 dsp win0 info device_create_file err\n"); -- 2.34.1