From patchwork Sat Jul 16 06:44:15 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kim Kukjin X-Patchwork-Id: 981312 Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) by demeter2.kernel.org (8.14.4/8.14.4) with ESMTP id p6G7Ansq020903 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sat, 16 Jul 2011 07:11:10 GMT Received: from canuck.infradead.org ([2001:4978:20e::1]) by merlin.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1Qhz1O-0004TV-Bw; Sat, 16 Jul 2011 07:10:42 +0000 Received: from localhost ([127.0.0.1] helo=canuck.infradead.org) by canuck.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1Qhz1N-0005de-Vl; Sat, 16 Jul 2011 07:10:41 +0000 Received: from casper.infradead.org ([2001:770:15f::2]) by canuck.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1Qhz1L-0005dZ-6m for linux-arm-kernel@canuck.infradead.org; Sat, 16 Jul 2011 07:10:39 +0000 Received: from ganesha.gnumonks.org ([213.95.27.120]) by casper.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1Qhz1F-00082A-AF for linux-arm-kernel@lists.infradead.org; Sat, 16 Jul 2011 07:10:34 +0000 Received: from uucp by ganesha.gnumonks.org with local-bsmtp (Exim 4.72) (envelope-from ) id 1QhyoH-0001co-Jw; Sat, 16 Jul 2011 08:57:09 +0200 Received: from [12.23.102.184] (helo=starstone.dsn.sec.samsung.com) by jackpot.kr.gnumonks.org with esmtp (Exim 4.69) (envelope-from ) id 1Qhxvo-0001IC-Dj; Sat, 16 Jul 2011 15:00:52 +0900 From: Kukjin Kim To: linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org Subject: [PATCH V3 02/13] DMA: PL330: Update PL330 DMA API driver Date: Sat, 16 Jul 2011 15:44:15 +0900 Message-Id: <1310798666-7659-3-git-send-email-kgene.kim@samsung.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1310798666-7659-1-git-send-email-kgene.kim@samsung.com> References: <1310798666-7659-1-git-send-email-kgene.kim@samsung.com> X-CRM114-Version: 20090807-BlameThorstenAndJenny ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20110716_081033_494269_8680DE65 X-CRM114-Status: GOOD ( 18.78 ) X-Spam-Score: -1.9 (-) X-Spam-Report: SpamAssassin version 3.3.2 on casper.infradead.org summary: Content analysis details: (-1.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] Cc: Jassi Brar , Linus Walleij , Boojin Kim , Vinod Koul , Mark Brown , Grant Likely , Kukjin Kim , Dan Williams , Liam Girdwood X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: linux-arm-kernel-bounces@lists.infradead.org Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter2.kernel.org [140.211.167.43]); Sat, 16 Jul 2011 07:11:11 +0000 (UTC) From: Boojin Kim This patch updates following 3 items. 1. Removes unneccessary code. 2. Add AMBA, PL330 configuration 3. Change the meaning of 'peri_id' variable from PL330 event number to specific dma id by user. Signed-off-by: Boojin Kim Cc: Vinod Koul Cc: Dan Williams Signed-off-by: Kukjin Kim --- drivers/dma/Kconfig | 3 ++- drivers/dma/pl330.c | 31 ++++++++++++++++--------------- include/linux/amba/pl330.h | 2 +- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig index 25cf327..569cb14 100644 --- a/drivers/dma/Kconfig +++ b/drivers/dma/Kconfig @@ -193,7 +193,8 @@ config ARCH_HAS_ASYNC_TX_FIND_CHANNEL config PL330_DMA tristate "DMA API Driver for PL330" select DMA_ENGINE - depends on PL330 + depends on ARM_AMBA + select PL330 help Select if your platform has one or more PL330 DMACs. You need to provide platform specific settings via diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c index 39e9ffd..9bdda7b 100644 --- a/drivers/dma/pl330.c +++ b/drivers/dma/pl330.c @@ -455,7 +455,7 @@ static struct dma_pl330_desc *pl330_get_desc(struct dma_pl330_chan *pch) async_tx_ack(&desc->txd); desc->req.rqtype = peri->rqtype; - desc->req.peri = peri->peri_id; + desc->req.peri = pch->chan.chan_id; dma_async_tx_descriptor_init(&desc->txd, &pch->chan); @@ -577,7 +577,7 @@ pl330_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl, struct dma_pl330_peri *peri = chan->private; struct scatterlist *sg; unsigned long flags; - int i, burst_size; + int i; dma_addr_t addr; if (unlikely(!pch || !sgl || !sg_len)) @@ -594,7 +594,6 @@ pl330_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl, } addr = peri->fifo_addr; - burst_size = peri->burst_sz; first = NULL; @@ -642,7 +641,7 @@ pl330_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl, sg_dma_address(sg), addr, sg_dma_len(sg)); } - desc->rqcfg.brst_size = burst_size; + desc->rqcfg.brst_size = peri->burst_sz; desc->rqcfg.brst_len = 1; } @@ -749,17 +748,19 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) struct dma_pl330_peri *peri = &pdat->peri[i]; pch = &pdmac->peripherals[i]; - switch (peri->rqtype) { - case MEMTOMEM: - dma_cap_set(DMA_MEMCPY, pd->cap_mask); - break; - case MEMTODEV: - case DEVTOMEM: - dma_cap_set(DMA_SLAVE, pd->cap_mask); - break; - default: - dev_err(&adev->dev, "DEVTODEV Not Supported\n"); - continue; + if (peri) { + switch (peri->rqtype) { + case MEMTOMEM: + dma_cap_set(DMA_MEMCPY, pd->cap_mask); + break; + case MEMTODEV: + case DEVTOMEM: + dma_cap_set(DMA_SLAVE, pd->cap_mask); + break; + default: + dev_err(&adev->dev, "DEVTODEV Not Supported\n"); + continue; + } } INIT_LIST_HEAD(&pch->work_list); diff --git a/include/linux/amba/pl330.h b/include/linux/amba/pl330.h index cbee7de..17b0ada 100644 --- a/include/linux/amba/pl330.h +++ b/include/linux/amba/pl330.h @@ -19,7 +19,7 @@ struct dma_pl330_peri { * Peri_Req i/f of the DMAC that is * peripheral could be reached from. */ - u8 peri_id; /* {0, 31} */ + u8 peri_id; /* specific dma id */ enum pl330_reqtype rqtype; /* For M->D and D->M Channels */