Lines Matching refs:iommu
91 mutex_init(&tdev->iommu.mutex); in nvkm_device_tegra_probe_iommu()
94 tdev->iommu.domain = iommu_domain_alloc(&platform_bus_type); in nvkm_device_tegra_probe_iommu()
95 if (IS_ERR(tdev->iommu.domain)) in nvkm_device_tegra_probe_iommu()
103 pgsize_bitmap = tdev->iommu.domain->ops->pgsize_bitmap; in nvkm_device_tegra_probe_iommu()
105 tdev->iommu.pgshift = PAGE_SHIFT; in nvkm_device_tegra_probe_iommu()
107 tdev->iommu.pgshift = fls(pgsize_bitmap & ~PAGE_MASK); in nvkm_device_tegra_probe_iommu()
108 if (tdev->iommu.pgshift == 0) { in nvkm_device_tegra_probe_iommu()
112 tdev->iommu.pgshift -= 1; in nvkm_device_tegra_probe_iommu()
115 ret = iommu_attach_device(tdev->iommu.domain, dev); in nvkm_device_tegra_probe_iommu()
119 ret = nvkm_mm_init(&tdev->iommu.mm, 0, in nvkm_device_tegra_probe_iommu()
121 tdev->iommu.pgshift, 1); in nvkm_device_tegra_probe_iommu()
129 iommu_detach_device(tdev->iommu.domain, dev); in nvkm_device_tegra_probe_iommu()
132 iommu_domain_free(tdev->iommu.domain); in nvkm_device_tegra_probe_iommu()
135 tdev->iommu.domain = NULL; in nvkm_device_tegra_probe_iommu()
136 tdev->iommu.pgshift = 0; in nvkm_device_tegra_probe_iommu()
145 if (tdev->iommu.domain) { in nvkm_device_tegra_remove_iommu()
146 nvkm_mm_fini(&tdev->iommu.mm); in nvkm_device_tegra_remove_iommu()
147 iommu_detach_device(tdev->iommu.domain, tdev->device.dev); in nvkm_device_tegra_remove_iommu()
148 iommu_domain_free(tdev->iommu.domain); in nvkm_device_tegra_remove_iommu()