On Tue, 09 Dec 2025, Dibin Moolakadan Subrahmanian
<[email protected]> wrote:
> Introduce a new helper that validates whether DC3CO can be enabled
> based on both allow and source.
>
> Signed-off-by: Dibin Moolakadan Subrahmanian
> <[email protected]>
> ---
> drivers/gpu/drm/i915/display/intel_display.c | 11 ++++++++++-
> drivers/gpu/drm/i915/display/intel_display.h | 1 +
> drivers/gpu/drm/i915/display/intel_psr.c | 2 +-
> 3 files changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c
> b/drivers/gpu/drm/i915/display/intel_display.c
> index b14a1c9f80bd..9f9ba58371ab 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -6295,6 +6295,15 @@ static int intel_joiner_add_affected_crtcs(struct
> intel_atomic_state *state)
> return 0;
> }
>
> +bool intel_dc3co_can_enable(struct intel_display *display)
> +{
> + /*
> + * ToDo - Check CMTG enabled
> + * ToDo - Check flipq enabled
> + */
> + return (display->power.dc3co_allow && display->power.dc3co_source);
> +}
> +
This doesn't belong in intel_display.[ch].
> bool intel_dc3co_allowed(struct intel_display *display)
> {
> return display->power.dc3co_allow;
> @@ -7683,7 +7692,7 @@ static void intel_atomic_commit_tail(struct
> intel_atomic_state *state)
> */
> intel_uncore_arm_unclaimed_mmio_detection(&dev_priv->uncore);
> }
> - if (intel_dc3co_allowed(display))
> + if (intel_dc3co_can_enable(display))
> intel_display_power_set_target_dc_state(display,
> DC_STATE_EN_UPTO_DC3CO);
> else
> intel_display_power_set_target_dc_state(display,
> DC_STATE_EN_UPTO_DC6);
> diff --git a/drivers/gpu/drm/i915/display/intel_display.h
> b/drivers/gpu/drm/i915/display/intel_display.h
> index 87bbf1f66209..f704cce4f1d8 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.h
> +++ b/drivers/gpu/drm/i915/display/intel_display.h
> @@ -564,4 +564,5 @@ int intel_crtc_num_joined_pipes(const struct
> intel_crtc_state *crtc_state);
> bool intel_dc3co_allowed(struct intel_display *display);
> void intel_dc3co_source_set(struct intel_display *display, enum
> intel_dc3co_source source);
> void intel_dc3co_source_unset(struct intel_display *display, enum
> intel_dc3co_source source);
> +bool intel_dc3co_can_enable(struct intel_display *display);
> #endif
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c
> b/drivers/gpu/drm/i915/display/intel_psr.c
> index d4c5dc6dcc82..18bf45455ea2 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -3909,7 +3909,7 @@ void intel_psr_notify_vblank_enable_disable(struct
> intel_display *display,
> return;
> }
>
> - if (intel_dc3co_allowed(display))
> + if (intel_dc3co_can_enable(display))
> intel_display_power_set_target_dc_state(display, enable ?
> DC_STATE_DISABLE :
> DC_STATE_EN_UPTO_DC3CO);
> else
--
Jani Nikula, Intel