On Sat, Apr 27, 2019 at 10:10:29AM +0300, laurentiu.tu...@nxp.com wrote: > From: Laurentiu Tudor <laurentiu.tu...@nxp.com> > > The driver relies on the no longer valid assumption that dma addresses > (iovas) are identical to physical addressees and uses phys_to_virt() to > make iova -> vaddr conversions. Fix this by adding a function that does > proper iova -> phys conversions using the iommu api and update the code > to use it. > Also, a dma_unmap_single() call had to be moved further down the code > because iova -> vaddr conversions were required before the unmap. > For now only the contiguous frame case is handled and the SG case is > split in a following patch. > While at it, clean-up a redundant dpaa_bpid2pool() and pass the bp > as parameter.
Err, this is broken. A driver using the DMA API has no business call IOMMU APIs. Just save the _virtual_ address used for the mapping away and use that again. We should not go through crazy gymnastics like this.