public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] serial: sh-sci: fix compilation breakage (3.6)
@ 2012-07-30 19:28 Guennadi Liakhovetski
  2012-07-30 19:28 ` [PATCH 1/2] dmaengine: shdma: restore partial transfer calculation Guennadi Liakhovetski
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Guennadi Liakhovetski @ 2012-07-30 19:28 UTC (permalink / raw)
  To: linux-sh
  Cc: Koul, Vinod, Paul Mundt, Magnus Damm, Yoshihiro Shimoda,
	linux-kernel

Hi all

as has been reported in this

http://thread.gmane.org/gmane.linux.kernel/1294256/focus=16001

thread, currently sh-sci doesn't comiple in the mainline and in -next if 
CONFIG_SERIAL_SH_SCI_DMA is enabled. This patch series fixes this 
breakage.

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/2] dmaengine: shdma: restore partial transfer calculation
  2012-07-30 19:28 [PATCH 0/2] serial: sh-sci: fix compilation breakage (3.6) Guennadi Liakhovetski
@ 2012-07-30 19:28 ` Guennadi Liakhovetski
  2012-07-30 19:28 ` [PATCH 2/2] serial: sh-sci: fix compilation breakage, when DMA is enabled Guennadi Liakhovetski
  2012-07-31  6:07 ` [PATCH 0/2] serial: sh-sci: fix compilation breakage (3.6) Paul Mundt
  2 siblings, 0 replies; 5+ messages in thread
From: Guennadi Liakhovetski @ 2012-07-30 19:28 UTC (permalink / raw)
  To: linux-sh
  Cc: Koul, Vinod, Paul Mundt, Magnus Damm, Yoshihiro Shimoda,
	linux-kernel

The recent shdma driver split has mistakenly removed support for partial
DMA transfer size calculation on forced termination. This patch restores
it.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
---
 drivers/dma/sh/shdma-base.c |    9 +++++++++
 drivers/dma/sh/shdma.c      |   12 ++++++++++++
 include/linux/shdma-base.h  |    2 ++
 3 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/drivers/dma/sh/shdma-base.c b/drivers/dma/sh/shdma-base.c
index 27f5c78..f4cd946 100644
--- a/drivers/dma/sh/shdma-base.c
+++ b/drivers/dma/sh/shdma-base.c
@@ -483,6 +483,7 @@ static struct shdma_desc *shdma_add_desc(struct shdma_chan *schan,
 	new->mark = DESC_PREPARED;
 	new->async_tx.flags = flags;
 	new->direction = direction;
+	new->partial = 0;
 
 	*len -= copy_size;
 	if (direction == DMA_MEM_TO_MEM || direction == DMA_MEM_TO_DEV)
@@ -644,6 +645,14 @@ static int shdma_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
 	case DMA_TERMINATE_ALL:
 		spin_lock_irqsave(&schan->chan_lock, flags);
 		ops->halt_channel(schan);
+
+		if (ops->get_partial && !list_empty(&schan->ld_queue)) {
+			/* Record partial transfer */
+			struct shdma_desc *desc = list_first_entry(&schan->ld_queue,
+						struct shdma_desc, node);
+			desc->partial = ops->get_partial(schan, desc);
+		}
+
 		spin_unlock_irqrestore(&schan->chan_lock, flags);
 
 		shdma_chan_ld_cleanup(schan, true);
diff --git a/drivers/dma/sh/shdma.c b/drivers/dma/sh/shdma.c
index 027c9be..f41bcc5 100644
--- a/drivers/dma/sh/shdma.c
+++ b/drivers/dma/sh/shdma.c
@@ -381,6 +381,17 @@ static bool sh_dmae_chan_irq(struct shdma_chan *schan, int irq)
 	return true;
 }
 
+static size_t sh_dmae_get_partial(struct shdma_chan *schan,
+				  struct shdma_desc *sdesc)
+{
+	struct sh_dmae_chan *sh_chan = container_of(schan, struct sh_dmae_chan,
+						    shdma_chan);
+	struct sh_dmae_desc *sh_desc = container_of(sdesc,
+					struct sh_dmae_desc, shdma_desc);
+	return (sh_desc->hw.tcr - sh_dmae_readl(sh_chan, TCR)) <<
+		sh_chan->xmit_shift;
+}
+
 /* Called from error IRQ or NMI */
 static bool sh_dmae_reset(struct sh_dmae_device *shdev)
 {
@@ -632,6 +643,7 @@ static const struct shdma_ops sh_dmae_shdma_ops = {
 	.start_xfer = sh_dmae_start_xfer,
 	.embedded_desc = sh_dmae_embedded_desc,
 	.chan_irq = sh_dmae_chan_irq,
+	.get_partial = sh_dmae_get_partial,
 };
 
 static int __devinit sh_dmae_probe(struct platform_device *pdev)
diff --git a/include/linux/shdma-base.h b/include/linux/shdma-base.h
index 93f9821..a3728bf 100644
--- a/include/linux/shdma-base.h
+++ b/include/linux/shdma-base.h
@@ -50,6 +50,7 @@ struct shdma_desc {
 	struct list_head node;
 	struct dma_async_tx_descriptor async_tx;
 	enum dma_transfer_direction direction;
+	size_t partial;
 	dma_cookie_t cookie;
 	int chunks;
 	int mark;
@@ -98,6 +99,7 @@ struct shdma_ops {
 	void (*start_xfer)(struct shdma_chan *, struct shdma_desc *);
 	struct shdma_desc *(*embedded_desc)(void *, int);
 	bool (*chan_irq)(struct shdma_chan *, int);
+	size_t (*get_partial)(struct shdma_chan *, struct shdma_desc *);
 };
 
 struct shdma_dev {
-- 
1.7.2.5


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] serial: sh-sci: fix compilation breakage, when DMA is enabled
  2012-07-30 19:28 [PATCH 0/2] serial: sh-sci: fix compilation breakage (3.6) Guennadi Liakhovetski
  2012-07-30 19:28 ` [PATCH 1/2] dmaengine: shdma: restore partial transfer calculation Guennadi Liakhovetski
@ 2012-07-30 19:28 ` Guennadi Liakhovetski
  2012-07-31  6:07 ` [PATCH 0/2] serial: sh-sci: fix compilation breakage (3.6) Paul Mundt
  2 siblings, 0 replies; 5+ messages in thread
From: Guennadi Liakhovetski @ 2012-07-30 19:28 UTC (permalink / raw)
  To: linux-sh
  Cc: Koul, Vinod, Paul Mundt, Magnus Damm, Yoshihiro Shimoda,
	linux-kernel

A recent commit:

commit d6fa5a4e7ab605370fd6c982782f84ef2e6660e7
Author: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
    serial: sh-sci: prepare for conversion to the shdma base library

is not sufficient to update the sh-sci driver to the new shdma driver
layout. This caused compilation breakage, when CONFIG_SERIAL_SH_SCI_DMA
is enabled. This patch trivially fixes the problem by updating the DMA
descriptor manipulation code.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
---
 drivers/tty/serial/sh-sci.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index d4d8c94..9be296c 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -25,6 +25,7 @@
 
 #include <linux/module.h>
 #include <linux/errno.h>
+#include <linux/sh_dma.h>
 #include <linux/timer.h>
 #include <linux/interrupt.h>
 #include <linux/tty.h>
@@ -1410,8 +1411,8 @@ static void work_fn_rx(struct work_struct *work)
 		/* Handle incomplete DMA receive */
 		struct tty_struct *tty = port->state->port.tty;
 		struct dma_chan *chan = s->chan_rx;
-		struct sh_desc *sh_desc = container_of(desc, struct sh_desc,
-						       async_tx);
+		struct shdma_desc *sh_desc = container_of(desc,
+					struct shdma_desc, async_tx);
 		unsigned long flags;
 		int count;
 
-- 
1.7.2.5


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/2] serial: sh-sci: fix compilation breakage (3.6)
  2012-07-30 19:28 [PATCH 0/2] serial: sh-sci: fix compilation breakage (3.6) Guennadi Liakhovetski
  2012-07-30 19:28 ` [PATCH 1/2] dmaengine: shdma: restore partial transfer calculation Guennadi Liakhovetski
  2012-07-30 19:28 ` [PATCH 2/2] serial: sh-sci: fix compilation breakage, when DMA is enabled Guennadi Liakhovetski
@ 2012-07-31  6:07 ` Paul Mundt
  2012-07-31  6:44   ` Vinod Koul
  2 siblings, 1 reply; 5+ messages in thread
From: Paul Mundt @ 2012-07-31  6:07 UTC (permalink / raw)
  To: Guennadi Liakhovetski
  Cc: linux-sh, Koul, Vinod, Magnus Damm, Yoshihiro Shimoda,
	linux-kernel

On Mon, Jul 30, 2012 at 09:28:18PM +0200, Guennadi Liakhovetski wrote:
> Hi all
> 
> as has been reported in this
> 
> http://thread.gmane.org/gmane.linux.kernel/1294256/focus=16001
> 
> thread, currently sh-sci doesn't comiple in the mainline and in -next if 
> CONFIG_SERIAL_SH_SCI_DMA is enabled. This patch series fixes this 
> breakage.
> 
Looks alright to me. Vinod, how do you want to handle this? I can roll
both of these patches in to my tree with your Acked-by, or I can provide
you with mine for the sh-sci bits if you want to take it via yours. I'm
planning on sending my next round of updates to Linus in the next couple
of days.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/2] serial: sh-sci: fix compilation breakage (3.6)
  2012-07-31  6:07 ` [PATCH 0/2] serial: sh-sci: fix compilation breakage (3.6) Paul Mundt
@ 2012-07-31  6:44   ` Vinod Koul
  0 siblings, 0 replies; 5+ messages in thread
From: Vinod Koul @ 2012-07-31  6:44 UTC (permalink / raw)
  To: Paul Mundt
  Cc: Guennadi Liakhovetski, linux-sh, Magnus Damm, Yoshihiro Shimoda,
	linux-kernel

On Tue, 2012-07-31 at 15:07 +0900, Paul Mundt wrote:
> On Mon, Jul 30, 2012 at 09:28:18PM +0200, Guennadi Liakhovetski wrote:
> > Hi all
> > 
> > as has been reported in this
> > 
> > http://thread.gmane.org/gmane.linux.kernel/1294256/focus=16001
> > 
> > thread, currently sh-sci doesn't comiple in the mainline and in -next if 
> > CONFIG_SERIAL_SH_SCI_DMA is enabled. This patch series fixes this 
> > breakage.
> > 
> Looks alright to me. Vinod, how do you want to handle this? I can roll
> both of these patches in to my tree with your Acked-by, or I can provide
> you with mine for the sh-sci bits if you want to take it via yours. I'm
> planning on sending my next round of updates to Linus in the next couple
> of days.
Looks fine to me as well

Acked-by: Vinod Koul <vinod.koul@linux.intel.com>


-- 
~Vinod


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-07-31  6:43 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-30 19:28 [PATCH 0/2] serial: sh-sci: fix compilation breakage (3.6) Guennadi Liakhovetski
2012-07-30 19:28 ` [PATCH 1/2] dmaengine: shdma: restore partial transfer calculation Guennadi Liakhovetski
2012-07-30 19:28 ` [PATCH 2/2] serial: sh-sci: fix compilation breakage, when DMA is enabled Guennadi Liakhovetski
2012-07-31  6:07 ` [PATCH 0/2] serial: sh-sci: fix compilation breakage (3.6) Paul Mundt
2012-07-31  6:44   ` Vinod Koul

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox