mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-09 22:50:41 +00:00
spi, serial: move to dma_transfer_direction
fixup usage of dma direction by introducing dma_transfer_direction, this patch moves spi, serial drivers to use new enum Signed-off-by: Vinod Koul <vinod.koul@linux.intel.com> Cc: Grant Likely <grant.likely@secretlab.ca> Cc: Alan Cox <alan@linux.intel.com> Acked-by: Mika Westerberg <mika.westerberg@iki.fi>
This commit is contained in:
parent
05f5799cbe
commit
a485df4b44
@ -131,7 +131,7 @@ static int mid_spi_dma_transfer(struct dw_spi *dws, int cs_change)
|
|||||||
rxchan = dws->rxchan;
|
rxchan = dws->rxchan;
|
||||||
|
|
||||||
/* 2. Prepare the TX dma transfer */
|
/* 2. Prepare the TX dma transfer */
|
||||||
txconf.direction = DMA_TO_DEVICE;
|
txconf.direction = DMA_MEM_TO_DEV;
|
||||||
txconf.dst_addr = dws->dma_addr;
|
txconf.dst_addr = dws->dma_addr;
|
||||||
txconf.dst_maxburst = LNW_DMA_MSIZE_16;
|
txconf.dst_maxburst = LNW_DMA_MSIZE_16;
|
||||||
txconf.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
|
txconf.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
|
||||||
@ -147,13 +147,13 @@ static int mid_spi_dma_transfer(struct dw_spi *dws, int cs_change)
|
|||||||
txdesc = txchan->device->device_prep_slave_sg(txchan,
|
txdesc = txchan->device->device_prep_slave_sg(txchan,
|
||||||
&dws->tx_sgl,
|
&dws->tx_sgl,
|
||||||
1,
|
1,
|
||||||
DMA_TO_DEVICE,
|
DMA_MEM_TO_DEV,
|
||||||
DMA_PREP_INTERRUPT | DMA_COMPL_SKIP_DEST_UNMAP);
|
DMA_PREP_INTERRUPT | DMA_COMPL_SKIP_DEST_UNMAP);
|
||||||
txdesc->callback = dw_spi_dma_done;
|
txdesc->callback = dw_spi_dma_done;
|
||||||
txdesc->callback_param = dws;
|
txdesc->callback_param = dws;
|
||||||
|
|
||||||
/* 3. Prepare the RX dma transfer */
|
/* 3. Prepare the RX dma transfer */
|
||||||
rxconf.direction = DMA_FROM_DEVICE;
|
rxconf.direction = DMA_DEV_TO_MEM;
|
||||||
rxconf.src_addr = dws->dma_addr;
|
rxconf.src_addr = dws->dma_addr;
|
||||||
rxconf.src_maxburst = LNW_DMA_MSIZE_16;
|
rxconf.src_maxburst = LNW_DMA_MSIZE_16;
|
||||||
rxconf.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
|
rxconf.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
|
||||||
@ -169,7 +169,7 @@ static int mid_spi_dma_transfer(struct dw_spi *dws, int cs_change)
|
|||||||
rxdesc = rxchan->device->device_prep_slave_sg(rxchan,
|
rxdesc = rxchan->device->device_prep_slave_sg(rxchan,
|
||||||
&dws->rx_sgl,
|
&dws->rx_sgl,
|
||||||
1,
|
1,
|
||||||
DMA_FROM_DEVICE,
|
DMA_DEV_TO_MEM,
|
||||||
DMA_PREP_INTERRUPT | DMA_COMPL_SKIP_DEST_UNMAP);
|
DMA_PREP_INTERRUPT | DMA_COMPL_SKIP_DEST_UNMAP);
|
||||||
rxdesc->callback = dw_spi_dma_done;
|
rxdesc->callback = dw_spi_dma_done;
|
||||||
rxdesc->callback_param = dws;
|
rxdesc->callback_param = dws;
|
||||||
|
@ -550,6 +550,7 @@ ep93xx_spi_dma_prepare(struct ep93xx_spi *espi, enum dma_data_direction dir)
|
|||||||
struct dma_async_tx_descriptor *txd;
|
struct dma_async_tx_descriptor *txd;
|
||||||
enum dma_slave_buswidth buswidth;
|
enum dma_slave_buswidth buswidth;
|
||||||
struct dma_slave_config conf;
|
struct dma_slave_config conf;
|
||||||
|
enum dma_transfer_direction slave_dirn;
|
||||||
struct scatterlist *sg;
|
struct scatterlist *sg;
|
||||||
struct sg_table *sgt;
|
struct sg_table *sgt;
|
||||||
struct dma_chan *chan;
|
struct dma_chan *chan;
|
||||||
@ -572,6 +573,7 @@ ep93xx_spi_dma_prepare(struct ep93xx_spi *espi, enum dma_data_direction dir)
|
|||||||
|
|
||||||
conf.src_addr = espi->sspdr_phys;
|
conf.src_addr = espi->sspdr_phys;
|
||||||
conf.src_addr_width = buswidth;
|
conf.src_addr_width = buswidth;
|
||||||
|
slave_dirn = DMA_DEV_TO_MEM;
|
||||||
} else {
|
} else {
|
||||||
chan = espi->dma_tx;
|
chan = espi->dma_tx;
|
||||||
buf = t->tx_buf;
|
buf = t->tx_buf;
|
||||||
@ -579,6 +581,7 @@ ep93xx_spi_dma_prepare(struct ep93xx_spi *espi, enum dma_data_direction dir)
|
|||||||
|
|
||||||
conf.dst_addr = espi->sspdr_phys;
|
conf.dst_addr = espi->sspdr_phys;
|
||||||
conf.dst_addr_width = buswidth;
|
conf.dst_addr_width = buswidth;
|
||||||
|
slave_dirn = DMA_MEM_TO_DEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = dmaengine_slave_config(chan, &conf);
|
ret = dmaengine_slave_config(chan, &conf);
|
||||||
@ -630,7 +633,7 @@ ep93xx_spi_dma_prepare(struct ep93xx_spi *espi, enum dma_data_direction dir)
|
|||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
txd = chan->device->device_prep_slave_sg(chan, sgt->sgl, nents,
|
txd = chan->device->device_prep_slave_sg(chan, sgt->sgl, nents,
|
||||||
dir, DMA_CTRL_ACK);
|
slave_dirn, DMA_CTRL_ACK);
|
||||||
if (!txd) {
|
if (!txd) {
|
||||||
dma_unmap_sg(chan->device->dev, sgt->sgl, sgt->nents, dir);
|
dma_unmap_sg(chan->device->dev, sgt->sgl, sgt->nents, dir);
|
||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
@ -978,7 +981,7 @@ static int ep93xx_spi_setup_dma(struct ep93xx_spi *espi)
|
|||||||
dma_cap_set(DMA_SLAVE, mask);
|
dma_cap_set(DMA_SLAVE, mask);
|
||||||
|
|
||||||
espi->dma_rx_data.port = EP93XX_DMA_SSP;
|
espi->dma_rx_data.port = EP93XX_DMA_SSP;
|
||||||
espi->dma_rx_data.direction = DMA_FROM_DEVICE;
|
espi->dma_rx_data.direction = DMA_DEV_TO_MEM;
|
||||||
espi->dma_rx_data.name = "ep93xx-spi-rx";
|
espi->dma_rx_data.name = "ep93xx-spi-rx";
|
||||||
|
|
||||||
espi->dma_rx = dma_request_channel(mask, ep93xx_spi_dma_filter,
|
espi->dma_rx = dma_request_channel(mask, ep93xx_spi_dma_filter,
|
||||||
@ -989,7 +992,7 @@ static int ep93xx_spi_setup_dma(struct ep93xx_spi *espi)
|
|||||||
}
|
}
|
||||||
|
|
||||||
espi->dma_tx_data.port = EP93XX_DMA_SSP;
|
espi->dma_tx_data.port = EP93XX_DMA_SSP;
|
||||||
espi->dma_tx_data.direction = DMA_TO_DEVICE;
|
espi->dma_tx_data.direction = DMA_MEM_TO_DEV;
|
||||||
espi->dma_tx_data.name = "ep93xx-spi-tx";
|
espi->dma_tx_data.name = "ep93xx-spi-tx";
|
||||||
|
|
||||||
espi->dma_tx = dma_request_channel(mask, ep93xx_spi_dma_filter,
|
espi->dma_tx = dma_request_channel(mask, ep93xx_spi_dma_filter,
|
||||||
|
@ -910,11 +910,11 @@ static int configure_dma(struct pl022 *pl022)
|
|||||||
{
|
{
|
||||||
struct dma_slave_config rx_conf = {
|
struct dma_slave_config rx_conf = {
|
||||||
.src_addr = SSP_DR(pl022->phybase),
|
.src_addr = SSP_DR(pl022->phybase),
|
||||||
.direction = DMA_FROM_DEVICE,
|
.direction = DMA_DEV_TO_MEM,
|
||||||
};
|
};
|
||||||
struct dma_slave_config tx_conf = {
|
struct dma_slave_config tx_conf = {
|
||||||
.dst_addr = SSP_DR(pl022->phybase),
|
.dst_addr = SSP_DR(pl022->phybase),
|
||||||
.direction = DMA_TO_DEVICE,
|
.direction = DMA_MEM_TO_DEV,
|
||||||
};
|
};
|
||||||
unsigned int pages;
|
unsigned int pages;
|
||||||
int ret;
|
int ret;
|
||||||
@ -1051,7 +1051,7 @@ static int configure_dma(struct pl022 *pl022)
|
|||||||
rxdesc = rxchan->device->device_prep_slave_sg(rxchan,
|
rxdesc = rxchan->device->device_prep_slave_sg(rxchan,
|
||||||
pl022->sgt_rx.sgl,
|
pl022->sgt_rx.sgl,
|
||||||
rx_sglen,
|
rx_sglen,
|
||||||
DMA_FROM_DEVICE,
|
DMA_DEV_TO_MEM,
|
||||||
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
||||||
if (!rxdesc)
|
if (!rxdesc)
|
||||||
goto err_rxdesc;
|
goto err_rxdesc;
|
||||||
@ -1059,7 +1059,7 @@ static int configure_dma(struct pl022 *pl022)
|
|||||||
txdesc = txchan->device->device_prep_slave_sg(txchan,
|
txdesc = txchan->device->device_prep_slave_sg(txchan,
|
||||||
pl022->sgt_tx.sgl,
|
pl022->sgt_tx.sgl,
|
||||||
tx_sglen,
|
tx_sglen,
|
||||||
DMA_TO_DEVICE,
|
DMA_MEM_TO_DEV,
|
||||||
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
||||||
if (!txdesc)
|
if (!txdesc)
|
||||||
goto err_txdesc;
|
goto err_txdesc;
|
||||||
|
@ -1051,7 +1051,7 @@ static void pch_spi_handle_dma(struct pch_spi_data *data, int *bpw)
|
|||||||
}
|
}
|
||||||
sg = dma->sg_rx_p;
|
sg = dma->sg_rx_p;
|
||||||
desc_rx = dma->chan_rx->device->device_prep_slave_sg(dma->chan_rx, sg,
|
desc_rx = dma->chan_rx->device->device_prep_slave_sg(dma->chan_rx, sg,
|
||||||
num, DMA_FROM_DEVICE,
|
num, DMA_DEV_TO_MEM,
|
||||||
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
||||||
if (!desc_rx) {
|
if (!desc_rx) {
|
||||||
dev_err(&data->master->dev, "%s:device_prep_slave_sg Failed\n",
|
dev_err(&data->master->dev, "%s:device_prep_slave_sg Failed\n",
|
||||||
@ -1086,7 +1086,7 @@ static void pch_spi_handle_dma(struct pch_spi_data *data, int *bpw)
|
|||||||
}
|
}
|
||||||
sg = dma->sg_tx_p;
|
sg = dma->sg_tx_p;
|
||||||
desc_tx = dma->chan_tx->device->device_prep_slave_sg(dma->chan_tx,
|
desc_tx = dma->chan_tx->device->device_prep_slave_sg(dma->chan_tx,
|
||||||
sg, num, DMA_TO_DEVICE,
|
sg, num, DMA_MEM_TO_DEV,
|
||||||
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
||||||
if (!desc_tx) {
|
if (!desc_tx) {
|
||||||
dev_err(&data->master->dev, "%s:device_prep_slave_sg Failed\n",
|
dev_err(&data->master->dev, "%s:device_prep_slave_sg Failed\n",
|
||||||
|
@ -268,7 +268,7 @@ static void pl011_dma_probe_initcall(struct uart_amba_port *uap)
|
|||||||
struct dma_slave_config tx_conf = {
|
struct dma_slave_config tx_conf = {
|
||||||
.dst_addr = uap->port.mapbase + UART01x_DR,
|
.dst_addr = uap->port.mapbase + UART01x_DR,
|
||||||
.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE,
|
.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE,
|
||||||
.direction = DMA_TO_DEVICE,
|
.direction = DMA_MEM_TO_DEV,
|
||||||
.dst_maxburst = uap->fifosize >> 1,
|
.dst_maxburst = uap->fifosize >> 1,
|
||||||
};
|
};
|
||||||
struct dma_chan *chan;
|
struct dma_chan *chan;
|
||||||
@ -301,7 +301,7 @@ static void pl011_dma_probe_initcall(struct uart_amba_port *uap)
|
|||||||
struct dma_slave_config rx_conf = {
|
struct dma_slave_config rx_conf = {
|
||||||
.src_addr = uap->port.mapbase + UART01x_DR,
|
.src_addr = uap->port.mapbase + UART01x_DR,
|
||||||
.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE,
|
.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE,
|
||||||
.direction = DMA_FROM_DEVICE,
|
.direction = DMA_DEV_TO_MEM,
|
||||||
.src_maxburst = uap->fifosize >> 1,
|
.src_maxburst = uap->fifosize >> 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -480,7 +480,7 @@ static int pl011_dma_tx_refill(struct uart_amba_port *uap)
|
|||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
desc = dma_dev->device_prep_slave_sg(chan, &dmatx->sg, 1, DMA_TO_DEVICE,
|
desc = dma_dev->device_prep_slave_sg(chan, &dmatx->sg, 1, DMA_MEM_TO_DEV,
|
||||||
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
||||||
if (!desc) {
|
if (!desc) {
|
||||||
dma_unmap_sg(dma_dev->dev, &dmatx->sg, 1, DMA_TO_DEVICE);
|
dma_unmap_sg(dma_dev->dev, &dmatx->sg, 1, DMA_TO_DEVICE);
|
||||||
@ -676,7 +676,7 @@ static int pl011_dma_rx_trigger_dma(struct uart_amba_port *uap)
|
|||||||
&uap->dmarx.sgbuf_b : &uap->dmarx.sgbuf_a;
|
&uap->dmarx.sgbuf_b : &uap->dmarx.sgbuf_a;
|
||||||
dma_dev = rxchan->device;
|
dma_dev = rxchan->device;
|
||||||
desc = rxchan->device->device_prep_slave_sg(rxchan, &sgbuf->sg, 1,
|
desc = rxchan->device->device_prep_slave_sg(rxchan, &sgbuf->sg, 1,
|
||||||
DMA_FROM_DEVICE,
|
DMA_DEV_TO_MEM,
|
||||||
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
||||||
/*
|
/*
|
||||||
* If the DMA engine is busy and cannot prepare a
|
* If the DMA engine is busy and cannot prepare a
|
||||||
|
@ -747,7 +747,7 @@ static int dma_handle_rx(struct eg20t_port *priv)
|
|||||||
sg_dma_address(sg) = priv->rx_buf_dma;
|
sg_dma_address(sg) = priv->rx_buf_dma;
|
||||||
|
|
||||||
desc = priv->chan_rx->device->device_prep_slave_sg(priv->chan_rx,
|
desc = priv->chan_rx->device->device_prep_slave_sg(priv->chan_rx,
|
||||||
sg, 1, DMA_FROM_DEVICE,
|
sg, 1, DMA_DEV_TO_MEM,
|
||||||
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
||||||
|
|
||||||
if (!desc)
|
if (!desc)
|
||||||
@ -906,7 +906,7 @@ static unsigned int dma_handle_tx(struct eg20t_port *priv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
desc = priv->chan_tx->device->device_prep_slave_sg(priv->chan_tx,
|
desc = priv->chan_tx->device->device_prep_slave_sg(priv->chan_tx,
|
||||||
priv->sg_tx_p, nent, DMA_TO_DEVICE,
|
priv->sg_tx_p, nent, DMA_MEM_TO_DEV,
|
||||||
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
||||||
if (!desc) {
|
if (!desc) {
|
||||||
dev_err(priv->port.dev, "%s:device_prep_slave_sg Failed\n",
|
dev_err(priv->port.dev, "%s:device_prep_slave_sg Failed\n",
|
||||||
|
@ -1207,7 +1207,7 @@ static void sci_submit_rx(struct sci_port *s)
|
|||||||
struct dma_async_tx_descriptor *desc;
|
struct dma_async_tx_descriptor *desc;
|
||||||
|
|
||||||
desc = chan->device->device_prep_slave_sg(chan,
|
desc = chan->device->device_prep_slave_sg(chan,
|
||||||
sg, 1, DMA_FROM_DEVICE, DMA_PREP_INTERRUPT);
|
sg, 1, DMA_DEV_TO_MEM, DMA_PREP_INTERRUPT);
|
||||||
|
|
||||||
if (desc) {
|
if (desc) {
|
||||||
s->desc_rx[i] = desc;
|
s->desc_rx[i] = desc;
|
||||||
@ -1322,7 +1322,7 @@ static void work_fn_tx(struct work_struct *work)
|
|||||||
BUG_ON(!sg_dma_len(sg));
|
BUG_ON(!sg_dma_len(sg));
|
||||||
|
|
||||||
desc = chan->device->device_prep_slave_sg(chan,
|
desc = chan->device->device_prep_slave_sg(chan,
|
||||||
sg, s->sg_len_tx, DMA_TO_DEVICE,
|
sg, s->sg_len_tx, DMA_MEM_TO_DEV,
|
||||||
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
|
||||||
if (!desc) {
|
if (!desc) {
|
||||||
/* switch to PIO */
|
/* switch to PIO */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user