Message ID | 1311557312-26107-3-git-send-email-boojin.kim@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Jul 25, 2011 at 6:58 AM, Boojin Kim <boojin.kim@samsung.com> wrote: > diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c > index b7ecf47..586ab39 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; Btw, I plan to revert this if my patch is accepted that proposes to free chan_id solely for use by DMAC drivers(which we should employ to pass paltform assigned channel ID to client drivers) > @@ -748,17 +747,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; > + } > } If you pass platform data correctly, you don't need to check against NULL peri.
> -----Original Message----- > From: Jassi Brar [mailto:jassisinghbrar@gmail.com] > Sent: Monday, July 25, 2011 5:58 PM > To: Boojin Kim > Cc: linux-arm-kernel@lists.infradead.org; linux-samsung-soc@vger.kernel.org; > Vinod Koul; Dan Williams; Kukjin Kim; Grant Likely; Mark Brown > Subject: Re: [PATCH V4 02/14] DMA: PL330: Update PL330 DMA API driver > > On Mon, Jul 25, 2011 at 6:58 AM, Boojin Kim <boojin.kim@samsung.com> wrote: > > > diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c > > index b7ecf47..586ab39 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; > Btw, I plan to revert this if my patch is accepted that proposes > to free chan_id solely for use by DMAC drivers(which we should > employ to pass paltform assigned channel ID to client drivers) > > > @@ -748,17 +747,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; > > + } > > } > If you pass platform data correctly, you don't need to check against NULL > peri. Ok, It may be excessive error check. I will remove this point.
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 b7ecf47..586ab39 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; } @@ -748,17 +747,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 */