dmaengine.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tony Lindgren <tony@atomide.com>
To: Dan Williams <dan.j.williams@intel.com>,
	Vinod Koul <vinod.koul@intel.com>
Cc: Alexandre Bailon <abailon@baylibre.com>,
	Andy Shevchenko <andy.shevchenko@gmail.com>,
	Bin Liu <b-liu@ti.com>, Daniel Mack <zonque@gmail.com>,
	Felipe Balbi <felipe.balbi@linux.intel.com>,
	George Cherian <george.cherian@ti.com>,
	Grygorii Strashko <grygorii.strashko@ti.com>,
	Johan Hovold <johan@kernel.org>,
	Peter Ujfalusi <peter.ujfalusi@ti.com>,
	Sekhar Nori <nsekhar@ti.com>,
	Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
	Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>,
	dmaengine@vger.kernel.org, linux-usb@vger.kernel.org,
	linux-omap@vger.kernel.org,
	giulio.benetti@benettiengineering.com,
	Sebastian Reichel <sre@kernel.org>,
	Skvortsov <andrej.skvortzov@gmail.com>,
	Yegor Yefremov <yegorslists@googlemail.com>
Subject: [PATCH] dmaengine: cppi41: Fix issue with musb and ftdi uart
Date: Tue, 22 Oct 2019 07:55:45 -0700	[thread overview]
Message-ID: <20191022145545.6449-1-tony@atomide.com> (raw)

The first dma call done by musb_ep_program() must wait if cppi41 is PM
runtime suspended. Otherwise musb_ep_program() continues with other
non-dma packets before the DMA transfer is started causing at least ftdi
uarts to fail to receive data.

Let's fix the issue by waking up cppi41 with PM runtime calls added to
cppi41_dma_prep_slave_sg() and return NULL if still idled. This way we
have musb_ep_program() continue with PIO until cppi41 is awake.

Fixes: fdea2d09b997 ("dmaengine: cppi41: Add basic PM runtime support")
Cc: Bin Liu <b-liu@ti.com>
Cc: giulio.benetti@benettiengineering.com
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: Sebastian Reichel <sre@kernel.org>
Cc: Skvortsov <andrej.skvortzov@gmail.com>
Reported-by: Yegor Yefremov <yegorslists@googlemail.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
---
 drivers/dma/ti/cppi41.c | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/drivers/dma/ti/cppi41.c b/drivers/dma/ti/cppi41.c
--- a/drivers/dma/ti/cppi41.c
+++ b/drivers/dma/ti/cppi41.c
@@ -586,9 +586,22 @@ static struct dma_async_tx_descriptor *cppi41_dma_prep_slave_sg(
 	enum dma_transfer_direction dir, unsigned long tx_flags, void *context)
 {
 	struct cppi41_channel *c = to_cpp41_chan(chan);
+	struct dma_async_tx_descriptor *txd = NULL;
+	struct cppi41_dd *cdd = c->cdd;
 	struct cppi41_desc *d;
 	struct scatterlist *sg;
 	unsigned int i;
+	int error;
+
+	error = pm_runtime_get(cdd->ddev.dev);
+	if (error < 0) {
+		pm_runtime_put_noidle(cdd->ddev.dev);
+
+		return NULL;
+	}
+
+	if (cdd->is_suspended)
+		goto err_out_not_ready;
 
 	d = c->desc;
 	for_each_sg(sgl, sg, sg_len, i) {
@@ -611,7 +624,13 @@ static struct dma_async_tx_descriptor *cppi41_dma_prep_slave_sg(
 		d++;
 	}
 
-	return &c->txd;
+	txd = &c->txd;
+
+err_out_not_ready:
+	pm_runtime_mark_last_busy(cdd->ddev.dev);
+	pm_runtime_put_autosuspend(cdd->ddev.dev);
+
+	return txd;
 }
 
 static void cppi41_compute_td_desc(struct cppi41_desc *d)
-- 
2.23.0

             reply	other threads:[~2019-10-22 14:56 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-22 14:55 Tony Lindgren [this message]
2019-10-23  4:53 ` [PATCH] dmaengine: cppi41: Fix issue with musb and ftdi uart Vinod Koul
2019-10-23 15:27   ` Tony Lindgren

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191022145545.6449-1-tony@atomide.com \
    --to=tony@atomide.com \
    --cc=abailon@baylibre.com \
    --cc=andrej.skvortzov@gmail.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=b-liu@ti.com \
    --cc=bigeasy@linutronix.de \
    --cc=dan.j.williams@intel.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=felipe.balbi@linux.intel.com \
    --cc=george.cherian@ti.com \
    --cc=giulio.benetti@benettiengineering.com \
    --cc=grygorii.strashko@ti.com \
    --cc=johan@kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=nsekhar@ti.com \
    --cc=peter.ujfalusi@ti.com \
    --cc=sergei.shtylyov@cogentembedded.com \
    --cc=sre@kernel.org \
    --cc=vinod.koul@intel.com \
    --cc=yegorslists@googlemail.com \
    --cc=zonque@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).