From: Zhang Wei Remove virt_to_bus(), just using the saved phy address to match. Signed-off-by: Zhang Wei Cc: Ebony Zhu Cc: "Williams, Dan J" Cc: Shannon Nelson Cc: Benjamin Herrenschmidt Cc: Paul Mackerras Cc: Kumar Gala Signed-off-by: Andrew Morton --- drivers/dma/fsldma.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff -puN drivers/dma/fsldma.c~add-dma-engine-driver-for-freescale-mpc85xx-processors-fix-fix drivers/dma/fsldma.c --- a/drivers/dma/fsldma.c~add-dma-engine-driver-for-freescale-mpc85xx-processors-fix-fix +++ a/drivers/dma/fsldma.c @@ -495,15 +495,20 @@ static struct dma_async_tx_descriptor *f */ static void fsl_dma_update_completed_cookie(struct fsl_dma_chan *fsl_chan) { - struct fsl_desc_sw *cur_desc; + struct fsl_desc_sw *cur_desc, *desc; dma_addr_t ld_phy; ld_phy = get_cdar(fsl_chan) & FSL_DMA_NLDA_MASK; if (ld_phy) { - cur_desc = (struct fsl_desc_sw *)bus_to_virt(ld_phy); + cur_desc = NULL; + list_for_each_entry(desc, &fsl_chan->ld_queue, node) + if (desc->async_tx.phys == ld_phy) { + cur_desc = desc; + break; + } - if (cur_desc->async_tx.cookie) { + if (cur_desc && cur_desc->async_tx.cookie) { if (dma_is_idle(fsl_chan)) fsl_chan->completed_cookie = cur_desc->async_tx.cookie; _