From: Jani Nikula <jani.nikula@linux.intel.com>
To: Ville Syrjala <ville.syrjala@linux.intel.com>,
intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 3/4] drm/i915: Extract i915gm_irq_cstate_wa_{disable, enable}()
Date: Wed, 02 Oct 2024 13:37:11 +0300 [thread overview]
Message-ID: <87o742u6y0.fsf@intel.com> (raw)
In-Reply-To: <20241001195803.3371-4-ville.syrjala@linux.intel.com>
On Tue, 01 Oct 2024, Ville Syrjala <ville.syrjala@linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
>
> Extract the i915gm/i945gm vblank irq C-state workaround to
> separate functions. We'll need to reuse these in order to
> guarantee timely CRC interrupt delivery as well.
>
> The irq.vblank_enabled count is currently protected by the
> drm vblanl locks, so let's assert that the innermost of those
*vblank
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> is held, in anticipation of other callers.
>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
> .../gpu/drm/i915/display/intel_display_irq.c | 34 +++++++++++++------
> 1 file changed, 24 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.c b/drivers/gpu/drm/i915/display/intel_display_irq.c
> index 43a0b3565bc8..feeb3a29972a 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_irq.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_irq.c
> @@ -1259,6 +1259,28 @@ void gen11_display_irq_handler(struct drm_i915_private *i915)
> enable_rpm_wakeref_asserts(&i915->runtime_pm);
> }
>
> +static void i915gm_irq_cstate_wa_enable(struct drm_i915_private *i915)
> +{
> + lockdep_assert_held(&i915->drm.vblank_time_lock);
> +
> + /*
> + * Vblank interrupts fail to wake the device up from C2+.
> + * Disabling render clock gating during C-states avoids
> + * the problem. There is a small power cost so we do this
> + * only when vblank interrupts are actually enabled.
> + */
> + if (i915->display.irq.vblank_enabled++ == 0)
> + intel_uncore_write(&i915->uncore, SCPD0, _MASKED_BIT_ENABLE(CSTATE_RENDER_CLOCK_GATE_DISABLE));
> +}
> +
> +static void i915gm_irq_cstate_wa_disable(struct drm_i915_private *i915)
> +{
> + lockdep_assert_held(&i915->drm.vblank_time_lock);
> +
> + if (--i915->display.irq.vblank_enabled == 0)
> + intel_uncore_write(&i915->uncore, SCPD0, _MASKED_BIT_DISABLE(CSTATE_RENDER_CLOCK_GATE_DISABLE));
> +}
> +
> int i8xx_enable_vblank(struct drm_crtc *crtc)
> {
> struct drm_i915_private *dev_priv = to_i915(crtc->dev);
> @@ -1287,14 +1309,7 @@ int i915gm_enable_vblank(struct drm_crtc *crtc)
> {
> struct drm_i915_private *i915 = to_i915(crtc->dev);
>
> - /*
> - * Vblank interrupts fail to wake the device up from C2+.
> - * Disabling render clock gating during C-states avoids
> - * the problem. There is a small power cost so we do this
> - * only when vblank interrupts are actually enabled.
> - */
> - if (i915->display.irq.vblank_enabled++ == 0)
> - intel_uncore_write(&i915->uncore, SCPD0, _MASKED_BIT_ENABLE(CSTATE_RENDER_CLOCK_GATE_DISABLE));
> + i915gm_irq_cstate_wa_enable(i915);
>
> return i8xx_enable_vblank(crtc);
> }
> @@ -1305,8 +1320,7 @@ void i915gm_disable_vblank(struct drm_crtc *crtc)
>
> i8xx_disable_vblank(crtc);
>
> - if (--i915->display.irq.vblank_enabled == 0)
> - intel_uncore_write(&i915->uncore, SCPD0, _MASKED_BIT_DISABLE(CSTATE_RENDER_CLOCK_GATE_DISABLE));
> + i915gm_irq_cstate_wa_disable(i915);
> }
>
> int i965_enable_vblank(struct drm_crtc *crtc)
--
Jani Nikula, Intel
next prev parent reply other threads:[~2024-10-02 10:37 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-01 19:57 [PATCH 0/4] drm/i915: Vblank/CRC irq stuf Ville Syrjala
2024-10-01 19:58 ` [PATCH 1/4] drm/i915/irq: Nuke stale comments Ville Syrjala
2024-10-02 10:34 ` Jani Nikula
2024-10-01 19:58 ` [PATCH 2/4] drm/i915/irq: Pair up the vblank enable/disable functions Ville Syrjala
2024-10-02 10:36 ` Jani Nikula
2024-10-01 19:58 ` [PATCH 3/4] drm/i915: Extract i915gm_irq_cstate_wa_{disable, enable}() Ville Syrjala
2024-10-02 10:37 ` Jani Nikula [this message]
2024-10-01 19:58 ` [PATCH 4/4] drm/i915: Apply the i915gm/i945gm irq C-state w/a to CRC interrupts Ville Syrjala
2024-10-02 10:46 ` Jani Nikula
2024-10-02 2:08 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915: Vblank/CRC irq stuf Patchwork
2024-10-02 2:59 ` ✓ Fi.CI.BAT: success " Patchwork
2024-10-03 1:29 ` ✗ Fi.CI.IGT: failure " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87o742u6y0.fsf@intel.com \
--to=jani.nikula@linux.intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=ville.syrjala@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.