Lines Matching refs:gt
203 static int psb_gtt_attach_pages(struct gtt_range *gt) in psb_gtt_attach_pages() argument
207 WARN_ON(gt->pages); in psb_gtt_attach_pages()
209 pages = drm_gem_get_pages(>->gem); in psb_gtt_attach_pages()
213 gt->npage = gt->gem.size / PAGE_SIZE; in psb_gtt_attach_pages()
214 gt->pages = pages; in psb_gtt_attach_pages()
228 static void psb_gtt_detach_pages(struct gtt_range *gt) in psb_gtt_detach_pages() argument
230 drm_gem_put_pages(>->gem, gt->pages, true, false); in psb_gtt_detach_pages()
231 gt->pages = NULL; in psb_gtt_detach_pages()
244 int psb_gtt_pin(struct gtt_range *gt) in psb_gtt_pin() argument
247 struct drm_device *dev = gt->gem.dev; in psb_gtt_pin()
253 if (gt->in_gart == 0 && gt->stolen == 0) { in psb_gtt_pin()
254 ret = psb_gtt_attach_pages(gt); in psb_gtt_pin()
257 ret = psb_gtt_insert(dev, gt, 0); in psb_gtt_pin()
259 psb_gtt_detach_pages(gt); in psb_gtt_pin()
263 gt->pages, (gpu_base + gt->offset), in psb_gtt_pin()
264 gt->npage, 0, 0, PSB_MMU_CACHED_MEMORY); in psb_gtt_pin()
266 gt->in_gart++; in psb_gtt_pin()
283 void psb_gtt_unpin(struct gtt_range *gt) in psb_gtt_unpin() argument
285 struct drm_device *dev = gt->gem.dev; in psb_gtt_unpin()
300 WARN_ON(!gt->in_gart); in psb_gtt_unpin()
302 gt->in_gart--; in psb_gtt_unpin()
303 if (gt->in_gart == 0 && gt->stolen == 0) { in psb_gtt_unpin()
305 (gpu_base + gt->offset), gt->npage, 0, 0); in psb_gtt_unpin()
306 psb_gtt_remove(dev, gt); in psb_gtt_unpin()
307 psb_gtt_detach_pages(gt); in psb_gtt_unpin()
336 struct gtt_range *gt; in psb_gtt_alloc_range() local
351 gt = kzalloc(sizeof(struct gtt_range), GFP_KERNEL); in psb_gtt_alloc_range()
352 if (gt == NULL) in psb_gtt_alloc_range()
354 gt->resource.name = name; in psb_gtt_alloc_range()
355 gt->stolen = backed; in psb_gtt_alloc_range()
356 gt->in_gart = backed; in psb_gtt_alloc_range()
357 gt->roll = 0; in psb_gtt_alloc_range()
359 gt->gem.dev = dev; in psb_gtt_alloc_range()
360 ret = allocate_resource(dev_priv->gtt_mem, >->resource, in psb_gtt_alloc_range()
363 gt->offset = gt->resource.start - r->start; in psb_gtt_alloc_range()
364 return gt; in psb_gtt_alloc_range()
366 kfree(gt); in psb_gtt_alloc_range()
378 void psb_gtt_free_range(struct drm_device *dev, struct gtt_range *gt) in psb_gtt_free_range() argument
381 if (gt->mmapping) { in psb_gtt_free_range()
382 psb_gtt_unpin(gt); in psb_gtt_free_range()
383 gt->mmapping = 0; in psb_gtt_free_range()
385 WARN_ON(gt->in_gart && !gt->stolen); in psb_gtt_free_range()
386 release_resource(>->resource); in psb_gtt_free_range()
387 kfree(gt); in psb_gtt_free_range()