Lines Matching refs:iommu
101 mutex_init(&gpu->iommu.mutex); in nouveau_platform_probe_iommu()
104 gpu->iommu.domain = iommu_domain_alloc(&platform_bus_type); in nouveau_platform_probe_iommu()
105 if (IS_ERR(gpu->iommu.domain)) in nouveau_platform_probe_iommu()
113 pgsize_bitmap = gpu->iommu.domain->ops->pgsize_bitmap; in nouveau_platform_probe_iommu()
115 gpu->iommu.pgshift = PAGE_SHIFT; in nouveau_platform_probe_iommu()
117 gpu->iommu.pgshift = fls(pgsize_bitmap & ~PAGE_MASK); in nouveau_platform_probe_iommu()
118 if (gpu->iommu.pgshift == 0) { in nouveau_platform_probe_iommu()
122 gpu->iommu.pgshift -= 1; in nouveau_platform_probe_iommu()
125 err = iommu_attach_device(gpu->iommu.domain, dev); in nouveau_platform_probe_iommu()
129 err = nvkm_mm_init(&gpu->iommu._mm, 0, in nouveau_platform_probe_iommu()
130 (1ULL << 40) >> gpu->iommu.pgshift, 1); in nouveau_platform_probe_iommu()
134 gpu->iommu.mm = &gpu->iommu._mm; in nouveau_platform_probe_iommu()
140 iommu_detach_device(gpu->iommu.domain, dev); in nouveau_platform_probe_iommu()
143 iommu_domain_free(gpu->iommu.domain); in nouveau_platform_probe_iommu()
146 gpu->iommu.domain = NULL; in nouveau_platform_probe_iommu()
147 gpu->iommu.pgshift = 0; in nouveau_platform_probe_iommu()
154 if (gpu->iommu.domain) { in nouveau_platform_remove_iommu()
155 nvkm_mm_fini(&gpu->iommu._mm); in nouveau_platform_remove_iommu()
156 iommu_detach_device(gpu->iommu.domain, dev); in nouveau_platform_remove_iommu()
157 iommu_domain_free(gpu->iommu.domain); in nouveau_platform_remove_iommu()