Lines Matching full:priv
82 static int sdma_init(struct amdgpu_priv *priv, int fd) in sdma_init() argument
92 if (priv->drm_version < 27) in sdma_init()
96 if (priv->dev_info.family < AMDGPU_FAMILY_CI || priv->dev_info.family > AMDGPU_FAMILY_NV) in sdma_init()
105 priv->sdma_ctx = ctx_args.out.alloc.ctx_id; in sdma_init()
107 priv->sdma_cmdbuf_size = ALIGN(4096, priv->dev_info.virtual_address_alignment); in sdma_init()
108 gem_create.in.bo_size = priv->sdma_cmdbuf_size; in sdma_init()
116 priv->sdma_cmdbuf_bo = gem_create.out.handle; in sdma_init()
118 priv->sdma_cmdbuf_addr = in sdma_init()
119 ALIGN(priv->dev_info.virtual_address_offset, priv->dev_info.virtual_address_alignment); in sdma_init()
122 va_args.handle = priv->sdma_cmdbuf_bo; in sdma_init()
125 va_args.va_address = priv->sdma_cmdbuf_addr; in sdma_init()
127 va_args.map_size = priv->sdma_cmdbuf_size; in sdma_init()
133 gem_map.in.handle = priv->sdma_cmdbuf_bo; in sdma_init()
138 priv->sdma_cmdbuf_map = mmap(0, priv->sdma_cmdbuf_size, PROT_READ | PROT_WRITE, MAP_SHARED, in sdma_init()
140 if (priv->sdma_cmdbuf_map == MAP_FAILED) { in sdma_init()
141 priv->sdma_cmdbuf_map = NULL; in sdma_init()
152 gem_close.handle = priv->sdma_cmdbuf_bo; in sdma_init()
157 ctx_args.in.ctx_id = priv->sdma_ctx; in sdma_init()
162 static void sdma_finish(struct amdgpu_priv *priv, int fd) in sdma_finish() argument
168 if (!priv->sdma_cmdbuf_map) in sdma_finish()
171 va_args.handle = priv->sdma_cmdbuf_bo; in sdma_finish()
174 va_args.va_address = priv->sdma_cmdbuf_addr; in sdma_finish()
176 va_args.map_size = priv->sdma_cmdbuf_size; in sdma_finish()
179 gem_close.handle = priv->sdma_cmdbuf_bo; in sdma_finish()
183 ctx_args.in.ctx_id = priv->sdma_ctx; in sdma_finish()
187 static int sdma_copy(struct amdgpu_priv *priv, int fd, uint32_t src_handle, uint32_t dst_handle, in sdma_copy() argument
192 const uint64_t max_commands = priv->sdma_cmdbuf_size / cmd_size; in sdma_copy()
193 uint64_t src_addr = priv->sdma_cmdbuf_addr + priv->sdma_cmdbuf_size; in sdma_copy()
237 priv->sdma_cmdbuf_map[cmd++] = 0x01; /* linear copy */ in sdma_copy()
238 priv->sdma_cmdbuf_map[cmd++] = in sdma_copy()
239 priv->dev_info.family >= AMDGPU_FAMILY_AI ? (cur_size - 1) : cur_size; in sdma_copy()
240 priv->sdma_cmdbuf_map[cmd++] = 0; in sdma_copy()
241 priv->sdma_cmdbuf_map[cmd++] = cur_src_addr; in sdma_copy()
242 priv->sdma_cmdbuf_map[cmd++] = cur_src_addr >> 32; in sdma_copy()
243 priv->sdma_cmdbuf_map[cmd++] = cur_dst_addr; in sdma_copy()
244 priv->sdma_cmdbuf_map[cmd++] = cur_dst_addr >> 32; in sdma_copy()
251 ib.va_start = priv->sdma_cmdbuf_addr; in sdma_copy()
259 bo_list_entries[0].bo_handle = priv->sdma_cmdbuf_bo; in sdma_copy()
277 cs.in.ctx_id = priv->sdma_ctx; in sdma_copy()
289 wait_cs.in.ctx_id = priv->sdma_ctx; in sdma_copy()
317 static bool is_modifier_scanout_capable(struct amdgpu_priv *priv, uint32_t format, in is_modifier_scanout_capable() argument
329 if (priv->dev_info.family >= AMDGPU_FAMILY_RV) { /* DCN based GPUs */ in is_modifier_scanout_capable()
338 assert(priv->dev_info.family == AMDGPU_FAMILY_AI); in is_modifier_scanout_capable()
364 struct amdgpu_priv *priv; in amdgpu_init() local
369 priv = calloc(1, sizeof(struct amdgpu_priv)); in amdgpu_init()
370 if (!priv) in amdgpu_init()
375 free(priv); in amdgpu_init()
379 priv->drm_version = drm_version->version_minor; in amdgpu_init()
382 drv->priv = priv; in amdgpu_init()
384 if (query_dev_info(drv_get_fd(drv), &priv->dev_info)) { in amdgpu_init()
385 free(priv); in amdgpu_init()
386 drv->priv = NULL; in amdgpu_init()
390 priv->dri = dri_init(drv, DRI_PATH, "radeonsi"); in amdgpu_init()
391 if (!priv->dri) { in amdgpu_init()
392 free(priv); in amdgpu_init()
393 drv->priv = NULL; in amdgpu_init()
398 if (sdma_init(priv, drv_get_fd(drv))) in amdgpu_init()
466 if (dri_query_modifiers(priv->dri, format, 0, NULL, &mod_cnt) && mod_cnt) { in amdgpu_init()
468 dri_query_modifiers(priv->dri, format, mod_cnt, modifiers, &mod_cnt); in amdgpu_init()
472 is_modifier_scanout_capable(drv->priv, format, modifiers[i]); in amdgpu_init()
479 if (dri_num_planes_from_modifier(priv->dri, format, modifiers[i]) != in amdgpu_init()
514 struct amdgpu_priv *priv = drv->priv; in amdgpu_close() local
516 sdma_finish(priv, drv_get_fd(drv)); in amdgpu_close()
517 dri_close(priv->dri); in amdgpu_close()
518 free(priv); in amdgpu_close()
520 drv->priv = NULL; in amdgpu_close()
531 struct amdgpu_priv *priv = bo->drv->priv; in amdgpu_create_bo_linear() local
569 if (double_align && priv->dev_info.family >= AMDGPU_FAMILY_NV && in amdgpu_create_bo_linear()
593 ALIGN(bo->meta.total_size, priv->dev_info.virtual_address_alignment); in amdgpu_create_bo_linear()
629 struct amdgpu_priv *priv = bo->drv->priv; in amdgpu_create_bo() local
637 if (use_flags & (BO_USE_SCANOUT) && priv->dev_info.family == AMDGPU_FAMILY_CZ) { in amdgpu_create_bo()
642 return dri_bo_create(priv->dri, bo, width, height, format, use_flags); in amdgpu_create_bo()
644 return dri_bo_create_with_modifiers(priv->dri, bo, width, height, format, use_flags, in amdgpu_create_bo()
655 struct amdgpu_priv *priv = bo->drv->priv; in amdgpu_create_bo_with_modifiers() local
665 return dri_bo_create_with_modifiers(priv->dri, bo, width, height, format, 0, modifiers, in amdgpu_create_bo_with_modifiers()
671 struct amdgpu_priv *priv = bo->drv->priv; in amdgpu_import_bo() local
683 dri_num_planes_from_modifier(priv->dri, data->format, data->format_modifier); in amdgpu_import_bo()
686 return dri_bo_import(priv->dri, bo, data); in amdgpu_import_bo()
693 struct amdgpu_priv *priv = bo->drv->priv; in amdgpu_release_bo() local
695 if (bo->priv) in amdgpu_release_bo()
696 return dri_bo_release(priv->dri, bo); in amdgpu_release_bo()
703 struct amdgpu_priv *priv = bo->drv->priv; in amdgpu_destroy_bo() local
705 if (bo->priv) in amdgpu_destroy_bo()
706 return dri_bo_destroy(priv->dri, bo); in amdgpu_destroy_bo()
719 struct amdgpu_linear_vma_priv *priv = NULL; in amdgpu_map_bo() local
720 struct amdgpu_priv *drv_priv = bo->drv->priv; in amdgpu_map_bo()
722 if (bo->priv) in amdgpu_map_bo()
740 priv = calloc(1, sizeof(struct amdgpu_linear_vma_priv)); in amdgpu_map_bo()
741 if (!priv) in amdgpu_map_bo()
752 free(priv); in amdgpu_map_bo()
756 priv->map_flags = map_flags; in amdgpu_map_bo()
757 handle = priv->handle = gem_create.out.handle; in amdgpu_map_bo()
759 ret = sdma_copy(bo->drv->priv, bo->drv->fd, bo->handle.u32, priv->handle, in amdgpu_map_bo()
779 vma->priv = priv; in amdgpu_map_bo()
783 if (priv) { in amdgpu_map_bo()
785 gem_close.handle = priv->handle; in amdgpu_map_bo()
787 free(priv); in amdgpu_map_bo()
794 struct amdgpu_priv *priv = bo->drv->priv; in amdgpu_unmap_bo() local
796 if (bo->priv) { in amdgpu_unmap_bo()
797 return dri_bo_unmap(priv->dri, bo, vma); in amdgpu_unmap_bo()
803 if (vma->priv) { in amdgpu_unmap_bo()
804 struct amdgpu_linear_vma_priv *priv = vma->priv; in amdgpu_unmap_bo() local
807 if (BO_MAP_WRITE & priv->map_flags) { in amdgpu_unmap_bo()
808 r = sdma_copy(bo->drv->priv, bo->drv->fd, priv->handle, in amdgpu_unmap_bo()
814 gem_close.handle = priv->handle; in amdgpu_unmap_bo()
827 if (bo->priv) in amdgpu_bo_invalidate()
850 struct amdgpu_priv *priv = drv->priv; in amdgpu_num_planes_from_modifier() local
851 return dri_num_planes_from_modifier(priv->dri, format, modifier); in amdgpu_num_planes_from_modifier()