Commit 8d858491 authored by Vignesh Raghavendra's avatar Vignesh Raghavendra Committed by Mark Brown

spi: omap2-mcspi: Remove redundant checks

Both omap2_mcspi_tx_dma() and omap2_mcspi_rx_dma() are only called from
omap2_mcspi_txrx_dma() and omap2_mcspi_txrx_dma() is always called after
making sure that mcspi_dma->dma_rx and mcspi_dma->dma_tx are not NULL
(see omap2_mcspi_transfer_one()).
Therefore remove redundant NULL checks for omap2_mcspi->dma_tx and
omap2_mcspi->dma_rx pointers in omap2_mcspi_tx_dma() and
omap2_mcspi_rx_dma() respectively.
Signed-off-by: default avatarVignesh Raghavendra <vigneshr@ti.com>
Link: https://lore.kernel.org/r/20191109041827.26934-1-vigneshr@ti.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent d575c9b7
...@@ -397,30 +397,26 @@ static void omap2_mcspi_tx_dma(struct spi_device *spi, ...@@ -397,30 +397,26 @@ static void omap2_mcspi_tx_dma(struct spi_device *spi,
{ {
struct omap2_mcspi *mcspi; struct omap2_mcspi *mcspi;
struct omap2_mcspi_dma *mcspi_dma; struct omap2_mcspi_dma *mcspi_dma;
struct dma_async_tx_descriptor *tx;
mcspi = spi_master_get_devdata(spi->master); mcspi = spi_master_get_devdata(spi->master);
mcspi_dma = &mcspi->dma_channels[spi->chip_select]; mcspi_dma = &mcspi->dma_channels[spi->chip_select];
if (mcspi_dma->dma_tx) { dmaengine_slave_config(mcspi_dma->dma_tx, &cfg);
struct dma_async_tx_descriptor *tx;
dmaengine_slave_config(mcspi_dma->dma_tx, &cfg); tx = dmaengine_prep_slave_sg(mcspi_dma->dma_tx, xfer->tx_sg.sgl,
xfer->tx_sg.nents,
tx = dmaengine_prep_slave_sg(mcspi_dma->dma_tx, xfer->tx_sg.sgl, DMA_MEM_TO_DEV,
xfer->tx_sg.nents, DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
DMA_MEM_TO_DEV, if (tx) {
DMA_PREP_INTERRUPT | DMA_CTRL_ACK); tx->callback = omap2_mcspi_tx_callback;
if (tx) { tx->callback_param = spi;
tx->callback = omap2_mcspi_tx_callback; dmaengine_submit(tx);
tx->callback_param = spi; } else {
dmaengine_submit(tx); /* FIXME: fall back to PIO? */
} else {
/* FIXME: fall back to PIO? */
}
} }
dma_async_issue_pending(mcspi_dma->dma_tx); dma_async_issue_pending(mcspi_dma->dma_tx);
omap2_mcspi_set_dma_req(spi, 0, 1); omap2_mcspi_set_dma_req(spi, 0, 1);
} }
static unsigned static unsigned
...@@ -439,6 +435,7 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer, ...@@ -439,6 +435,7 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer,
int word_len, element_count; int word_len, element_count;
struct omap2_mcspi_cs *cs = spi->controller_state; struct omap2_mcspi_cs *cs = spi->controller_state;
void __iomem *chstat_reg = cs->base + OMAP2_MCSPI_CHSTAT0; void __iomem *chstat_reg = cs->base + OMAP2_MCSPI_CHSTAT0;
struct dma_async_tx_descriptor *tx;
mcspi = spi_master_get_devdata(spi->master); mcspi = spi_master_get_devdata(spi->master);
mcspi_dma = &mcspi->dma_channels[spi->chip_select]; mcspi_dma = &mcspi->dma_channels[spi->chip_select];
...@@ -462,55 +459,47 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer, ...@@ -462,55 +459,47 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer,
else /* word_len <= 32 */ else /* word_len <= 32 */
element_count = count >> 2; element_count = count >> 2;
if (mcspi_dma->dma_rx) {
struct dma_async_tx_descriptor *tx;
dmaengine_slave_config(mcspi_dma->dma_rx, &cfg); dmaengine_slave_config(mcspi_dma->dma_rx, &cfg);
/*
* Reduce DMA transfer length by one more if McSPI is
* configured in turbo mode.
*/
if ((l & OMAP2_MCSPI_CHCONF_TURBO) && mcspi->fifo_depth == 0)
transfer_reduction += es;
if (transfer_reduction) {
/* Split sgl into two. The second sgl won't be used. */
sizes[0] = count - transfer_reduction;
sizes[1] = transfer_reduction;
nb_sizes = 2;
} else {
/* /*
* Reduce DMA transfer length by one more if McSPI is * Don't bother splitting the sgl. This essentially
* configured in turbo mode. * clones the original sgl.
*/ */
if ((l & OMAP2_MCSPI_CHCONF_TURBO) && mcspi->fifo_depth == 0) sizes[0] = count;
transfer_reduction += es; nb_sizes = 1;
}
if (transfer_reduction) {
/* Split sgl into two. The second sgl won't be used. */
sizes[0] = count - transfer_reduction;
sizes[1] = transfer_reduction;
nb_sizes = 2;
} else {
/*
* Don't bother splitting the sgl. This essentially
* clones the original sgl.
*/
sizes[0] = count;
nb_sizes = 1;
}
ret = sg_split(xfer->rx_sg.sgl, xfer->rx_sg.nents, ret = sg_split(xfer->rx_sg.sgl, xfer->rx_sg.nents, 0, nb_sizes,
0, nb_sizes, sizes, sg_out, out_mapped_nents, GFP_KERNEL);
sizes,
sg_out, out_mapped_nents,
GFP_KERNEL);
if (ret < 0) { if (ret < 0) {
dev_err(&spi->dev, "sg_split failed\n"); dev_err(&spi->dev, "sg_split failed\n");
return 0; return 0;
} }
tx = dmaengine_prep_slave_sg(mcspi_dma->dma_rx, tx = dmaengine_prep_slave_sg(mcspi_dma->dma_rx, sg_out[0],
sg_out[0], out_mapped_nents[0], DMA_DEV_TO_MEM,
out_mapped_nents[0], DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
DMA_DEV_TO_MEM, if (tx) {
DMA_PREP_INTERRUPT | DMA_CTRL_ACK); tx->callback = omap2_mcspi_rx_callback;
if (tx) { tx->callback_param = spi;
tx->callback = omap2_mcspi_rx_callback; dmaengine_submit(tx);
tx->callback_param = spi; } else {
dmaengine_submit(tx); /* FIXME: fall back to PIO? */
} else {
/* FIXME: fall back to PIO? */
}
} }
dma_async_issue_pending(mcspi_dma->dma_rx); dma_async_issue_pending(mcspi_dma->dma_rx);
......
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