Skip to content

Commit e1a4e3c

Browse files
committed
drm/i915/dmc: Also disable HRR event on TGL/ADLS main DMC
Unlike later platforms TGL/ADLS has the half refresh rate (HRR) event on the main DMC (as opposed to the pipe DMC). Since we're disabling that event on all later platforms already let's do the same on TGL/ADLS as well. There is supposedly a bit somewhere (DMC_CHICKEN on TGL) to make the handler not do anything, but we don't currently have code to frob it. Though that bit should be off by default, the ADL+ experience has shown us that trusting any of this isn't a good idea. So seems safer to just disable all event handlers we know that we don't need. Also the TGL/ADLS DMC firmware is apparently using the wrong event (undelayed vblank) here anyway. It should be using the delayed vblank event instead (like ADL+ firmware does), but they didn't release a firmware fix for this and instead just hacked around this in the Windows driver code :/ v2: Also disable the event on ADLS (Imre) Cc: Imre Deak <imre.deak@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20231213150807.21331-1-ville.syrjala@linux.intel.com Reviewed-by: Imre Deak <imre.deak@intel.com>
1 parent be2fce7 commit e1a4e3c

File tree

2 files changed

+6
-0
lines changed

2 files changed

+6
-0
lines changed

drivers/gpu/drm/i915/display/intel_dmc.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,11 @@ static bool disable_dmc_evt(struct drm_i915_private *i915,
448448
REG_FIELD_GET(DMC_EVT_CTL_EVENT_ID_MASK, data) == DMC_EVT_CTL_EVENT_ID_CLK_MSEC)
449449
return true;
450450

451+
/* also disable the HRR event on the main DMC on TGL/ADLS */
452+
if ((IS_TIGERLAKE(i915) || IS_ALDERLAKE_S(i915)) &&
453+
REG_FIELD_GET(DMC_EVT_CTL_EVENT_ID_MASK, data) == DMC_EVT_CTL_EVENT_ID_VBLANK_A)
454+
return true;
455+
451456
return false;
452457
}
453458

drivers/gpu/drm/i915/display/intel_dmc_regs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060

6161
#define DMC_EVT_CTL_EVENT_ID_MASK REG_GENMASK(15, 8)
6262
#define DMC_EVT_CTL_EVENT_ID_FALSE 0x01
63+
#define DMC_EVT_CTL_EVENT_ID_VBLANK_A 0x32 /* main DMC */
6364
/* An event handler scheduled to run at a 1 kHz frequency. */
6465
#define DMC_EVT_CTL_EVENT_ID_CLK_MSEC 0xbf
6566

0 commit comments

Comments
 (0)