Unverified Commit 6f381481 authored by Biju Das's avatar Biju Das Committed by Mark Brown
Browse files

spi: spi-rspi: Remove setting {src,dst}_{addr,addr_width} based on DMA direction



The direction field in the DMA config is deprecated. The rspi driver
sets {src,dst}_{addr,addr_width} based on the DMA direction and
it results in dmaengine_slave_config() failure as RZ DMAC driver
validates {src,dst}_addr_width values independent of DMA direction.

This patch fixes the issue by passing both {src,dst}_{addr,addr_width}
values independent of DMA direction.

Signed-off-by: default avatarBiju Das <biju.das.jz@bp.renesas.com>
Suggested-by: default avatarVinod Koul <vkoul@kernel.org>
Reviewed-by: default avatarVinod Koul <vkoul@kernel.org>
Reviewed-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Tested-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/r/20220411173115.6619-1-biju.das.jz@bp.renesas.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent b3fe2e51
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -1108,14 +1108,11 @@ static struct dma_chan *rspi_request_dma_chan(struct device *dev,
	}

	memset(&cfg, 0, sizeof(cfg));
	cfg.direction = dir;
	if (dir == DMA_MEM_TO_DEV) {
		cfg.dst_addr = port_addr;
	cfg.dst_addr = port_addr + RSPI_SPDR;
	cfg.src_addr = port_addr + RSPI_SPDR;
	cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
	} else {
		cfg.src_addr = port_addr;
	cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
	}
	cfg.direction = dir;

	ret = dmaengine_slave_config(chan, &cfg);
	if (ret) {
@@ -1146,12 +1143,12 @@ static int rspi_request_dma(struct device *dev, struct spi_controller *ctlr,
	}

	ctlr->dma_tx = rspi_request_dma_chan(dev, DMA_MEM_TO_DEV, dma_tx_id,
					     res->start + RSPI_SPDR);
					     res->start);
	if (!ctlr->dma_tx)
		return -ENODEV;

	ctlr->dma_rx = rspi_request_dma_chan(dev, DMA_DEV_TO_MEM, dma_rx_id,
					     res->start + RSPI_SPDR);
					     res->start);
	if (!ctlr->dma_rx) {
		dma_release_channel(ctlr->dma_tx);
		ctlr->dma_tx = NULL;