Lines Matching refs:vde

19 int tegra_vde_iommu_map(struct tegra_vde *vde,  in tegra_vde_iommu_map()  argument
29 end = vde->domain->geometry.aperture_end; in tegra_vde_iommu_map()
30 size = iova_align(&vde->iova, size); in tegra_vde_iommu_map()
31 shift = iova_shift(&vde->iova); in tegra_vde_iommu_map()
33 iova = alloc_iova(&vde->iova, size >> shift, end >> shift, true); in tegra_vde_iommu_map()
37 addr = iova_dma_addr(&vde->iova, iova); in tegra_vde_iommu_map()
39 size = iommu_map_sgtable(vde->domain, addr, sgt, in tegra_vde_iommu_map()
42 __free_iova(&vde->iova, iova); in tegra_vde_iommu_map()
51 void tegra_vde_iommu_unmap(struct tegra_vde *vde, struct iova *iova) in tegra_vde_iommu_unmap() argument
53 unsigned long shift = iova_shift(&vde->iova); in tegra_vde_iommu_unmap()
55 dma_addr_t addr = iova_dma_addr(&vde->iova, iova); in tegra_vde_iommu_unmap()
57 iommu_unmap(vde->domain, addr, size); in tegra_vde_iommu_unmap()
58 __free_iova(&vde->iova, iova); in tegra_vde_iommu_unmap()
61 int tegra_vde_iommu_init(struct tegra_vde *vde) in tegra_vde_iommu_init() argument
63 struct device *dev = vde->dev; in tegra_vde_iommu_init()
69 vde->group = iommu_group_get(dev); in tegra_vde_iommu_init()
70 if (!vde->group) in tegra_vde_iommu_init()
81 vde->domain = iommu_domain_alloc(&platform_bus_type); in tegra_vde_iommu_init()
82 if (!vde->domain) { in tegra_vde_iommu_init()
91 order = __ffs(vde->domain->pgsize_bitmap); in tegra_vde_iommu_init()
92 init_iova_domain(&vde->iova, 1UL << order, 0); in tegra_vde_iommu_init()
94 err = iommu_attach_group(vde->domain, vde->group); in tegra_vde_iommu_init()
102 shift = iova_shift(&vde->iova); in tegra_vde_iommu_init()
103 iova = reserve_iova(&vde->iova, 0x60000000 >> shift, in tegra_vde_iommu_init()
110 vde->iova_resv_static_addresses = iova; in tegra_vde_iommu_init()
118 iova = reserve_iova(&vde->iova, 0xffffffff >> shift, in tegra_vde_iommu_init()
125 vde->iova_resv_last_page = iova; in tegra_vde_iommu_init()
130 __free_iova(&vde->iova, vde->iova_resv_static_addresses); in tegra_vde_iommu_init()
132 iommu_detach_group(vde->domain, vde->group); in tegra_vde_iommu_init()
134 put_iova_domain(&vde->iova); in tegra_vde_iommu_init()
137 iommu_domain_free(vde->domain); in tegra_vde_iommu_init()
139 iommu_group_put(vde->group); in tegra_vde_iommu_init()
144 void tegra_vde_iommu_deinit(struct tegra_vde *vde) in tegra_vde_iommu_deinit() argument
146 if (vde->domain) { in tegra_vde_iommu_deinit()
147 __free_iova(&vde->iova, vde->iova_resv_last_page); in tegra_vde_iommu_deinit()
148 __free_iova(&vde->iova, vde->iova_resv_static_addresses); in tegra_vde_iommu_deinit()
149 iommu_detach_group(vde->domain, vde->group); in tegra_vde_iommu_deinit()
150 put_iova_domain(&vde->iova); in tegra_vde_iommu_deinit()
152 iommu_domain_free(vde->domain); in tegra_vde_iommu_deinit()
153 iommu_group_put(vde->group); in tegra_vde_iommu_deinit()
155 vde->domain = NULL; in tegra_vde_iommu_deinit()