Messages in this thread | | | Subject | Re: [PATCH v2 2/3] iommu/dma: wire-up new dma map op .get_virt_addr | From | Robin Murphy <> | Date | Mon, 28 Oct 2019 13:52:49 +0000 |
| |
On 24/10/2019 13:41, Laurentiu Tudor wrote: > From: Laurentiu Tudor <laurentiu.tudor@nxp.com> > > Add an implementation of the newly introduced dma map op in the > generic DMA IOMMU generic glue layer and wire it up. > > Signed-off-by: Laurentiu Tudor <laurentiu.tudor@nxp.com> > --- > drivers/iommu/dma-iommu.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c > index f321279baf9e..15e76232d697 100644 > --- a/drivers/iommu/dma-iommu.c > +++ b/drivers/iommu/dma-iommu.c > @@ -1091,6 +1091,21 @@ static unsigned long iommu_dma_get_merge_boundary(struct device *dev) > return (1UL << __ffs(domain->pgsize_bitmap)) - 1; > } > > +static void *iommu_dma_get_virt_addr(struct device *dev, dma_addr_t dma_handle) > +{ > + struct iommu_domain *domain = iommu_get_domain_for_dev(dev);
Note that we'd generally use the iommu_get_dma_domain() fastpath...
> + > + if (domain) {
...wherein we can also assume that the device having iommu_dma_ops assigned at all implies that a DMA ops domain is in place.
Robin.
> + phys_addr_t phys; > + > + phys = iommu_iova_to_phys(domain, dma_handle); > + if (phys) > + return phys_to_virt(phys); > + } > + > + return NULL; > +} > + > static const struct dma_map_ops iommu_dma_ops = { > .alloc = iommu_dma_alloc, > .free = iommu_dma_free, > @@ -1107,6 +1122,7 @@ static const struct dma_map_ops iommu_dma_ops = { > .map_resource = iommu_dma_map_resource, > .unmap_resource = iommu_dma_unmap_resource, > .get_merge_boundary = iommu_dma_get_merge_boundary, > + .get_virt_addr = iommu_dma_get_virt_addr, > }; > > /* >
| |