Lines Matching refs:vgpu

38 void populate_pvinfo_page(struct intel_vgpu *vgpu)  in populate_pvinfo_page()  argument
40 struct drm_i915_private *i915 = vgpu->gvt->gt->i915; in populate_pvinfo_page()
42 vgpu_vreg64_t(vgpu, vgtif_reg(magic)) = VGT_MAGIC; in populate_pvinfo_page()
43 vgpu_vreg_t(vgpu, vgtif_reg(version_major)) = 1; in populate_pvinfo_page()
44 vgpu_vreg_t(vgpu, vgtif_reg(version_minor)) = 0; in populate_pvinfo_page()
45 vgpu_vreg_t(vgpu, vgtif_reg(display_ready)) = 0; in populate_pvinfo_page()
46 vgpu_vreg_t(vgpu, vgtif_reg(vgt_id)) = vgpu->id; in populate_pvinfo_page()
48 vgpu_vreg_t(vgpu, vgtif_reg(vgt_caps)) = VGT_CAPS_FULL_PPGTT; in populate_pvinfo_page()
49 vgpu_vreg_t(vgpu, vgtif_reg(vgt_caps)) |= VGT_CAPS_HWSP_EMULATION; in populate_pvinfo_page()
50 vgpu_vreg_t(vgpu, vgtif_reg(vgt_caps)) |= VGT_CAPS_HUGE_GTT; in populate_pvinfo_page()
52 vgpu_vreg_t(vgpu, vgtif_reg(avail_rs.mappable_gmadr.base)) = in populate_pvinfo_page()
53 vgpu_aperture_gmadr_base(vgpu); in populate_pvinfo_page()
54 vgpu_vreg_t(vgpu, vgtif_reg(avail_rs.mappable_gmadr.size)) = in populate_pvinfo_page()
55 vgpu_aperture_sz(vgpu); in populate_pvinfo_page()
56 vgpu_vreg_t(vgpu, vgtif_reg(avail_rs.nonmappable_gmadr.base)) = in populate_pvinfo_page()
57 vgpu_hidden_gmadr_base(vgpu); in populate_pvinfo_page()
58 vgpu_vreg_t(vgpu, vgtif_reg(avail_rs.nonmappable_gmadr.size)) = in populate_pvinfo_page()
59 vgpu_hidden_sz(vgpu); in populate_pvinfo_page()
61 vgpu_vreg_t(vgpu, vgtif_reg(avail_rs.fence_num)) = vgpu_fence_sz(vgpu); in populate_pvinfo_page()
63 vgpu_vreg_t(vgpu, vgtif_reg(cursor_x_hot)) = UINT_MAX; in populate_pvinfo_page()
64 vgpu_vreg_t(vgpu, vgtif_reg(cursor_y_hot)) = UINT_MAX; in populate_pvinfo_page()
66 gvt_dbg_core("Populate PVINFO PAGE for vGPU %d\n", vgpu->id); in populate_pvinfo_page()
68 vgpu_aperture_gmadr_base(vgpu), vgpu_aperture_sz(vgpu)); in populate_pvinfo_page()
70 vgpu_hidden_gmadr_base(vgpu), vgpu_hidden_sz(vgpu)); in populate_pvinfo_page()
71 gvt_dbg_core("fence size %d\n", vgpu_fence_sz(vgpu)); in populate_pvinfo_page()
214 void intel_gvt_activate_vgpu(struct intel_vgpu *vgpu) in intel_gvt_activate_vgpu() argument
216 mutex_lock(&vgpu->vgpu_lock); in intel_gvt_activate_vgpu()
217 vgpu->active = true; in intel_gvt_activate_vgpu()
218 mutex_unlock(&vgpu->vgpu_lock); in intel_gvt_activate_vgpu()
229 void intel_gvt_deactivate_vgpu(struct intel_vgpu *vgpu) in intel_gvt_deactivate_vgpu() argument
231 mutex_lock(&vgpu->vgpu_lock); in intel_gvt_deactivate_vgpu()
233 vgpu->active = false; in intel_gvt_deactivate_vgpu()
235 if (atomic_read(&vgpu->submission.running_workload_num)) { in intel_gvt_deactivate_vgpu()
236 mutex_unlock(&vgpu->vgpu_lock); in intel_gvt_deactivate_vgpu()
237 intel_gvt_wait_vgpu_idle(vgpu); in intel_gvt_deactivate_vgpu()
238 mutex_lock(&vgpu->vgpu_lock); in intel_gvt_deactivate_vgpu()
241 intel_vgpu_stop_schedule(vgpu); in intel_gvt_deactivate_vgpu()
243 mutex_unlock(&vgpu->vgpu_lock); in intel_gvt_deactivate_vgpu()
255 void intel_gvt_release_vgpu(struct intel_vgpu *vgpu) in intel_gvt_release_vgpu() argument
257 intel_gvt_deactivate_vgpu(vgpu); in intel_gvt_release_vgpu()
259 mutex_lock(&vgpu->vgpu_lock); in intel_gvt_release_vgpu()
260 vgpu->d3_entered = false; in intel_gvt_release_vgpu()
261 intel_vgpu_clean_workloads(vgpu, ALL_ENGINES); in intel_gvt_release_vgpu()
262 intel_vgpu_dmabuf_cleanup(vgpu); in intel_gvt_release_vgpu()
263 mutex_unlock(&vgpu->vgpu_lock); in intel_gvt_release_vgpu()
273 void intel_gvt_destroy_vgpu(struct intel_vgpu *vgpu) in intel_gvt_destroy_vgpu() argument
275 struct intel_gvt *gvt = vgpu->gvt; in intel_gvt_destroy_vgpu()
278 drm_WARN(&i915->drm, vgpu->active, "vGPU is still active!\n"); in intel_gvt_destroy_vgpu()
285 idr_remove(&gvt->vgpu_idr, vgpu->id); in intel_gvt_destroy_vgpu()
288 mutex_lock(&vgpu->vgpu_lock); in intel_gvt_destroy_vgpu()
289 intel_gvt_debugfs_remove_vgpu(vgpu); in intel_gvt_destroy_vgpu()
290 intel_vgpu_clean_sched_policy(vgpu); in intel_gvt_destroy_vgpu()
291 intel_vgpu_clean_submission(vgpu); in intel_gvt_destroy_vgpu()
292 intel_vgpu_clean_display(vgpu); in intel_gvt_destroy_vgpu()
293 intel_vgpu_clean_opregion(vgpu); in intel_gvt_destroy_vgpu()
294 intel_vgpu_reset_ggtt(vgpu, true); in intel_gvt_destroy_vgpu()
295 intel_vgpu_clean_gtt(vgpu); in intel_gvt_destroy_vgpu()
296 intel_gvt_hypervisor_detach_vgpu(vgpu); in intel_gvt_destroy_vgpu()
297 intel_vgpu_free_resource(vgpu); in intel_gvt_destroy_vgpu()
298 intel_vgpu_clean_mmio(vgpu); in intel_gvt_destroy_vgpu()
299 intel_vgpu_dmabuf_cleanup(vgpu); in intel_gvt_destroy_vgpu()
300 mutex_unlock(&vgpu->vgpu_lock); in intel_gvt_destroy_vgpu()
308 vfree(vgpu); in intel_gvt_destroy_vgpu()
324 struct intel_vgpu *vgpu; in intel_gvt_create_idle_vgpu() local
328 vgpu = vzalloc(sizeof(*vgpu)); in intel_gvt_create_idle_vgpu()
329 if (!vgpu) in intel_gvt_create_idle_vgpu()
332 vgpu->id = IDLE_VGPU_IDR; in intel_gvt_create_idle_vgpu()
333 vgpu->gvt = gvt; in intel_gvt_create_idle_vgpu()
334 mutex_init(&vgpu->vgpu_lock); in intel_gvt_create_idle_vgpu()
337 INIT_LIST_HEAD(&vgpu->submission.workload_q_head[i]); in intel_gvt_create_idle_vgpu()
339 ret = intel_vgpu_init_sched_policy(vgpu); in intel_gvt_create_idle_vgpu()
343 vgpu->active = false; in intel_gvt_create_idle_vgpu()
345 return vgpu; in intel_gvt_create_idle_vgpu()
348 vfree(vgpu); in intel_gvt_create_idle_vgpu()
359 void intel_gvt_destroy_idle_vgpu(struct intel_vgpu *vgpu) in intel_gvt_destroy_idle_vgpu() argument
361 mutex_lock(&vgpu->vgpu_lock); in intel_gvt_destroy_idle_vgpu()
362 intel_vgpu_clean_sched_policy(vgpu); in intel_gvt_destroy_idle_vgpu()
363 mutex_unlock(&vgpu->vgpu_lock); in intel_gvt_destroy_idle_vgpu()
365 vfree(vgpu); in intel_gvt_destroy_idle_vgpu()
372 struct intel_vgpu *vgpu; in __intel_gvt_create_vgpu() local
379 vgpu = vzalloc(sizeof(*vgpu)); in __intel_gvt_create_vgpu()
380 if (!vgpu) in __intel_gvt_create_vgpu()
383 ret = idr_alloc(&gvt->vgpu_idr, vgpu, IDLE_VGPU_IDR + 1, GVT_MAX_VGPU, in __intel_gvt_create_vgpu()
388 vgpu->id = ret; in __intel_gvt_create_vgpu()
389 vgpu->handle = param->handle; in __intel_gvt_create_vgpu()
390 vgpu->gvt = gvt; in __intel_gvt_create_vgpu()
391 vgpu->sched_ctl.weight = param->weight; in __intel_gvt_create_vgpu()
392 mutex_init(&vgpu->vgpu_lock); in __intel_gvt_create_vgpu()
393 mutex_init(&vgpu->dmabuf_lock); in __intel_gvt_create_vgpu()
394 INIT_LIST_HEAD(&vgpu->dmabuf_obj_list_head); in __intel_gvt_create_vgpu()
395 INIT_RADIX_TREE(&vgpu->page_track_tree, GFP_KERNEL); in __intel_gvt_create_vgpu()
396 idr_init(&vgpu->object_idr); in __intel_gvt_create_vgpu()
397 intel_vgpu_init_cfg_space(vgpu, param->primary); in __intel_gvt_create_vgpu()
398 vgpu->d3_entered = false; in __intel_gvt_create_vgpu()
400 ret = intel_vgpu_init_mmio(vgpu); in __intel_gvt_create_vgpu()
404 ret = intel_vgpu_alloc_resource(vgpu, param); in __intel_gvt_create_vgpu()
408 populate_pvinfo_page(vgpu); in __intel_gvt_create_vgpu()
410 ret = intel_gvt_hypervisor_attach_vgpu(vgpu); in __intel_gvt_create_vgpu()
414 ret = intel_vgpu_init_gtt(vgpu); in __intel_gvt_create_vgpu()
418 ret = intel_vgpu_init_opregion(vgpu); in __intel_gvt_create_vgpu()
422 ret = intel_vgpu_init_display(vgpu, param->resolution); in __intel_gvt_create_vgpu()
426 ret = intel_vgpu_setup_submission(vgpu); in __intel_gvt_create_vgpu()
430 ret = intel_vgpu_init_sched_policy(vgpu); in __intel_gvt_create_vgpu()
434 intel_gvt_debugfs_add_vgpu(vgpu); in __intel_gvt_create_vgpu()
436 ret = intel_gvt_hypervisor_set_opregion(vgpu); in __intel_gvt_create_vgpu()
441 ret = intel_gvt_hypervisor_set_edid(vgpu, PORT_B); in __intel_gvt_create_vgpu()
443 ret = intel_gvt_hypervisor_set_edid(vgpu, PORT_D); in __intel_gvt_create_vgpu()
447 return vgpu; in __intel_gvt_create_vgpu()
450 intel_vgpu_clean_sched_policy(vgpu); in __intel_gvt_create_vgpu()
452 intel_vgpu_clean_submission(vgpu); in __intel_gvt_create_vgpu()
454 intel_vgpu_clean_display(vgpu); in __intel_gvt_create_vgpu()
456 intel_vgpu_clean_opregion(vgpu); in __intel_gvt_create_vgpu()
458 intel_vgpu_clean_gtt(vgpu); in __intel_gvt_create_vgpu()
460 intel_gvt_hypervisor_detach_vgpu(vgpu); in __intel_gvt_create_vgpu()
462 intel_vgpu_free_resource(vgpu); in __intel_gvt_create_vgpu()
464 intel_vgpu_clean_mmio(vgpu); in __intel_gvt_create_vgpu()
466 idr_remove(&gvt->vgpu_idr, vgpu->id); in __intel_gvt_create_vgpu()
468 vfree(vgpu); in __intel_gvt_create_vgpu()
486 struct intel_vgpu *vgpu; in intel_gvt_create_vgpu() local
501 vgpu = __intel_gvt_create_vgpu(gvt, &param); in intel_gvt_create_vgpu()
502 if (!IS_ERR(vgpu)) in intel_gvt_create_vgpu()
507 return vgpu; in intel_gvt_create_vgpu()
538 void intel_gvt_reset_vgpu_locked(struct intel_vgpu *vgpu, bool dmlr, in intel_gvt_reset_vgpu_locked() argument
541 struct intel_gvt *gvt = vgpu->gvt; in intel_gvt_reset_vgpu_locked()
547 vgpu->id, dmlr, engine_mask); in intel_gvt_reset_vgpu_locked()
549 vgpu->resetting_eng = resetting_eng; in intel_gvt_reset_vgpu_locked()
551 intel_vgpu_stop_schedule(vgpu); in intel_gvt_reset_vgpu_locked()
557 mutex_unlock(&vgpu->vgpu_lock); in intel_gvt_reset_vgpu_locked()
558 intel_gvt_wait_vgpu_idle(vgpu); in intel_gvt_reset_vgpu_locked()
559 mutex_lock(&vgpu->vgpu_lock); in intel_gvt_reset_vgpu_locked()
562 intel_vgpu_reset_submission(vgpu, resetting_eng); in intel_gvt_reset_vgpu_locked()
565 intel_vgpu_select_submission_ops(vgpu, ALL_ENGINES, 0); in intel_gvt_reset_vgpu_locked()
567 intel_vgpu_invalidate_ppgtt(vgpu); in intel_gvt_reset_vgpu_locked()
570 if(!vgpu->d3_entered) { in intel_gvt_reset_vgpu_locked()
571 intel_vgpu_invalidate_ppgtt(vgpu); in intel_gvt_reset_vgpu_locked()
572 intel_vgpu_destroy_all_ppgtt_mm(vgpu); in intel_gvt_reset_vgpu_locked()
574 intel_vgpu_reset_ggtt(vgpu, true); in intel_gvt_reset_vgpu_locked()
575 intel_vgpu_reset_resource(vgpu); in intel_gvt_reset_vgpu_locked()
578 intel_vgpu_reset_mmio(vgpu, dmlr); in intel_gvt_reset_vgpu_locked()
579 populate_pvinfo_page(vgpu); in intel_gvt_reset_vgpu_locked()
582 intel_vgpu_reset_display(vgpu); in intel_gvt_reset_vgpu_locked()
583 intel_vgpu_reset_cfg_space(vgpu); in intel_gvt_reset_vgpu_locked()
585 vgpu->failsafe = false; in intel_gvt_reset_vgpu_locked()
590 if(vgpu->d3_entered) in intel_gvt_reset_vgpu_locked()
591 vgpu->d3_entered = false; in intel_gvt_reset_vgpu_locked()
593 vgpu->pv_notified = false; in intel_gvt_reset_vgpu_locked()
597 vgpu->resetting_eng = 0; in intel_gvt_reset_vgpu_locked()
598 gvt_dbg_core("reset vgpu%d done\n", vgpu->id); in intel_gvt_reset_vgpu_locked()
609 void intel_gvt_reset_vgpu(struct intel_vgpu *vgpu) in intel_gvt_reset_vgpu() argument
611 mutex_lock(&vgpu->vgpu_lock); in intel_gvt_reset_vgpu()
612 intel_gvt_reset_vgpu_locked(vgpu, true, 0); in intel_gvt_reset_vgpu()
613 mutex_unlock(&vgpu->vgpu_lock); in intel_gvt_reset_vgpu()