Commit d744f826 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Mark Brown

spi: dw-mid: convert to use dw_dmac instead of intel_mid_dma

intel_mid_dma seems to be unmaintained for a long time. Moreover, the IP block
of DMA itself is the same in both dw_dmac and intel_mid_dma. This patch moves
spi-dw-midpci to use dw_dmac driver.
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent f89a6d8f
...@@ -632,7 +632,7 @@ config SPI_DW_PCI ...@@ -632,7 +632,7 @@ config SPI_DW_PCI
config SPI_DW_MID_DMA config SPI_DW_MID_DMA
bool "DMA support for DW SPI controller on Intel MID platform" bool "DMA support for DW SPI controller on Intel MID platform"
depends on SPI_DW_PCI && INTEL_MID_DMAC depends on SPI_DW_PCI && DW_DMAC_PCI
config SPI_DW_MMIO config SPI_DW_MMIO
tristate "Memory-mapped io interface driver for DW SPI core" tristate "Memory-mapped io interface driver for DW SPI core"
......
...@@ -23,29 +23,31 @@ ...@@ -23,29 +23,31 @@
#include "spi-dw.h" #include "spi-dw.h"
#ifdef CONFIG_SPI_DW_MID_DMA #ifdef CONFIG_SPI_DW_MID_DMA
#include <linux/intel_mid_dma.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/platform_data/dma-dw.h>
#define RX_BUSY 0 #define RX_BUSY 0
#define TX_BUSY 1 #define TX_BUSY 1
struct mid_dma { static struct dw_dma_slave mid_dma_tx = { .dst_id = 1 };
struct intel_mid_dma_slave dmas_tx; static struct dw_dma_slave mid_dma_rx = { .src_id = 0 };
struct intel_mid_dma_slave dmas_rx;
};
static bool mid_spi_dma_chan_filter(struct dma_chan *chan, void *param) static bool mid_spi_dma_chan_filter(struct dma_chan *chan, void *param)
{ {
struct dw_spi *dws = param; struct dw_dma_slave *s = param;
if (s->dma_dev != chan->device->dev)
return false;
return dws->dma_dev == chan->device->dev; chan->private = s;
return true;
} }
static int mid_spi_dma_init(struct dw_spi *dws) static int mid_spi_dma_init(struct dw_spi *dws)
{ {
struct mid_dma *dw_dma = dws->dma_priv;
struct pci_dev *dma_dev; struct pci_dev *dma_dev;
struct intel_mid_dma_slave *rxs, *txs; struct dw_dma_slave *tx = dws->dma_tx;
struct dw_dma_slave *rx = dws->dma_rx;
dma_cap_mask_t mask; dma_cap_mask_t mask;
/* /*
...@@ -56,29 +58,21 @@ static int mid_spi_dma_init(struct dw_spi *dws) ...@@ -56,29 +58,21 @@ static int mid_spi_dma_init(struct dw_spi *dws)
if (!dma_dev) if (!dma_dev)
return -ENODEV; return -ENODEV;
dws->dma_dev = &dma_dev->dev;
dma_cap_zero(mask); dma_cap_zero(mask);
dma_cap_set(DMA_SLAVE, mask); dma_cap_set(DMA_SLAVE, mask);
/* 1. Init rx channel */ /* 1. Init rx channel */
dws->rxchan = dma_request_channel(mask, mid_spi_dma_chan_filter, dws); rx->dma_dev = &dma_dev->dev;
dws->rxchan = dma_request_channel(mask, mid_spi_dma_chan_filter, rx);
if (!dws->rxchan) if (!dws->rxchan)
goto err_exit; goto err_exit;
rxs = &dw_dma->dmas_rx;
rxs->hs_mode = LNW_DMA_HW_HS;
rxs->cfg_mode = LNW_DMA_PER_TO_MEM;
dws->rxchan->private = rxs;
dws->master->dma_rx = dws->rxchan; dws->master->dma_rx = dws->rxchan;
/* 2. Init tx channel */ /* 2. Init tx channel */
dws->txchan = dma_request_channel(mask, mid_spi_dma_chan_filter, dws); tx->dma_dev = &dma_dev->dev;
dws->txchan = dma_request_channel(mask, mid_spi_dma_chan_filter, tx);
if (!dws->txchan) if (!dws->txchan)
goto free_rxchan; goto free_rxchan;
txs = &dw_dma->dmas_tx;
txs->hs_mode = LNW_DMA_HW_HS;
txs->cfg_mode = LNW_DMA_MEM_TO_PER;
dws->txchan->private = txs;
dws->master->dma_tx = dws->txchan; dws->master->dma_tx = dws->txchan;
dws->dma_inited = 1; dws->dma_inited = 1;
...@@ -163,7 +157,7 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_tx(struct dw_spi *dws, ...@@ -163,7 +157,7 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_tx(struct dw_spi *dws,
txconf.direction = DMA_MEM_TO_DEV; 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 = 16;
txconf.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; txconf.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
txconf.dst_addr_width = convert_dma_width(dws->dma_width); txconf.dst_addr_width = convert_dma_width(dws->dma_width);
txconf.device_fc = false; txconf.device_fc = false;
...@@ -209,7 +203,7 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_rx(struct dw_spi *dws, ...@@ -209,7 +203,7 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_rx(struct dw_spi *dws,
rxconf.direction = DMA_DEV_TO_MEM; 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 = 16;
rxconf.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; rxconf.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
rxconf.src_addr_width = convert_dma_width(dws->dma_width); rxconf.src_addr_width = convert_dma_width(dws->dma_width);
rxconf.device_fc = false; rxconf.device_fc = false;
...@@ -328,9 +322,8 @@ int dw_spi_mid_init(struct dw_spi *dws) ...@@ -328,9 +322,8 @@ int dw_spi_mid_init(struct dw_spi *dws)
iounmap(clk_reg); iounmap(clk_reg);
#ifdef CONFIG_SPI_DW_MID_DMA #ifdef CONFIG_SPI_DW_MID_DMA
dws->dma_priv = kzalloc(sizeof(struct mid_dma), GFP_KERNEL); dws->dma_tx = &mid_dma_tx;
if (!dws->dma_priv) dws->dma_rx = &mid_dma_rx;
return -ENOMEM;
dws->dma_ops = &mid_dma_ops; dws->dma_ops = &mid_dma_ops;
#endif #endif
return 0; return 0;
......
...@@ -128,10 +128,10 @@ struct dw_spi { ...@@ -128,10 +128,10 @@ struct dw_spi {
struct dma_chan *txchan; struct dma_chan *txchan;
struct dma_chan *rxchan; struct dma_chan *rxchan;
unsigned long dma_chan_busy; unsigned long dma_chan_busy;
struct device *dma_dev;
dma_addr_t dma_addr; /* phy address of the Data register */ dma_addr_t dma_addr; /* phy address of the Data register */
struct dw_spi_dma_ops *dma_ops; struct dw_spi_dma_ops *dma_ops;
void *dma_priv; /* platform relate info */ void *dma_tx;
void *dma_rx;
/* Bus interface info */ /* Bus interface info */
void *priv; void *priv;
......
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