Lines Matching +full:unlock +full:- +full:keys
1 // SPDX-License-Identifier: MIT
21 * Objects can opt-in to PXP encryption at creation time via the
49 return pxp->ce; in intel_pxp_is_enabled()
54 return pxp->arb_is_valid; in intel_pxp_is_active()
64 intel_uncore_write(gt->uncore, KCR_INIT, in kcr_pxp_enable()
70 intel_uncore_write(gt->uncore, KCR_INIT, in kcr_pxp_disable()
87 engine = gt->engine_class[VIDEO_DECODE_CLASS][i]; in create_vcs_context()
89 GEM_BUG_ON(!engine || engine->class != VIDEO_DECODE_CLASS); in create_vcs_context()
91 ce = intel_engine_create_pinned_context(engine, engine->gt->vm, SZ_4K, in create_vcs_context()
95 drm_err(>->i915->drm, "failed to create VCS ctx for PXP\n"); in create_vcs_context()
99 pxp->ce = ce; in create_vcs_context()
106 intel_engine_destroy_pinned_context(fetch_and_zero(&pxp->ce)); in destroy_vcs_context()
114 if (!HAS_PXP(gt->i915)) in intel_pxp_init()
117 mutex_init(&pxp->tee_mutex); in intel_pxp_init()
124 init_completion(&pxp->termination); in intel_pxp_init()
125 complete_all(&pxp->termination); in intel_pxp_init()
127 mutex_init(&pxp->arb_mutex); in intel_pxp_init()
128 INIT_WORK(&pxp->session_work, intel_pxp_session_work); in intel_pxp_init()
138 drm_info(>->i915->drm, "Protected Xe Path (PXP) protected content support initialized\n"); in intel_pxp_init()
151 pxp->arb_is_valid = false; in intel_pxp_fini()
160 pxp->arb_is_valid = false; in intel_pxp_mark_termination_in_progress()
161 reinit_completion(&pxp->termination); in intel_pxp_mark_termination_in_progress()
172 spin_lock_irq(gt->irq_lock); in pxp_queue_termination()
174 pxp->session_events |= PXP_TERMINATION_REQUEST; in pxp_queue_termination()
175 queue_work(system_unbound_wq, &pxp->session_work); in pxp_queue_termination()
176 spin_unlock_irq(gt->irq_lock); in pxp_queue_termination()
183 mutex_lock(&pxp->tee_mutex); in pxp_component_bound()
184 if (pxp->pxp_component) in pxp_component_bound()
186 mutex_unlock(&pxp->tee_mutex); in pxp_component_bound()
200 return -ENODEV; in intel_pxp_start()
203 return -ENXIO; in intel_pxp_start()
205 mutex_lock(&pxp->arb_mutex); in intel_pxp_start()
207 if (pxp->arb_is_valid) in intel_pxp_start()
208 goto unlock; in intel_pxp_start()
212 if (!wait_for_completion_timeout(&pxp->termination, in intel_pxp_start()
214 ret = -ETIMEDOUT; in intel_pxp_start()
215 goto unlock; in intel_pxp_start()
221 if (!pxp->arb_is_valid) in intel_pxp_start()
222 ret = -EIO; in intel_pxp_start()
224 unlock: in intel_pxp_start()
225 mutex_unlock(&pxp->arb_mutex); in intel_pxp_start()
247 return -ENODEV; in intel_pxp_key_check()
250 return -EINVAL; in intel_pxp_key_check()
252 GEM_BUG_ON(!pxp->key_instance); in intel_pxp_key_check()
260 if (!obj->pxp_key_instance && assign) in intel_pxp_key_check()
261 obj->pxp_key_instance = pxp->key_instance; in intel_pxp_key_check()
263 if (obj->pxp_key_instance != pxp->key_instance) in intel_pxp_key_check()
264 return -ENOEXEC; in intel_pxp_key_check()
271 struct drm_i915_private *i915 = pxp_to_gt(pxp)->i915; in intel_pxp_invalidate()
275 spin_lock_irq(&i915->gem.contexts.lock); in intel_pxp_invalidate()
276 list_for_each_entry_safe(ctx, cn, &i915->gem.contexts.list, link) { in intel_pxp_invalidate()
280 if (!kref_get_unless_zero(&ctx->ref)) in intel_pxp_invalidate()
288 spin_unlock_irq(&i915->gem.contexts.lock); in intel_pxp_invalidate()
292 * quiesced execution or the HW keys are already long gone and in intel_pxp_invalidate()
308 if (ctx->pxp_wakeref) { in intel_pxp_invalidate()
309 intel_runtime_pm_put(&i915->runtime_pm, in intel_pxp_invalidate()
310 ctx->pxp_wakeref); in intel_pxp_invalidate()
311 ctx->pxp_wakeref = 0; in intel_pxp_invalidate()
314 spin_lock_irq(&i915->gem.contexts.lock); in intel_pxp_invalidate()
318 spin_unlock_irq(&i915->gem.contexts.lock); in intel_pxp_invalidate()