aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Bondarenko <anton.bondarenko.sama@gmail.com>2015-12-05 11:57:01 -0500
committerMark Brown <broonie@kernel.org>2015-12-07 14:53:35 -0500
commit0dfbaa8932a6c4ffd83a6459f247bf06b4652543 (patch)
treebf5bd82073477b677c579894c4fe6f5fd8fa759c
parentfab44ef1adcc585440c07c90539e2b9e2cded4bf (diff)
spi: imx: replace multiple watermarks with single for RX, TX and RXT
There is no need to have different watermarks levels since they are the same. Merge them into one WML parameter. Signed-off-by: Anton Bondarenko <anton.bondarenko.sama@gmail.com> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--drivers/spi/spi-imx.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c
index e6b1c74ade6b..beba40b08ed1 100644
--- a/drivers/spi/spi-imx.c
+++ b/drivers/spi/spi-imx.c
@@ -104,9 +104,7 @@ struct spi_imx_data {
104 unsigned int dma_is_inited; 104 unsigned int dma_is_inited;
105 unsigned int dma_finished; 105 unsigned int dma_finished;
106 bool usedma; 106 bool usedma;
107 u32 rx_wml; 107 u32 wml;
108 u32 tx_wml;
109 u32 rxt_wml;
110 struct completion dma_rx_completion; 108 struct completion dma_rx_completion;
111 struct completion dma_tx_completion; 109 struct completion dma_tx_completion;
112 110
@@ -201,9 +199,8 @@ static bool spi_imx_can_dma(struct spi_master *master, struct spi_device *spi,
201{ 199{
202 struct spi_imx_data *spi_imx = spi_master_get_devdata(master); 200 struct spi_imx_data *spi_imx = spi_master_get_devdata(master);
203 201
204 if (spi_imx->dma_is_inited 202 if (spi_imx->dma_is_inited &&
205 && transfer->len > spi_imx->rx_wml * sizeof(u32) 203 transfer->len > spi_imx->wml * sizeof(u32))
206 && transfer->len > spi_imx->tx_wml * sizeof(u32))
207 return true; 204 return true;
208 return false; 205 return false;
209} 206}
@@ -388,10 +385,9 @@ static int __maybe_unused mx51_ecspi_config(struct spi_imx_data *spi_imx,
388 if (spi_imx->dma_is_inited) { 385 if (spi_imx->dma_is_inited) {
389 dma = readl(spi_imx->base + MX51_ECSPI_DMA); 386 dma = readl(spi_imx->base + MX51_ECSPI_DMA);
390 387
391 spi_imx->rxt_wml = spi_imx_get_fifosize(spi_imx) / 2; 388 rx_wml_cfg = spi_imx->wml << MX51_ECSPI_DMA_RX_WML_OFFSET;
392 rx_wml_cfg = spi_imx->rx_wml << MX51_ECSPI_DMA_RX_WML_OFFSET; 389 tx_wml_cfg = spi_imx->wml << MX51_ECSPI_DMA_TX_WML_OFFSET;
393 tx_wml_cfg = spi_imx->tx_wml << MX51_ECSPI_DMA_TX_WML_OFFSET; 390 rxt_wml_cfg = spi_imx->wml << MX51_ECSPI_DMA_RXT_WML_OFFSET;
394 rxt_wml_cfg = spi_imx->rxt_wml << MX51_ECSPI_DMA_RXT_WML_OFFSET;
395 dma = (dma & ~MX51_ECSPI_DMA_TX_WML_MASK 391 dma = (dma & ~MX51_ECSPI_DMA_TX_WML_MASK
396 & ~MX51_ECSPI_DMA_RX_WML_MASK 392 & ~MX51_ECSPI_DMA_RX_WML_MASK
397 & ~MX51_ECSPI_DMA_RXT_WML_MASK) 393 & ~MX51_ECSPI_DMA_RXT_WML_MASK)
@@ -842,6 +838,8 @@ static int spi_imx_sdma_init(struct device *dev, struct spi_imx_data *spi_imx,
842 if (of_machine_is_compatible("fsl,imx6dl")) 838 if (of_machine_is_compatible("fsl,imx6dl"))
843 return 0; 839 return 0;
844 840
841 spi_imx->wml = spi_imx_get_fifosize(spi_imx) / 2;
842
845 /* Prepare for TX DMA: */ 843 /* Prepare for TX DMA: */
846 master->dma_tx = dma_request_slave_channel(dev, "tx"); 844 master->dma_tx = dma_request_slave_channel(dev, "tx");
847 if (!master->dma_tx) { 845 if (!master->dma_tx) {
@@ -853,7 +851,7 @@ static int spi_imx_sdma_init(struct device *dev, struct spi_imx_data *spi_imx,
853 slave_config.direction = DMA_MEM_TO_DEV; 851 slave_config.direction = DMA_MEM_TO_DEV;
854 slave_config.dst_addr = res->start + MXC_CSPITXDATA; 852 slave_config.dst_addr = res->start + MXC_CSPITXDATA;
855 slave_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; 853 slave_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
856 slave_config.dst_maxburst = spi_imx_get_fifosize(spi_imx) / 2; 854 slave_config.dst_maxburst = spi_imx->wml;
857 ret = dmaengine_slave_config(master->dma_tx, &slave_config); 855 ret = dmaengine_slave_config(master->dma_tx, &slave_config);
858 if (ret) { 856 if (ret) {
859 dev_err(dev, "error in TX dma configuration.\n"); 857 dev_err(dev, "error in TX dma configuration.\n");
@@ -871,7 +869,7 @@ static int spi_imx_sdma_init(struct device *dev, struct spi_imx_data *spi_imx,
871 slave_config.direction = DMA_DEV_TO_MEM; 869 slave_config.direction = DMA_DEV_TO_MEM;
872 slave_config.src_addr = res->start + MXC_CSPIRXDATA; 870 slave_config.src_addr = res->start + MXC_CSPIRXDATA;
873 slave_config.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE; 871 slave_config.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
874 slave_config.src_maxburst = spi_imx_get_fifosize(spi_imx) / 2; 872 slave_config.src_maxburst = spi_imx->wml;
875 ret = dmaengine_slave_config(master->dma_rx, &slave_config); 873 ret = dmaengine_slave_config(master->dma_rx, &slave_config);
876 if (ret) { 874 if (ret) {
877 dev_err(dev, "error in RX dma configuration.\n"); 875 dev_err(dev, "error in RX dma configuration.\n");
@@ -884,8 +882,6 @@ static int spi_imx_sdma_init(struct device *dev, struct spi_imx_data *spi_imx,
884 master->max_dma_len = MAX_SDMA_BD_BYTES; 882 master->max_dma_len = MAX_SDMA_BD_BYTES;
885 spi_imx->bitbang.master->flags = SPI_MASTER_MUST_RX | 883 spi_imx->bitbang.master->flags = SPI_MASTER_MUST_RX |
886 SPI_MASTER_MUST_TX; 884 SPI_MASTER_MUST_TX;
887 spi_imx->tx_wml = spi_imx_get_fifosize(spi_imx) / 2;
888 spi_imx->rx_wml = spi_imx_get_fifosize(spi_imx) / 2;
889 spi_imx->dma_is_inited = 1; 885 spi_imx->dma_is_inited = 1;
890 886
891 return 0; 887 return 0;
@@ -952,7 +948,7 @@ static int spi_imx_dma_transfer(struct spi_imx_data *spi_imx,
952 dma = readl(spi_imx->base + MX51_ECSPI_DMA); 948 dma = readl(spi_imx->base + MX51_ECSPI_DMA);
953 dma = dma & (~MX51_ECSPI_DMA_RXT_WML_MASK); 949 dma = dma & (~MX51_ECSPI_DMA_RXT_WML_MASK);
954 /* Change RX_DMA_LENGTH trigger dma fetch tail data */ 950 /* Change RX_DMA_LENGTH trigger dma fetch tail data */
955 left = transfer->len % spi_imx->rxt_wml; 951 left = transfer->len % spi_imx->wml;
956 if (left) 952 if (left)
957 writel(dma | (left << MX51_ECSPI_DMA_RXT_WML_OFFSET), 953 writel(dma | (left << MX51_ECSPI_DMA_RXT_WML_OFFSET),
958 spi_imx->base + MX51_ECSPI_DMA); 954 spi_imx->base + MX51_ECSPI_DMA);
@@ -987,8 +983,9 @@ static int spi_imx_dma_transfer(struct spi_imx_data *spi_imx,
987 spi_imx->devtype_data->reset(spi_imx); 983 spi_imx->devtype_data->reset(spi_imx);
988 dmaengine_terminate_all(master->dma_rx); 984 dmaengine_terminate_all(master->dma_rx);
989 } 985 }
986 dma &= ~MX51_ECSPI_DMA_RXT_WML_MASK;
990 writel(dma | 987 writel(dma |
991 spi_imx->rxt_wml << MX51_ECSPI_DMA_RXT_WML_OFFSET, 988 spi_imx->wml << MX51_ECSPI_DMA_RXT_WML_OFFSET,
992 spi_imx->base + MX51_ECSPI_DMA); 989 spi_imx->base + MX51_ECSPI_DMA);
993 } 990 }
994 991