Skip to content

Commit

Permalink
drm/i915/pxp/mtl: intel_pxp_init_hw needs runtime-pm inside pm-complete
Browse files Browse the repository at this point in the history
In the case of failed suspend flow or cases where the kernel does not go
into full suspend but goes from suspend_prepare back to resume_complete,
we get called for a pm_complete but without runtime_pm guaranteed.

Thus, ensure we take the runtime_pm when calling intel_pxp_init_hw
from within intel_pxp_resume_complete.

v2: resume_complete and runtime_resume should abstract a common
    helper with different wakeref requirements. (Daniele)

Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com>
Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230802190611.1639371-1-alan.previn.teres.alexis@intel.com
  • Loading branch information
Alan Previn authored and Daniele Ceraolo Spurio committed Aug 15, 2023
1 parent 95c23e2 commit ac765b7
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 3 deletions.
18 changes: 17 additions & 1 deletion drivers/gpu/drm/i915/pxp/intel_pxp_pm.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,10 @@ void intel_pxp_suspend(struct intel_pxp *pxp)
}
}

void intel_pxp_resume_complete(struct intel_pxp *pxp)
static void _pxp_resume(struct intel_pxp *pxp, bool take_wakeref)
{
intel_wakeref_t wakeref;

if (!intel_pxp_is_enabled(pxp))
return;

Expand All @@ -48,7 +50,21 @@ void intel_pxp_resume_complete(struct intel_pxp *pxp)
if (!HAS_ENGINE(pxp->ctrl_gt, GSC0) && !pxp->pxp_component)
return;

if (take_wakeref)
wakeref = intel_runtime_pm_get(&pxp->ctrl_gt->i915->runtime_pm);
intel_pxp_init_hw(pxp);
if (take_wakeref)
intel_runtime_pm_put(&pxp->ctrl_gt->i915->runtime_pm, wakeref);
}

void intel_pxp_resume_complete(struct intel_pxp *pxp)
{
_pxp_resume(pxp, true);
}

void intel_pxp_runtime_resume(struct intel_pxp *pxp)
{
_pxp_resume(pxp, false);
}

void intel_pxp_runtime_suspend(struct intel_pxp *pxp)
Expand Down
5 changes: 3 additions & 2 deletions drivers/gpu/drm/i915/pxp/intel_pxp_pm.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ void intel_pxp_suspend_prepare(struct intel_pxp *pxp);
void intel_pxp_suspend(struct intel_pxp *pxp);
void intel_pxp_resume_complete(struct intel_pxp *pxp);
void intel_pxp_runtime_suspend(struct intel_pxp *pxp);
void intel_pxp_runtime_resume(struct intel_pxp *pxp);
#else
static inline void intel_pxp_suspend_prepare(struct intel_pxp *pxp)
{
Expand All @@ -29,9 +30,9 @@ static inline void intel_pxp_resume_complete(struct intel_pxp *pxp)
static inline void intel_pxp_runtime_suspend(struct intel_pxp *pxp)
{
}
#endif

static inline void intel_pxp_runtime_resume(struct intel_pxp *pxp)
{
intel_pxp_resume_complete(pxp);
}
#endif
#endif /* __INTEL_PXP_PM_H__ */

0 comments on commit ac765b7

Please sign in to comment.