Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mmc: sh_mmcif: Fix DMA slave address configuration

Commit e5a233cb647d749de2f188477c9a54b94d90477f ("mmc: sh_mmcif:
Factorize DMA channel request and configuration code") incorrectly
set the destination address for both slave channels instead of setting
the source address for the receive channel. Fix that.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>

authored by

Laurent Pinchart and committed by
Ulf Hansson
d25006e7 b4c27763

+7 -3
+7 -3
drivers/mmc/host/sh_mmcif.c
··· 386 386 struct sh_mmcif_plat_data *pdata, 387 387 enum dma_transfer_direction direction) 388 388 { 389 - struct dma_slave_config cfg; 389 + struct dma_slave_config cfg = { 0, }; 390 390 struct dma_chan *chan; 391 391 unsigned int slave_id; 392 392 struct resource *res; ··· 417 417 /* In the OF case the driver will get the slave ID from the DT */ 418 418 cfg.slave_id = slave_id; 419 419 cfg.direction = direction; 420 - cfg.dst_addr = res->start + MMCIF_CE_DATA; 421 - cfg.src_addr = 0; 420 + 421 + if (direction == DMA_DEV_TO_MEM) 422 + cfg.src_addr = res->start + MMCIF_CE_DATA; 423 + else 424 + cfg.dst_addr = res->start + MMCIF_CE_DATA; 425 + 422 426 ret = dmaengine_slave_config(chan, &cfg); 423 427 if (ret < 0) { 424 428 dma_release_channel(chan);