Lines Matching defs:lbo
47 static void lsdc_bo_set_placement(struct lsdc_bo *lbo, u32 domain)
53 if (lbo->tbo.base.size <= PAGE_SIZE)
56 lbo->placement.placement = lbo->placements;
57 lbo->placement.busy_placement = lbo->placements;
60 lbo->placements[c].mem_type = TTM_PL_VRAM;
61 lbo->placements[c++].flags = pflags;
65 lbo->placements[c].mem_type = TTM_PL_TT;
66 lbo->placements[c++].flags = pflags;
70 lbo->placements[c].mem_type = TTM_PL_SYSTEM;
71 lbo->placements[c++].flags = 0;
75 lbo->placements[c].mem_type = TTM_PL_SYSTEM;
76 lbo->placements[c++].flags = 0;
79 lbo->placement.num_placement = c;
80 lbo->placement.num_busy_placement = c;
83 lbo->placements[i].fpfn = 0;
84 lbo->placements[i].lpfn = 0;
145 struct lsdc_bo *lbo = to_lsdc_bo(tbo);
149 lsdc_bo_set_placement(lbo, LSDC_GEM_DOMAIN_GTT);
153 lsdc_bo_set_placement(lbo, LSDC_GEM_DOMAIN_SYSTEM);
157 *tplacement = lbo->placement;
168 struct lsdc_bo *lbo = to_lsdc_bo(tbo);
182 lbo, lsdc_mem_type_to_str(new_mem->mem_type),
183 lsdc_bo_size(lbo));
191 lbo, lsdc_bo_size(lbo));
198 lbo, lsdc_bo_size(lbo));
206 lbo, lsdc_bo_size(lbo));
213 lbo,
216 lsdc_bo_size(lbo));
254 u64 lsdc_bo_gpu_offset(struct lsdc_bo *lbo)
256 struct ttm_buffer_object *tbo = &lbo->tbo;
271 size_t lsdc_bo_size(struct lsdc_bo *lbo)
273 struct ttm_buffer_object *tbo = &lbo->tbo;
278 int lsdc_bo_reserve(struct lsdc_bo *lbo)
280 return ttm_bo_reserve(&lbo->tbo, true, false, NULL);
283 void lsdc_bo_unreserve(struct lsdc_bo *lbo)
285 return ttm_bo_unreserve(&lbo->tbo);
288 int lsdc_bo_pin(struct lsdc_bo *lbo, u32 domain, u64 *gpu_addr)
291 struct ttm_buffer_object *tbo = &lbo->tbo;
298 if (lbo->sharing_count && domain == LSDC_GEM_DOMAIN_VRAM)
302 lsdc_bo_set_placement(lbo, domain);
304 ret = ttm_bo_validate(tbo, &lbo->placement, &ctx);
306 drm_err(&ldev->base, "%p validate failed: %d\n", lbo, ret);
311 ldev->vram_pinned_size += lsdc_bo_size(lbo);
313 ldev->gtt_pinned_size += lsdc_bo_size(lbo);
319 *gpu_addr = lsdc_bo_gpu_offset(lbo);
324 void lsdc_bo_unpin(struct lsdc_bo *lbo)
326 struct ttm_buffer_object *tbo = &lbo->tbo;
330 drm_dbg(&ldev->base, "%p unpin is not necessary\n", lbo);
338 ldev->vram_pinned_size -= lsdc_bo_size(lbo);
340 ldev->gtt_pinned_size -= lsdc_bo_size(lbo);
344 void lsdc_bo_ref(struct lsdc_bo *lbo)
346 struct ttm_buffer_object *tbo = &lbo->tbo;
351 void lsdc_bo_unref(struct lsdc_bo *lbo)
353 struct ttm_buffer_object *tbo = &lbo->tbo;
358 int lsdc_bo_kmap(struct lsdc_bo *lbo)
360 struct ttm_buffer_object *tbo = &lbo->tbo;
373 if (lbo->kptr)
376 err = ttm_bo_kmap(tbo, 0, PFN_UP(lsdc_bo_size(lbo)), &lbo->kmap);
378 drm_err(ddev, "kmap %p failed: %d\n", lbo, err);
382 lbo->kptr = ttm_kmap_obj_virtual(&lbo->kmap, &lbo->is_iomem);
387 void lsdc_bo_kunmap(struct lsdc_bo *lbo)
389 if (!lbo->kptr)
392 lbo->kptr = NULL;
393 ttm_bo_kunmap(&lbo->kmap);
396 void lsdc_bo_clear(struct lsdc_bo *lbo)
398 lsdc_bo_kmap(lbo);
400 if (lbo->is_iomem)
401 memset_io((void __iomem *)lbo->kptr, 0, lbo->size);
403 memset(lbo->kptr, 0, lbo->size);
405 lsdc_bo_kunmap(lbo);
424 struct lsdc_bo *lbo = to_lsdc_bo(tbo);
427 list_del_init(&lbo->list);
432 kfree(lbo);
445 struct lsdc_bo *lbo;
449 lbo = kzalloc(sizeof(*lbo), GFP_KERNEL);
450 if (!lbo)
453 INIT_LIST_HEAD(&lbo->list);
455 lbo->initial_domain = domain & (LSDC_GEM_DOMAIN_VRAM |
459 tbo = &lbo->tbo;
465 kfree(lbo);
478 lsdc_bo_set_placement(lbo, domain);
479 lbo->size = size;
481 ret = ttm_bo_init_validate(bdev, tbo, bo_type, &lbo->placement, 0,
484 kfree(lbo);
488 return lbo;
495 struct lsdc_bo *lbo;
498 lbo = lsdc_bo_create(ddev, domain, size, true, NULL, NULL);
499 if (IS_ERR(lbo))
500 return ERR_CAST(lbo);
502 ret = lsdc_bo_reserve(lbo);
504 lsdc_bo_unref(lbo);
508 ret = lsdc_bo_pin(lbo, domain, NULL);
509 lsdc_bo_unreserve(lbo);
511 lsdc_bo_unref(lbo);
515 return lbo;
518 void lsdc_bo_free_kernel_pinned(struct lsdc_bo *lbo)
522 ret = lsdc_bo_reserve(lbo);
526 lsdc_bo_unpin(lbo);
527 lsdc_bo_unreserve(lbo);
529 lsdc_bo_unref(lbo);