Commit 7a4d61f1 authored by Serge Semin's avatar Serge Semin Committed by Mark Brown

spi: dw-dma: Remove DMA Tx-desc passing around

It's pointless to pass the Rx and Tx transfers DMA Tx-descriptors, since
they are used in the Tx/Rx submit method only. Instead just return the
submission status from these methods. This alteration will make the code
less complex.
Signed-off-by: default avatarSerge Semin <Sergey.Semin@baikalelectronics.ru>
Link: https://lore.kernel.org/r/20200920112322.24585-8-Sergey.Semin@baikalelectronics.ruSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 9a6471a1
...@@ -271,8 +271,7 @@ static int dw_spi_dma_config_tx(struct dw_spi *dws) ...@@ -271,8 +271,7 @@ static int dw_spi_dma_config_tx(struct dw_spi *dws)
return dmaengine_slave_config(dws->txchan, &txconf); return dmaengine_slave_config(dws->txchan, &txconf);
} }
static struct dma_async_tx_descriptor * static int dw_spi_dma_submit_tx(struct dw_spi *dws, struct spi_transfer *xfer)
dw_spi_dma_submit_tx(struct dw_spi *dws, struct spi_transfer *xfer)
{ {
struct dma_async_tx_descriptor *txdesc; struct dma_async_tx_descriptor *txdesc;
dma_cookie_t cookie; dma_cookie_t cookie;
...@@ -284,7 +283,7 @@ dw_spi_dma_submit_tx(struct dw_spi *dws, struct spi_transfer *xfer) ...@@ -284,7 +283,7 @@ dw_spi_dma_submit_tx(struct dw_spi *dws, struct spi_transfer *xfer)
DMA_MEM_TO_DEV, DMA_MEM_TO_DEV,
DMA_PREP_INTERRUPT | DMA_CTRL_ACK); DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
if (!txdesc) if (!txdesc)
return NULL; return -ENOMEM;
txdesc->callback = dw_spi_dma_tx_done; txdesc->callback = dw_spi_dma_tx_done;
txdesc->callback_param = dws; txdesc->callback_param = dws;
...@@ -293,12 +292,12 @@ dw_spi_dma_submit_tx(struct dw_spi *dws, struct spi_transfer *xfer) ...@@ -293,12 +292,12 @@ dw_spi_dma_submit_tx(struct dw_spi *dws, struct spi_transfer *xfer)
ret = dma_submit_error(cookie); ret = dma_submit_error(cookie);
if (ret) { if (ret) {
dmaengine_terminate_sync(dws->txchan); dmaengine_terminate_sync(dws->txchan);
return NULL; return ret;
} }
set_bit(TX_BUSY, &dws->dma_chan_busy); set_bit(TX_BUSY, &dws->dma_chan_busy);
return txdesc; return 0;
} }
static inline bool dw_spi_dma_rx_busy(struct dw_spi *dws) static inline bool dw_spi_dma_rx_busy(struct dw_spi *dws)
...@@ -375,8 +374,7 @@ static int dw_spi_dma_config_rx(struct dw_spi *dws) ...@@ -375,8 +374,7 @@ static int dw_spi_dma_config_rx(struct dw_spi *dws)
return dmaengine_slave_config(dws->rxchan, &rxconf); return dmaengine_slave_config(dws->rxchan, &rxconf);
} }
static struct dma_async_tx_descriptor *dw_spi_dma_submit_rx(struct dw_spi *dws, static int dw_spi_dma_submit_rx(struct dw_spi *dws, struct spi_transfer *xfer)
struct spi_transfer *xfer)
{ {
struct dma_async_tx_descriptor *rxdesc; struct dma_async_tx_descriptor *rxdesc;
dma_cookie_t cookie; dma_cookie_t cookie;
...@@ -388,7 +386,7 @@ static struct dma_async_tx_descriptor *dw_spi_dma_submit_rx(struct dw_spi *dws, ...@@ -388,7 +386,7 @@ static struct dma_async_tx_descriptor *dw_spi_dma_submit_rx(struct dw_spi *dws,
DMA_DEV_TO_MEM, DMA_DEV_TO_MEM,
DMA_PREP_INTERRUPT | DMA_CTRL_ACK); DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
if (!rxdesc) if (!rxdesc)
return NULL; return -ENOMEM;
rxdesc->callback = dw_spi_dma_rx_done; rxdesc->callback = dw_spi_dma_rx_done;
rxdesc->callback_param = dws; rxdesc->callback_param = dws;
...@@ -397,12 +395,12 @@ static struct dma_async_tx_descriptor *dw_spi_dma_submit_rx(struct dw_spi *dws, ...@@ -397,12 +395,12 @@ static struct dma_async_tx_descriptor *dw_spi_dma_submit_rx(struct dw_spi *dws,
ret = dma_submit_error(cookie); ret = dma_submit_error(cookie);
if (ret) { if (ret) {
dmaengine_terminate_sync(dws->rxchan); dmaengine_terminate_sync(dws->rxchan);
return NULL; return ret;
} }
set_bit(RX_BUSY, &dws->dma_chan_busy); set_bit(RX_BUSY, &dws->dma_chan_busy);
return rxdesc; return 0;
} }
static int dw_spi_dma_setup(struct dw_spi *dws, struct spi_transfer *xfer) static int dw_spi_dma_setup(struct dw_spi *dws, struct spi_transfer *xfer)
...@@ -445,19 +443,18 @@ static int dw_spi_dma_setup(struct dw_spi *dws, struct spi_transfer *xfer) ...@@ -445,19 +443,18 @@ static int dw_spi_dma_setup(struct dw_spi *dws, struct spi_transfer *xfer)
static int dw_spi_dma_transfer(struct dw_spi *dws, struct spi_transfer *xfer) static int dw_spi_dma_transfer(struct dw_spi *dws, struct spi_transfer *xfer)
{ {
struct dma_async_tx_descriptor *txdesc, *rxdesc;
int ret; int ret;
/* Submit the DMA Tx transfer */ /* Submit the DMA Tx transfer */
txdesc = dw_spi_dma_submit_tx(dws, xfer); ret = dw_spi_dma_submit_tx(dws, xfer);
if (!txdesc) if (ret)
return -EINVAL; return ret;
/* Submit the DMA Rx transfer if required */ /* Submit the DMA Rx transfer if required */
if (xfer->rx_buf) { if (xfer->rx_buf) {
rxdesc = dw_spi_dma_submit_rx(dws, xfer); ret = dw_spi_dma_submit_rx(dws, xfer);
if (!rxdesc) if (ret)
return -EINVAL; return ret;
/* rx must be started before tx due to spi instinct */ /* rx must be started before tx due to spi instinct */
dma_async_issue_pending(dws->rxchan); dma_async_issue_pending(dws->rxchan);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment