* [PATCH] dma : EG20T PCH: Fix miss-setting DMA descriptor
@ 2010-12-01 10:49 Tomoya MORINAGA
2010-12-04 1:33 ` Dan Williams
0 siblings, 1 reply; 3+ messages in thread
From: Tomoya MORINAGA @ 2010-12-01 10:49 UTC (permalink / raw)
To: Dan Williams, linux-kernel
Cc: kok.howg.ewe, Wang Qi", Wang Yong Y", Intel OTC",
margie.foster, Andrew"
From: Tomoya MORINAGA <tomoya-linux@dsn.okisemi.com>
Currently, in case of using scatter/gather mode, head of data is not sent to
destination. The cause is second descriptor address is set to NEXT.
The NEXT must have head of descriptor address.
This patch sets head of descriptor address to the NEXT.
Signed-off-by: Tomoya MORINAGA <tomoya-linux@dsn.okisemi.com>
---
drivers/dma/pch_dma.c | 15 ++++++++-------
1 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/drivers/dma/pch_dma.c b/drivers/dma/pch_dma.c
index 92b6790..a3d54c0 100644
--- a/drivers/dma/pch_dma.c
+++ b/drivers/dma/pch_dma.c
@@ -259,11 +259,6 @@ static void pdc_dostart(struct pch_dma_chan *pd_chan, struct pch_dma_desc* desc)
return;
}
- channel_writel(pd_chan, DEV_ADDR, desc->regs.dev_addr);
- channel_writel(pd_chan, MEM_ADDR, desc->regs.mem_addr);
- channel_writel(pd_chan, SIZE, desc->regs.size);
- channel_writel(pd_chan, NEXT, desc->regs.next);
-
dev_dbg(chan2dev(&pd_chan->chan), "chan %d -> dev_addr: %x\n",
pd_chan->chan.chan_id, desc->regs.dev_addr);
dev_dbg(chan2dev(&pd_chan->chan), "chan %d -> mem_addr: %x\n",
@@ -273,10 +268,16 @@ static void pdc_dostart(struct pch_dma_chan *pd_chan, struct pch_dma_desc* desc)
dev_dbg(chan2dev(&pd_chan->chan), "chan %d -> next: %x\n",
pd_chan->chan.chan_id, desc->regs.next);
- if (list_empty(&desc->tx_list))
+ if (list_empty(&desc->tx_list)) {
+ channel_writel(pd_chan, DEV_ADDR, desc->regs.dev_addr);
+ channel_writel(pd_chan, MEM_ADDR, desc->regs.mem_addr);
+ channel_writel(pd_chan, SIZE, desc->regs.size);
+ channel_writel(pd_chan, NEXT, desc->regs.next);
pdc_set_mode(&pd_chan->chan, DMA_CTL0_ONESHOT);
- else
+ } else {
+ channel_writel(pd_chan, NEXT, virt_to_phys(&desc->regs));
pdc_set_mode(&pd_chan->chan, DMA_CTL0_SG);
+ }
val = dma_readl(pd, CTL2);
val |= 1 << (DMA_CTL2_START_SHIFT_BITS + pd_chan->chan.chan_id);
--
1.6.0.6
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] dma : EG20T PCH: Fix miss-setting DMA descriptor
2010-12-01 10:49 [PATCH] dma : EG20T PCH: Fix miss-setting DMA descriptor Tomoya MORINAGA
@ 2010-12-04 1:33 ` Dan Williams
2010-12-06 12:58 ` Wang, Yong Y
0 siblings, 1 reply; 3+ messages in thread
From: Dan Williams @ 2010-12-04 1:33 UTC (permalink / raw)
To: Tomoya MORINAGA
Cc: linux-kernel, kok.howg.ewe, Wang Qi", Wang Yong Y",
Intel OTC", margie.foster, Andrew"
2010/12/1 Tomoya MORINAGA <tomoya-linux@dsn.okisemi.com>:
> From: Tomoya MORINAGA <tomoya-linux@dsn.okisemi.com>
>
>
>
> Currently, in case of using scatter/gather mode, head of data is not sent to
>
> destination. The cause is second descriptor address is set to NEXT.
>
> The NEXT must have head of descriptor address.
>
> This patch sets head of descriptor address to the NEXT.
>
>
>
> Signed-off-by: Tomoya MORINAGA <tomoya-linux@dsn.okisemi.com>
> ---
> drivers/dma/pch_dma.c | 15 ++++++++-------
> 1 files changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/dma/pch_dma.c b/drivers/dma/pch_dma.c
> index 92b6790..a3d54c0 100644
> --- a/drivers/dma/pch_dma.c
> +++ b/drivers/dma/pch_dma.c
[..]
> @@ -273,10 +268,16 @@ static void pdc_dostart(struct pch_dma_chan *pd_chan, struct pch_dma_desc* desc)
> dev_dbg(chan2dev(&pd_chan->chan), "chan %d -> next: %x\n",
> pd_chan->chan.chan_id, desc->regs.next);
>
> - if (list_empty(&desc->tx_list))
> + if (list_empty(&desc->tx_list)) {
> + channel_writel(pd_chan, DEV_ADDR, desc->regs.dev_addr);
> + channel_writel(pd_chan, MEM_ADDR, desc->regs.mem_addr);
> + channel_writel(pd_chan, SIZE, desc->regs.size);
> + channel_writel(pd_chan, NEXT, desc->regs.next);
> pdc_set_mode(&pd_chan->chan, DMA_CTL0_ONESHOT);
> - else
> + } else {
> + channel_writel(pd_chan, NEXT, virt_to_phys(&desc->regs));
There is a reason for the following comment for virt_to_phys():
/* This function does not give bus mappings for DMA transfers. In
* almost all conceivable cases a device driver should not be using
* this function
*/
...in this case this wants to be:
channel_write(pd_chan, NEXT, desc->txd.phys);
I'll let Yong comment on the correctness of the rest.
--
Dan
^ permalink raw reply [flat|nested] 3+ messages in thread
* RE: [PATCH] dma : EG20T PCH: Fix miss-setting DMA descriptor
2010-12-04 1:33 ` Dan Williams
@ 2010-12-06 12:58 ` Wang, Yong Y
0 siblings, 0 replies; 3+ messages in thread
From: Wang, Yong Y @ 2010-12-06 12:58 UTC (permalink / raw)
To: Williams, Dan J, Tomoya MORINAGA
Cc: linux-kernel@vger.kernel.org, Ewe, Kok Howg, Wang, Qi,
Clark, Joel, Foster, Margie, Khor, Andrew Chih Howe
> > diff --git a/drivers/dma/pch_dma.c b/drivers/dma/pch_dma.c
> > index 92b6790..a3d54c0 100644
> > --- a/drivers/dma/pch_dma.c
> > +++ b/drivers/dma/pch_dma.c
> [..]
> > @@ -273,10 +268,16 @@ static void pdc_dostart(struct pch_dma_chan
> *pd_chan, struct pch_dma_desc* desc)
> > dev_dbg(chan2dev(&pd_chan->chan), "chan %d -> next: %x\n",
> > pd_chan->chan.chan_id, desc->regs.next);
> >
> > - if (list_empty(&desc->tx_list))
> > + if (list_empty(&desc->tx_list)) {
> > + channel_writel(pd_chan, DEV_ADDR,
> desc->regs.dev_addr);
> > + channel_writel(pd_chan, MEM_ADDR,
> desc->regs.mem_addr);
> > + channel_writel(pd_chan, SIZE, desc->regs.size);
> > + channel_writel(pd_chan, NEXT, desc->regs.next);
> > pdc_set_mode(&pd_chan->chan,
> DMA_CTL0_ONESHOT);
> > - else
> > + } else {
> > + channel_writel(pd_chan, NEXT,
> virt_to_phys(&desc->regs));
>
> There is a reason for the following comment for virt_to_phys():
>
> /* This function does not give bus mappings for DMA transfers. In
> * almost all conceivable cases a device driver should not be using
> * this function
> */
>
> ...in this case this wants to be:
>
> channel_write(pd_chan, NEXT, desc->txd.phys);
>
> I'll let Yong comment on the correctness of the rest.
>
Hi Dan,
Apart from the issue you pointed out, the patch looks good to me. If it is convenient for you, please help make the change and merge this patch. Otherwise, please let Tomoya know that you want him to send an updated patch. Thanks!
Acked-by: Yong Wang <youg.y.wang@intel.com>
-Yong
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-12-06 12:58 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-01 10:49 [PATCH] dma : EG20T PCH: Fix miss-setting DMA descriptor Tomoya MORINAGA
2010-12-04 1:33 ` Dan Williams
2010-12-06 12:58 ` Wang, Yong Y
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.