1 // SPDX-License-Identifier: MIT 2 /* 3 * Copyright(c) 2020 Intel Corporation. 4 */ 5 6 #include "intel_pxp.h" 7 #include "intel_pxp_irq.h" 8 #include "intel_pxp_pm.h" 9 #include "intel_pxp_session.h" 10 #include "i915_drv.h" 11 intel_pxp_suspend_prepare(struct intel_pxp * pxp)12void intel_pxp_suspend_prepare(struct intel_pxp *pxp) 13 { 14 if (!intel_pxp_is_enabled(pxp)) 15 return; 16 17 pxp->arb_is_valid = false; 18 19 intel_pxp_invalidate(pxp); 20 } 21 intel_pxp_suspend(struct intel_pxp * pxp)22void intel_pxp_suspend(struct intel_pxp *pxp) 23 { 24 intel_wakeref_t wakeref; 25 26 if (!intel_pxp_is_enabled(pxp)) 27 return; 28 29 with_intel_runtime_pm(&pxp_to_gt(pxp)->i915->runtime_pm, wakeref) { 30 intel_pxp_fini_hw(pxp); 31 pxp->hw_state_invalidated = false; 32 } 33 } 34 intel_pxp_resume(struct intel_pxp * pxp)35void intel_pxp_resume(struct intel_pxp *pxp) 36 { 37 if (!intel_pxp_is_enabled(pxp)) 38 return; 39 40 /* 41 * The PXP component gets automatically unbound when we go into S3 and 42 * re-bound after we come out, so in that scenario we can defer the 43 * hw init to the bind call. 44 */ 45 if (!pxp->pxp_component) 46 return; 47 48 intel_pxp_init_hw(pxp); 49 } 50 intel_pxp_runtime_suspend(struct intel_pxp * pxp)51void intel_pxp_runtime_suspend(struct intel_pxp *pxp) 52 { 53 if (!intel_pxp_is_enabled(pxp)) 54 return; 55 56 pxp->arb_is_valid = false; 57 58 intel_pxp_fini_hw(pxp); 59 60 pxp->hw_state_invalidated = false; 61 } 62