Commit ecd442fd authored by Linus Walleij's avatar Linus Walleij Committed by Grant Likely

spi/pl022: use dmaengine helper macros

This simplifies the DMA code a bit by using the dmaengine helpers.
The cookie from descriptor submission can be ignored in this case
as has been established in review of the MMCI/PL180 driver.

Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarGrant Likely <grant.likely@secretlab.ca>
parent ea3065df
...@@ -917,7 +917,6 @@ static int configure_dma(struct pl022 *pl022) ...@@ -917,7 +917,6 @@ static int configure_dma(struct pl022 *pl022)
struct dma_chan *txchan = pl022->dma_tx_channel; struct dma_chan *txchan = pl022->dma_tx_channel;
struct dma_async_tx_descriptor *rxdesc; struct dma_async_tx_descriptor *rxdesc;
struct dma_async_tx_descriptor *txdesc; struct dma_async_tx_descriptor *txdesc;
dma_cookie_t cookie;
/* Check that the channels are available */ /* Check that the channels are available */
if (!rxchan || !txchan) if (!rxchan || !txchan)
...@@ -962,10 +961,8 @@ static int configure_dma(struct pl022 *pl022) ...@@ -962,10 +961,8 @@ static int configure_dma(struct pl022 *pl022)
tx_conf.dst_addr_width = rx_conf.src_addr_width; tx_conf.dst_addr_width = rx_conf.src_addr_width;
BUG_ON(rx_conf.src_addr_width != tx_conf.dst_addr_width); BUG_ON(rx_conf.src_addr_width != tx_conf.dst_addr_width);
rxchan->device->device_control(rxchan, DMA_SLAVE_CONFIG, dmaengine_slave_config(rxchan, &rx_conf);
(unsigned long) &rx_conf); dmaengine_slave_config(txchan, &tx_conf);
txchan->device->device_control(txchan, DMA_SLAVE_CONFIG,
(unsigned long) &tx_conf);
/* Create sglists for the transfers */ /* Create sglists for the transfers */
pages = (pl022->cur_transfer->len >> PAGE_SHIFT) + 1; pages = (pl022->cur_transfer->len >> PAGE_SHIFT) + 1;
...@@ -1018,23 +1015,19 @@ static int configure_dma(struct pl022 *pl022) ...@@ -1018,23 +1015,19 @@ static int configure_dma(struct pl022 *pl022)
rxdesc->callback_param = pl022; rxdesc->callback_param = pl022;
/* Submit and fire RX and TX with TX last so we're ready to read! */ /* Submit and fire RX and TX with TX last so we're ready to read! */
cookie = rxdesc->tx_submit(rxdesc); dmaengine_submit(rxdesc);
if (dma_submit_error(cookie)) dmaengine_submit(txdesc);
goto err_submit_rx; dma_async_issue_pending(rxchan);
cookie = txdesc->tx_submit(txdesc); dma_async_issue_pending(txchan);
if (dma_submit_error(cookie))
goto err_submit_tx;
rxchan->device->device_issue_pending(rxchan);
txchan->device->device_issue_pending(txchan);
return 0; return 0;
err_submit_tx: err_submit_tx:
err_submit_rx: err_submit_rx:
err_txdesc: err_txdesc:
txchan->device->device_control(txchan, DMA_TERMINATE_ALL, 0); dmaengine_terminate_all(txchan);
err_rxdesc: err_rxdesc:
rxchan->device->device_control(rxchan, DMA_TERMINATE_ALL, 0); dmaengine_terminate_all(rxchan);
dma_unmap_sg(txchan->device->dev, pl022->sgt_tx.sgl, dma_unmap_sg(txchan->device->dev, pl022->sgt_tx.sgl,
pl022->sgt_tx.nents, DMA_TO_DEVICE); pl022->sgt_tx.nents, DMA_TO_DEVICE);
err_tx_sgmap: err_tx_sgmap:
...@@ -1101,8 +1094,8 @@ static void terminate_dma(struct pl022 *pl022) ...@@ -1101,8 +1094,8 @@ static void terminate_dma(struct pl022 *pl022)
struct dma_chan *rxchan = pl022->dma_rx_channel; struct dma_chan *rxchan = pl022->dma_rx_channel;
struct dma_chan *txchan = pl022->dma_tx_channel; struct dma_chan *txchan = pl022->dma_tx_channel;
rxchan->device->device_control(rxchan, DMA_TERMINATE_ALL, 0); dmaengine_terminate_all(rxchan);
txchan->device->device_control(txchan, DMA_TERMINATE_ALL, 0); dmaengine_terminate_all(txchan);
unmap_free_dma_scatter(pl022); unmap_free_dma_scatter(pl022);
} }
......
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