Lines Matching refs:tegra
69 struct tegra_drm *tegra = drm->dev_private; in tegra_atomic_commit_tail() local
71 if (tegra->hub) { in tegra_atomic_commit_tail()
92 struct tegra_drm *tegra; in tegra_drm_load() local
95 tegra = kzalloc(sizeof(*tegra), GFP_KERNEL); in tegra_drm_load()
96 if (!tegra) in tegra_drm_load()
100 tegra->domain = iommu_domain_alloc(&platform_bus_type); in tegra_drm_load()
101 if (!tegra->domain) { in tegra_drm_load()
111 mutex_init(&tegra->clients_lock); in tegra_drm_load()
112 INIT_LIST_HEAD(&tegra->clients); in tegra_drm_load()
114 drm->dev_private = tegra; in tegra_drm_load()
115 tegra->drm = drm; in tegra_drm_load()
142 if (tegra->domain) { in tegra_drm_load()
148 start = tegra->domain->geometry.aperture_start & dma_mask; in tegra_drm_load()
149 end = tegra->domain->geometry.aperture_end & dma_mask; in tegra_drm_load()
156 order = __ffs(tegra->domain->pgsize_bitmap); in tegra_drm_load()
157 init_iova_domain(&tegra->carveout.domain, 1UL << order, in tegra_drm_load()
160 tegra->carveout.shift = iova_shift(&tegra->carveout.domain); in tegra_drm_load()
161 tegra->carveout.limit = carveout_end >> tegra->carveout.shift; in tegra_drm_load()
163 drm_mm_init(&tegra->mm, gem_start, gem_end - gem_start + 1); in tegra_drm_load()
164 mutex_init(&tegra->mm_lock); in tegra_drm_load()
172 if (tegra->hub) { in tegra_drm_load()
173 err = tegra_display_hub_prepare(tegra->hub); in tegra_drm_load()
201 if (tegra->hub) in tegra_drm_load()
202 tegra_display_hub_cleanup(tegra->hub); in tegra_drm_load()
211 if (tegra->domain) { in tegra_drm_load()
212 mutex_destroy(&tegra->mm_lock); in tegra_drm_load()
213 drm_mm_takedown(&tegra->mm); in tegra_drm_load()
214 put_iova_domain(&tegra->carveout.domain); in tegra_drm_load()
218 if (tegra->domain) in tegra_drm_load()
219 iommu_domain_free(tegra->domain); in tegra_drm_load()
221 kfree(tegra); in tegra_drm_load()
228 struct tegra_drm *tegra = drm->dev_private; in tegra_drm_unload() local
240 if (tegra->domain) { in tegra_drm_unload()
241 mutex_destroy(&tegra->mm_lock); in tegra_drm_unload()
242 drm_mm_takedown(&tegra->mm); in tegra_drm_unload()
243 put_iova_domain(&tegra->carveout.domain); in tegra_drm_unload()
245 iommu_domain_free(tegra->domain); in tegra_drm_unload()
248 kfree(tegra); in tegra_drm_unload()
611 struct tegra_drm *tegra = drm->dev_private; in tegra_open_channel() local
623 list_for_each_entry(client, &tegra->clients, list) in tegra_open_channel()
989 struct tegra_drm *tegra = drm->dev_private; in tegra_debugfs_iova() local
992 if (tegra->domain) { in tegra_debugfs_iova()
993 mutex_lock(&tegra->mm_lock); in tegra_debugfs_iova()
994 drm_mm_print(&tegra->mm, &p); in tegra_debugfs_iova()
995 mutex_unlock(&tegra->mm_lock); in tegra_debugfs_iova()
1049 int tegra_drm_register_client(struct tegra_drm *tegra, in tegra_drm_register_client() argument
1052 mutex_lock(&tegra->clients_lock); in tegra_drm_register_client()
1053 list_add_tail(&client->list, &tegra->clients); in tegra_drm_register_client()
1054 client->drm = tegra; in tegra_drm_register_client()
1055 mutex_unlock(&tegra->clients_lock); in tegra_drm_register_client()
1060 int tegra_drm_unregister_client(struct tegra_drm *tegra, in tegra_drm_unregister_client() argument
1063 mutex_lock(&tegra->clients_lock); in tegra_drm_unregister_client()
1066 mutex_unlock(&tegra->clients_lock); in tegra_drm_unregister_client()
1075 struct tegra_drm *tegra = drm->dev_private; in host1x_client_iommu_attach() local
1079 if (tegra->domain) { in host1x_client_iommu_attach()
1086 if (!shared || (shared && (group != tegra->group))) { in host1x_client_iommu_attach()
1095 err = iommu_attach_group(tegra->domain, group); in host1x_client_iommu_attach()
1101 if (shared && !tegra->group) in host1x_client_iommu_attach()
1102 tegra->group = group; in host1x_client_iommu_attach()
1113 struct tegra_drm *tegra = drm->dev_private; in host1x_client_iommu_detach() local
1116 if (group == tegra->group) { in host1x_client_iommu_detach()
1117 iommu_detach_group(tegra->domain, group); in host1x_client_iommu_detach()
1118 tegra->group = NULL; in host1x_client_iommu_detach()
1125 void *tegra_drm_alloc(struct tegra_drm *tegra, size_t size, dma_addr_t *dma) in tegra_drm_alloc() argument
1132 if (tegra->domain) in tegra_drm_alloc()
1133 size = iova_align(&tegra->carveout.domain, size); in tegra_drm_alloc()
1138 if (!tegra->domain) { in tegra_drm_alloc()
1152 if (!tegra->domain) { in tegra_drm_alloc()
1161 alloc = alloc_iova(&tegra->carveout.domain, in tegra_drm_alloc()
1162 size >> tegra->carveout.shift, in tegra_drm_alloc()
1163 tegra->carveout.limit, true); in tegra_drm_alloc()
1169 *dma = iova_dma_addr(&tegra->carveout.domain, alloc); in tegra_drm_alloc()
1170 err = iommu_map(tegra->domain, *dma, virt_to_phys(virt), in tegra_drm_alloc()
1178 __free_iova(&tegra->carveout.domain, alloc); in tegra_drm_alloc()
1185 void tegra_drm_free(struct tegra_drm *tegra, size_t size, void *virt, in tegra_drm_free() argument
1188 if (tegra->domain) in tegra_drm_free()
1189 size = iova_align(&tegra->carveout.domain, size); in tegra_drm_free()
1193 if (tegra->domain) { in tegra_drm_free()
1194 iommu_unmap(tegra->domain, dma, size); in tegra_drm_free()
1195 free_iova(&tegra->carveout.domain, in tegra_drm_free()
1196 iova_pfn(&tegra->carveout.domain, dma)); in tegra_drm_free()