On Wed, Aug 10, 2016 at 01:22:13PM +0200, Niklas Söderlund wrote: > Hi, > > This series tries to solve the problem with DMA with device registers > (MMIO registers) that are behind an IOMMU for the rcar-dmac driver. A > recent patch '9575632 (dmaengine: make slave address physical)' > clarifies that DMA slave address provided by clients is the physical > address. This puts the task of mapping the DMA slave address from a > phys_addr_t to a dma_addr_t on the DMA engine. > > Without an IOMMU this is easy since the phys_addr_t and dma_addr_t are > the same and no special care is needed. However if you have a IOMMU you > need to map the DMA slave phys_addr_t to a dma_addr_t using something > like this. > > This series is based on top of v4.8-rc1. And I'm hoping to be able to collect a > Ack from Russell King on patch 4/6 that adds the ARM specific part and then be > able to take the whole series through the dmaengine tree. If this is not the > best route I'm more then happy to do it another way. > > It's tested on a Koelsch with CONFIG_IPMMU_VMSA and by enabling the > ipmmu_ds node in r8a7791.dtsi. I verified operation by interacting with > /dev/mmcblk1, i2c and the serial console which are devices behind the > iommu. > > Furthermore I have audited to the best of my ability all call paths > involved to make sure that the dma_addr_t obtained from > dma_map_resource() to is not used in a way where it would be expected > for the mapping to be RAM (have a struct page). Many thanks to Christoph > Hellwig and Laurent Pinchart for there input in this effort. Applied, thanks -- ~Vinod