All of lore.kernel.org
 help / color / mirror / Atom feed
From: Serge Semin <Sergey.Semin@baikalelectronics.ru>
To: Mark Brown <broonie@kernel.org>
Cc: Serge Semin <Sergey.Semin@baikalelectronics.ru>,
	Serge Semin <fancer.lancer@gmail.com>,
	Alexey Malahov <Alexey.Malahov@baikalelectronics.ru>,
	Georgy Vlasov <Georgy.Vlasov@baikalelectronics.ru>,
	Ramil Zaripov <Ramil.Zaripov@baikalelectronics.ru>,
	Pavel Parkhomenko <Pavel.Parkhomenko@baikalelectronics.ru>,
	Peter Ujfalusi <peter.ujfalusi@ti.com>,
	Andy Shevchenko <andy.shevchenko@gmail.com>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Feng Tang <feng.tang@intel.com>, Vinod Koul <vkoul@kernel.org>,
	<linux-spi@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: [PATCH v2 06/11] spi: dw-dma: Check DMA Tx-desc submission status
Date: Sun, 20 Sep 2020 14:23:17 +0300	[thread overview]
Message-ID: <20200920112322.24585-7-Sergey.Semin@baikalelectronics.ru> (raw)
In-Reply-To: <20200920112322.24585-1-Sergey.Semin@baikalelectronics.ru>

We suggest to add the dmaengine_submit() return value test for errors.  It
has been unnecessary while the driver was expected to be utilized in pair
with DW DMAC. But since now the driver can be used with any DMA engine, it
might be useful to track the errors on DMA submissions so not miss them
and get into an unpredictable driver behaviour.

Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>

---

Changelog v2:
- Replace negative conditional statements with the positive ones.
- Terminate the prepared descriptors on submission errors.
---
 drivers/spi/spi-dw-dma.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/drivers/spi/spi-dw-dma.c b/drivers/spi/spi-dw-dma.c
index 769d10ca74b4..aa3900809126 100644
--- a/drivers/spi/spi-dw-dma.c
+++ b/drivers/spi/spi-dw-dma.c
@@ -275,6 +275,8 @@ static struct dma_async_tx_descriptor *
 dw_spi_dma_submit_tx(struct dw_spi *dws, struct spi_transfer *xfer)
 {
 	struct dma_async_tx_descriptor *txdesc;
+	dma_cookie_t cookie;
+	int ret;
 
 	txdesc = dmaengine_prep_slave_sg(dws->txchan,
 				xfer->tx_sg.sgl,
@@ -287,7 +289,13 @@ dw_spi_dma_submit_tx(struct dw_spi *dws, struct spi_transfer *xfer)
 	txdesc->callback = dw_spi_dma_tx_done;
 	txdesc->callback_param = dws;
 
-	dmaengine_submit(txdesc);
+	cookie = dmaengine_submit(txdesc);
+	ret = dma_submit_error(cookie);
+	if (ret) {
+		dmaengine_terminate_sync(dws->txchan);
+		return NULL;
+	}
+
 	set_bit(TX_BUSY, &dws->dma_chan_busy);
 
 	return txdesc;
@@ -371,6 +379,8 @@ static struct dma_async_tx_descriptor *dw_spi_dma_submit_rx(struct dw_spi *dws,
 		struct spi_transfer *xfer)
 {
 	struct dma_async_tx_descriptor *rxdesc;
+	dma_cookie_t cookie;
+	int ret;
 
 	rxdesc = dmaengine_prep_slave_sg(dws->rxchan,
 				xfer->rx_sg.sgl,
@@ -383,7 +393,13 @@ static struct dma_async_tx_descriptor *dw_spi_dma_submit_rx(struct dw_spi *dws,
 	rxdesc->callback = dw_spi_dma_rx_done;
 	rxdesc->callback_param = dws;
 
-	dmaengine_submit(rxdesc);
+	cookie = dmaengine_submit(rxdesc);
+	ret = dma_submit_error(cookie);
+	if (ret) {
+		dmaengine_terminate_sync(dws->rxchan);
+		return NULL;
+	}
+
 	set_bit(RX_BUSY, &dws->dma_chan_busy);
 
 	return rxdesc;
-- 
2.27.0


  parent reply	other threads:[~2020-09-20 11:24 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-20 11:23 [PATCH v2 00/11] spi: dw-dma: Add max SG entries burst capability support Serge Semin
2020-09-20 11:23 ` [PATCH v2 01/11] spi: dw-dma: Set DMA Level registers on init Serge Semin
2020-09-20 11:23 ` [PATCH v2 02/11] spi: dw-dma: Fail DMA-based transfer if no Tx-buffer specified Serge Semin
2020-09-20 11:23 ` [PATCH v2 03/11] spi: dw-dma: Configure the DMA channels in dma_setup Serge Semin
2020-09-20 11:23 ` [PATCH v2 04/11] spi: dw-dma: Check rx_buf availability in the xfer method Serge Semin
2020-09-20 11:23 ` [PATCH v2 05/11] spi: dw-dma: Move DMA transfers submission to the channels prep methods Serge Semin
2020-09-20 11:23 ` Serge Semin [this message]
2020-09-20 11:23 ` [PATCH v2 07/11] spi: dw-dma: Remove DMA Tx-desc passing around Serge Semin
2020-09-20 11:23 ` [PATCH v2 08/11] spi: dw-dma: Detach DMA transfer into a dedicated method Serge Semin
2020-09-20 11:23 ` [PATCH v2 09/11] spi: dw-dma: Move DMAC register cleanup to DMA transfer method Serge Semin
2020-09-20 11:23 ` [PATCH v2 10/11] spi: dw-dma: Pass exact data to the DMA submit and wait methods Serge Semin
2020-09-20 11:23 ` [PATCH v2 11/11] spi: dw-dma: Add one-by-one SG list entries transfer Serge Semin
2020-09-29 16:23 ` [PATCH v2 00/11] spi: dw-dma: Add max SG entries burst capability support Mark Brown

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=20200920112322.24585-7-Sergey.Semin@baikalelectronics.ru \
    --to=sergey.semin@baikalelectronics.ru \
    --cc=Alexey.Malahov@baikalelectronics.ru \
    --cc=Georgy.Vlasov@baikalelectronics.ru \
    --cc=Pavel.Parkhomenko@baikalelectronics.ru \
    --cc=Ramil.Zaripov@baikalelectronics.ru \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=broonie@kernel.org \
    --cc=fancer.lancer@gmail.com \
    --cc=feng.tang@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-spi@vger.kernel.org \
    --cc=peter.ujfalusi@ti.com \
    --cc=vkoul@kernel.org \
    /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 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.