From: Jani Nikula <jani.nikula@intel.com>
To: Animesh Manna <animesh.manna@intel.com>,
intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
Cc: uma.shankar@intel.com, dibin.moolakadan.subrahmanian@intel.com,
ville.syrjala@linux.intel.com,
Animesh Manna <animesh.manna@intel.com>
Subject: Re: [PATCH v8 15/20] drm/i915/cmtg: Add CMTG interrupt handling
Date: Wed, 10 Jun 2026 14:35:40 +0300 [thread overview]
Message-ID: <dbf952c2fa43d7313a99b8ee79ef0194a522e0cc@intel.com> (raw)
In-Reply-To: <20260603195416.91639-16-animesh.manna@intel.com>
On Thu, 04 Jun 2026, Animesh Manna <animesh.manna@intel.com> wrote:
> Add support for the CMTG vblank interrupt, which is delivered
> through the DE port interrupt block. Enable/disable the interrupt
> via the DE port IMR around CMTG enable/disable, and dispatch the
> CMTG_VBLANK_{A,B} bits to the corresponding pipe vblank handler in
> the gen8 DE IRQ handler.
>
> Wired up for DISPLAY_VER 35. The CMTG interrupt is not enabled via
> IER today because CMTG is brought up together with the eDP
> transcoder; this can be revisited later.
>
> v2:
> - Use consistent DC3co check as used in earlier patches. [Uma]
> - Use else-if instead of separate if block. [Uma]
> - Merge mask and unmask function as it is similar. [Uma]
> - Modify DISPLAY_VER() check. [Uma]
>
> v3:
> - Enable only vblank interrupt. [Dibin]
>
> Signed-off-by: Animesh Manna <animesh.manna@intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_cmtg.c | 47 +++++++++++++++++++
> drivers/gpu/drm/i915/display/intel_cmtg.h | 2 +
> .../gpu/drm/i915/display/intel_display_irq.c | 12 +++++
> .../gpu/drm/i915/display/intel_display_regs.h | 2 +
> 4 files changed, 63 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_cmtg.c b/drivers/gpu/drm/i915/display/intel_cmtg.c
> index 20b74c2856c4..fb57fa41f721 100644
> --- a/drivers/gpu/drm/i915/display/intel_cmtg.c
> +++ b/drivers/gpu/drm/i915/display/intel_cmtg.c
> @@ -13,6 +13,7 @@
> #include "intel_crtc.h"
> #include "intel_de.h"
> #include "intel_display_device.h"
> +#include "intel_display_irq.h"
> #include "intel_display_power.h"
> #include "intel_display_regs.h"
> #include "intel_display_types.h"
> @@ -353,3 +354,49 @@ void intel_cmtg_enable_ddi(const struct intel_crtc_state *crtc_state)
> crtc->cmtg.enabled = true;
> drm_dbg_kms(display->drm, "CMTG: %s enabled\n", transcoder_name(cpu_transcoder));
> }
> +
> +static void intel_cmtg_mask_interrupt(const struct intel_crtc_state *crtc_state, bool mask)
> +{
> + struct intel_display *display = to_intel_display(crtc_state);
> + enum transcoder cpu_transcoder = crtc_state->cpu_transcoder;
> + u32 interrupt_mask = 0;
> +
> + if (cpu_transcoder == TRANSCODER_A)
> + interrupt_mask = CMTG_VBLANK_A;
> + else if (cpu_transcoder == TRANSCODER_B)
> + interrupt_mask = CMTG_VBLANK_B;
> +
> + if (mask)
> + bdw_update_port_irq(display, interrupt_mask, 0);
> + else
> + bdw_update_port_irq(display, interrupt_mask, interrupt_mask);
Not a fan of using these directly in more places. The direction should
be for more abstractions.
> +}
> +
> +void intel_cmtg_enable_interrupt(const struct intel_crtc_state *crtc_state)
> +{
> + struct intel_display *display = to_intel_display(crtc_state);
> +
> + if (!intel_cmtg_is_allowed(crtc_state))
> + return;
> +
> + /*
> + * TODO: Currently cmtg is enabled along with eDP transcoder so cmtg
> + * interrupt is not enabled through IER, need to do some fine
> + * tuning in future.
> + */
> + spin_lock_irq(&display->irq.lock);
> + intel_cmtg_mask_interrupt(crtc_state, false);
> + spin_unlock_irq(&display->irq.lock);
> +}
> +
> +void intel_cmtg_disable_interrupt(const struct intel_crtc_state *crtc_state)
> +{
> + struct intel_display *display = to_intel_display(crtc_state);
> +
> + if (!intel_cmtg_is_allowed(crtc_state))
> + return;
> +
> + spin_lock_irq(&display->irq.lock);
> + intel_cmtg_mask_interrupt(crtc_state, true);
> + spin_unlock_irq(&display->irq.lock);
Ditto with display->irq.lock usage, the direction should be to limit to
fewer places.
> +}
> diff --git a/drivers/gpu/drm/i915/display/intel_cmtg.h b/drivers/gpu/drm/i915/display/intel_cmtg.h
> index 79785afccc51..8fcb44d6398f 100644
> --- a/drivers/gpu/drm/i915/display/intel_cmtg.h
> +++ b/drivers/gpu/drm/i915/display/intel_cmtg.h
> @@ -21,5 +21,7 @@ void intel_cmtg_set_timings(const struct intel_crtc_state *crtc_state, bool lrr)
> void intel_cmtg_set_clk_select(const struct intel_crtc_state *crtc_state);
> void intel_cmtg_sanitize(struct intel_display *display);
> bool intel_cmtg_is_allowed(const struct intel_crtc_state *crtc_state);
> +void intel_cmtg_enable_interrupt(const struct intel_crtc_state *crtc_state);
> +void intel_cmtg_disable_interrupt(const struct intel_crtc_state *crtc_state);
>
> #endif /* __INTEL_CMTG_H__ */
> diff --git a/drivers/gpu/drm/i915/display/intel_display_irq.c b/drivers/gpu/drm/i915/display/intel_display_irq.c
> index 4a821b0674fd..7ad722024c87 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_irq.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_irq.c
> @@ -1469,6 +1469,18 @@ static void gen8_de_irq_handler(struct intel_display *display, u32 master_ctl)
> found = true;
> }
>
> + if (DISPLAY_VER(display) == 35) {
> + if (iir & (CMTG_VBLANK_A)) {
> + intel_handle_vblank(display, PIPE_A);
> + found = true;
> + }
> +
> + if (iir & (CMTG_VBLANK_B)) {
> + intel_handle_vblank(display, PIPE_B);
> + found = true;
> + }
> + }
> +
> if (DISPLAY_VER(display) >= 11) {
> u32 te_trigger = iir & (DSI0_TE | DSI1_TE);
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_regs.h b/drivers/gpu/drm/i915/display/intel_display_regs.h
> index 4321f8b529da..fe851fe39222 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_regs.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_regs.h
> @@ -1458,6 +1458,8 @@
> #define GEN9_AUX_CHANNEL_B (1 << 25)
> #define DSI1_TE (1 << 24)
> #define DSI0_TE (1 << 23)
> +#define CMTG_VBLANK_B (1 << 17)
> +#define CMTG_VBLANK_A (1 << 14)
> #define GEN8_DE_PORT_HOTPLUG(hpd_pin) REG_BIT(3 + _HPD_PIN_DDI(hpd_pin))
> #define BXT_DE_PORT_HOTPLUG_MASK (GEN8_DE_PORT_HOTPLUG(HPD_PORT_A) | \
> GEN8_DE_PORT_HOTPLUG(HPD_PORT_B) | \
--
Jani Nikula, Intel
next prev parent reply other threads:[~2026-06-10 11:35 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-03 19:53 [PATCH v8 00/20] CMTG enablement Animesh Manna
2026-06-03 19:53 ` [PATCH v8 01/20] drm/i915/cmtg: Add intel_cmtg_is_allowed() for CMTG Animesh Manna
2026-06-10 5:17 ` Shankar, Uma
2026-06-10 5:26 ` Shankar, Uma
2026-06-03 19:53 ` [PATCH v8 02/20] drm/i915/cmtg: Set CMTG clock select Animesh Manna
2026-06-10 5:18 ` Shankar, Uma
2026-06-03 19:53 ` [PATCH v8 03/20] drm/i915/cmtg: Add CMTG transcoder offset in struct _device_info Animesh Manna
2026-06-10 5:20 ` Shankar, Uma
2026-06-03 19:54 ` [PATCH v8 04/20] drm/i915/display: Pass target transcoder to intel_set_transcoder_timings() Animesh Manna
2026-06-11 5:45 ` Shankar, Uma
2026-06-11 8:09 ` Ville Syrjälä
2026-06-03 19:54 ` [PATCH v8 05/20] drm/i915/display: Skip DP_MIN_HBLANK_CTL programming for CMTG transcoders Animesh Manna
2026-06-11 6:02 ` Shankar, Uma
2026-06-03 19:54 ` [PATCH v8 06/20] drm/i915/display: Pass transcoder to intel_set_transcoder_timings_lrr() Animesh Manna
2026-06-11 6:08 ` Shankar, Uma
2026-06-03 19:54 ` [PATCH v8 07/20] drm/i915/cmtg: Set timings for CMTG by using transcoder timing helpers Animesh Manna
2026-06-11 16:39 ` Shankar, Uma
2026-06-03 19:54 ` [PATCH v8 08/20] drm/i915/vrr: Pass transcoder to intel_vrr_set_fixed_rr_timings() Animesh Manna
2026-06-10 11:32 ` Jani Nikula
2026-06-11 16:42 ` Shankar, Uma
2026-06-03 19:54 ` [PATCH v8 09/20] drm/i915/cmtg: Program VRR fixed-rate timings for CMTG transcoder Animesh Manna
2026-06-11 17:36 ` Shankar, Uma
2026-06-03 19:54 ` [PATCH v8 10/20] drm/i915/cmtg: Program VRR control register " Animesh Manna
2026-06-11 17:40 ` Shankar, Uma
2026-06-03 19:54 ` [PATCH v8 11/20] drm/i915/cmtg: Set link M/N " Animesh Manna
2026-06-03 19:54 ` [PATCH v8 12/20] drm/i915/cmtg: Add hook to enable CMTG with sync to port Animesh Manna
2026-06-03 19:54 ` [PATCH v8 13/20] drm/i915/cmtg: Add a hook to make eDP transcoder secondary Animesh Manna
2026-06-03 19:54 ` [PATCH v8 14/20] drm/i915/cmtg: Modify existing hook to disable CMTG Animesh Manna
2026-06-11 17:56 ` Shankar, Uma
2026-06-03 19:54 ` [PATCH v8 15/20] drm/i915/cmtg: Add CMTG interrupt handling Animesh Manna
2026-06-10 11:35 ` Jani Nikula [this message]
2026-06-11 18:08 ` Shankar, Uma
2026-06-03 19:54 ` [PATCH v8 16/20] drm/i915/cmtg: Add CMTG HWGB programming Animesh Manna
2026-06-11 18:18 ` Shankar, Uma
2026-06-03 19:54 ` [PATCH v8 17/20] drm/i915/cmtg: Add CMTG scan line programming Animesh Manna
2026-06-11 18:20 ` Shankar, Uma
2026-06-03 19:54 ` [PATCH v8 18/20] drm/i915/cmtg: Add trigger to enable/disable cmtg Animesh Manna
2026-06-11 18:27 ` Shankar, Uma
2026-06-03 19:54 ` [PATCH v8 19/20] drm/i915/cmtg: Restore CMTG after DC6 exit Animesh Manna
2026-06-11 18:37 ` Shankar, Uma
2026-06-03 19:54 ` [PATCH v8 20/20] Debug patch Animesh Manna
2026-06-03 21:25 ` ✓ CI.KUnit: success for CMTG enablement (rev9) Patchwork
2026-06-03 22:24 ` ✓ Xe.CI.BAT: " Patchwork
2026-06-03 22:30 ` ✓ i915.CI.BAT: success for CMTG enablement (rev8) Patchwork
2026-06-04 12:54 ` ✓ Xe.CI.FULL: success for CMTG enablement (rev9) Patchwork
2026-06-04 21:11 ` ✗ i915.CI.Full: failure for CMTG enablement (rev8) 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=dbf952c2fa43d7313a99b8ee79ef0194a522e0cc@intel.com \
--to=jani.nikula@intel.com \
--cc=animesh.manna@intel.com \
--cc=dibin.moolakadan.subrahmanian@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=uma.shankar@intel.com \
--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.