shdma: fixup sh_dmae_get_partial() calculation error

sh_desc->hw.tcr is controlling real data size,
and, register TCR is controlling data transfer count
which was xmit_shifted value of hw.tcr.
Current sh_dmae_get_partial() is calculating in different unit.
This patch fixes it.

This bug has been present since c014906a87
("dmaengine: shdma: extend .device_terminate_all() to record partial
transfer"), which was added in 2.6.34-rc1.

Cc: Vinod Koul <[email protected]>
Signed-off-by: Kuninori Morimoto <[email protected]>
Acked-by: Guennadi Liakhovetski <[email protected]>
Signed-off-by: Simon Horman <[email protected]>
This commit is contained in:
Kuninori Morimoto 2013-07-23 23:12:41 -07:00 • committed by Simon Horman
commit 3c4d927662

View file

@ -400,8 +400,8 @@ static size_t sh_dmae_get_partial(struct shdma_chan *schan,
shdma_chan);
struct sh_dmae_desc *sh_desc = container_of(sdesc,
struct sh_dmae_desc, shdma_desc);
return (sh_desc->hw.tcr - sh_dmae_readl(sh_chan, TCR)) <<
sh_chan->xmit_shift;
return sh_desc->hw.tcr -
(sh_dmae_readl(sh_chan, TCR) << sh_chan->xmit_shift);
}
/* Called from error IRQ or NMI */