[PATCH v6 16/17] drm/i915/display: Add function to configure PIPEDMC_EVT_CTL
Nautiyal, Ankit K
ankit.k.nautiyal at intel.com
Wed Jun 4 09:36:54 UTC 2025
On 6/4/2025 1:05 AM, Mitul Golani wrote:
> Configure PIPEDMC_EVT_CTL_3 register with required event flags.
>
> Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani at intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dmc.c | 20 ++++++++++++++++++++
> drivers/gpu/drm/i915/display/intel_dmc.h | 2 ++
> drivers/gpu/drm/i915/display/intel_vrr.c | 8 ++++++--
> 3 files changed, 28 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dmc.c b/drivers/gpu/drm/i915/display/intel_dmc.c
> index 13652dd1ed2a..7c55334814e7 100644
> --- a/drivers/gpu/drm/i915/display/intel_dmc.c
> +++ b/drivers/gpu/drm/i915/display/intel_dmc.c
> @@ -618,6 +618,26 @@ void intel_dmc_block_pkgc(struct intel_display *display, enum pipe pipe,
> PIPEDMC_BLOCK_PKGC_SW_BLOCK_PKGC_ALWAYS : 0);
> }
>
> +void intel_dmc_configure_dc_balance_ctl_regs(struct intel_display *display,
> + enum pipe pipe, bool enable)
> +{
> + u32 val;
> +
> + if (enable)
> + val = DMC_EVT_CTL_ENABLE | DMC_EVT_CTL_RECURRING |
> + REG_FIELD_PREP(DMC_EVT_CTL_TYPE_MASK,
> + DMC_EVT_CTL_TYPE_EDGE_0_1) |
> + REG_FIELD_PREP(DMC_EVT_CTL_EVENT_ID_MASK,
> + PIPEDMC_EVENT_ADAPTIVE_DCB_TRIGGER);
> + else
> + val = REG_FIELD_PREP(DMC_EVT_CTL_EVENT_ID_MASK,
> + DMC_EVENT_FALSE) |
> + REG_FIELD_PREP(DMC_EVT_CTL_TYPE_MASK,
> + DMC_EVT_CTL_TYPE_EDGE_0_1);
Do we need to set bit DMC_EVT_CTL_TYPE_EDGE_0_1 for both enable/disable
case.
If we do then perhaps `val` can be initialized with this value.
Regards,
Ankit
> +
> + intel_de_write(display, PIPEDMC_EVT_CTL_3(pipe), val);
> +}
> +
> /**
> * intel_dmc_start_pkgc_exit_at_start_of_undelayed_vblank() - start of PKG
> * C-state exit
> diff --git a/drivers/gpu/drm/i915/display/intel_dmc.h b/drivers/gpu/drm/i915/display/intel_dmc.h
> index 12912e80bbc6..e7a46e00caf1 100644
> --- a/drivers/gpu/drm/i915/display/intel_dmc.h
> +++ b/drivers/gpu/drm/i915/display/intel_dmc.h
> @@ -22,6 +22,8 @@ void intel_dmc_enable_pipe(struct intel_display *display, enum pipe pipe);
> void intel_dmc_disable_pipe(struct intel_display *display, enum pipe pipe);
> void intel_dmc_block_pkgc(struct intel_display *display, enum pipe pipe,
> bool block);
> +void intel_dmc_configure_dc_balance_ctl_regs(struct intel_display *display,
> + enum pipe pipe, bool enable);
> void intel_dmc_start_pkgc_exit_at_start_of_undelayed_vblank(struct intel_display *display,
> enum pipe pipe, bool enable);
> void intel_dmc_fini(struct intel_display *display);
> diff --git a/drivers/gpu/drm/i915/display/intel_vrr.c b/drivers/gpu/drm/i915/display/intel_vrr.c
> index 9cc6898399e4..068fa7e792ed 100644
> --- a/drivers/gpu/drm/i915/display/intel_vrr.c
> +++ b/drivers/gpu/drm/i915/display/intel_vrr.c
> @@ -687,8 +687,10 @@ void intel_vrr_enable(const struct intel_crtc_state *crtc_state)
>
> intel_de_write(display, TRANS_VRR_CTL(display, cpu_transcoder), ctl);
>
> - if (crtc_state->vrr.dc_balance.enable)
> + if (crtc_state->vrr.dc_balance.enable) {
> + intel_dmc_configure_dc_balance_ctl_regs(display, pipe, true);
> intel_pipedmc_dcb_enable(NULL, crtc);
> + }
> }
>
> void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> @@ -702,8 +704,10 @@ void intel_vrr_disable(const struct intel_crtc_state *old_crtc_state)
> if (!old_crtc_state->vrr.enable)
> return;
>
> - if (old_crtc_state->vrr.dc_balance.enable)
> + if (old_crtc_state->vrr.dc_balance.enable) {
> intel_pipedmc_dcb_disable(NULL, crtc);
> + intel_dmc_configure_dc_balance_ctl_regs(display, pipe, false);
> + }
>
> ctl = trans_vrr_ctl(old_crtc_state);
> if (intel_vrr_always_use_vrr_tg(display))
More information about the Intel-xe
mailing list