/* if we're suspended the session is considered off */
with_intel_runtime_pm_if_in_use(uncore->rpm, wakeref)
sip = intel_uncore_read(uncore, KCR_SIP(pxp->kcr_base));
/* if we're suspended the session is considered off */
wakeref = intel_runtime_pm_get_if_in_use(uncore->rpm); if (!wakeref) return in_play ? -ENODEV : 0;
if (intel_pxp_session_is_in_play(pxp, ARB_SESSION)) {
drm_err(>->i915->drm, "arb session already in play at creation time\n"); return -EEXIST;
}
if (HAS_ENGINE(pxp->ctrl_gt, GSC0))
ret = intel_pxp_gsccs_create_session(pxp, ARB_SESSION); else
ret = intel_pxp_tee_cmd_create_arb_session(pxp, ARB_SESSION); if (ret) {
drm_err(>->i915->drm, "tee cmd for arb session creation failed\n"); return ret;
}
ret = pxp_wait_for_session_state(pxp, ARB_SESSION, true); if (ret) {
drm_dbg(>->i915->drm, "arb session failed to go in play\n"); return ret;
}
drm_dbg(>->i915->drm, "PXP ARB session is alive\n");
/* * if we fail to submit the termination there is no point in waiting for * it to complete. PXP will be marked as non-active until the next * termination is issued.
*/
ret = pxp_terminate_arb_session_and_global(pxp); if (ret)
complete_all(&pxp->termination);
}
staticvoid pxp_terminate_complete(struct intel_pxp *pxp)
{ /* Re-create the arb session after teardown handle complete */ if (fetch_and_zero(&pxp->hw_state_invalidated)) {
drm_dbg(&pxp->ctrl_gt->i915->drm, "PXP: creating arb_session after invalidation");
pxp_create_arb_session(pxp);
}
if (events & PXP_INVAL_REQUIRED)
intel_pxp_invalidate(pxp);
/* * If we're processing an event while suspending then don't bother, * we're going to re-init everything on resume anyway.
*/
wakeref = intel_runtime_pm_get_if_in_use(gt->uncore->rpm); if (!wakeref) return;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.