> -----Original Message-----
> From: Hogander, Jouni <[email protected]>
> Sent: Friday, 20 March 2026 14.03
> To: [email protected]; [email protected]; 
> [email protected]
> Cc: Kahola, Mika <[email protected]>
> Subject: Re: [PATCH] drm/i915/psr: Fixes for Dell XPS DA14260 quirk
> 
> On Fri, 2026-03-20 at 10:46 +0200, Jani Nikula wrote:
> > On Fri, 20 Mar 2026, Jouni Högander <[email protected]> wrote:
> > > Dell seems to be changing device ID even within same device model.
> > > Due to
> > > this we need to ignore device ID when applying quirk for Dell XPS
> > > 14
> > > DA14260. Do this by adding DEVICE_ID_ANY and assign it to Dell XPS
> > > 14
> > > DA14260 quirk. Also apply the quirk only for eDP Panel Replay.
> > >
> > > Fixes: 45c77d4bf8d4 ("drm/i915/psr: Disable Panel Replay on Dell XPS
> > > 14 DA14260 as a quirk")
> > > Cc: Mika Kahola <[email protected]>

Even though there might be some future work ahead but as a fix this patch looks 
good to me.

Reviewed-by: Mika Kahola <[email protected]>

> > > Signed-off-by: Jouni Högander <[email protected]>
> > > ---
> > >  drivers/gpu/drm/i915/display/intel_psr.c    |  3 ++-
> > >  drivers/gpu/drm/i915/display/intel_quirks.c | 16 ++++++++++------
> > >  drivers/gpu/drm/i915/display/intel_quirks.h |  2 +-
> > >  3 files changed, 13 insertions(+), 8 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/i915/display/intel_psr.c
> > > b/drivers/gpu/drm/i915/display/intel_psr.c
> > > index b319e5bd6274..2f1b48cd8efd 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_psr.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> > > @@ -610,7 +610,8 @@ static void _panel_replay_init_dpcd(struct
> > > intel_dp *intel_dp, struct intel_conn
> > >   if (intel_dp->mst_detect == DRM_DP_MST)
> > >           return;
> > >
> > > - if (intel_has_dpcd_quirk(intel_dp,
> > > QUIRK_DISABLE_PANEL_REPLAY)) {
> > > + if (intel_dp_is_edp(intel_dp) &&
> > > +     intel_has_dpcd_quirk(intel_dp,
> > > QUIRK_DISABLE_EDP_PANEL_REPLAY)) {
> >
> > I'll note that intel_has_dpcd_quirk() could internally limit each
> > quirk for eDP/non-eDP. But that's for future.
> 
> Yeah, there was also comment from Ville to combine all different quirks here 
> and just use these *_*_ANY for everything that is to
> be ignored. I will add reworking this into my todo list.
> 
> BR,
> Jouni Högander
> >
> > BR,
> > Jani.
> >
> > >           drm_dbg_kms(display->drm,
> > >                       "Panel Replay support not currently available for 
> > > this
> > > setup\n");
> > >           return;
> > > diff --git a/drivers/gpu/drm/i915/display/intel_quirks.c
> > > b/drivers/gpu/drm/i915/display/intel_quirks.c
> > > index 8f1bf8f418ec..883f297d4b83 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_quirks.c
> > > +++ b/drivers/gpu/drm/i915/display/intel_quirks.c
> > > @@ -86,11 +86,11 @@ static void quirk_edp_limit_rate_hbr2(struct
> > > intel_display *display)
> > >   drm_info(display->drm, "Applying eDP Limit rate to HBR2 quirk\n");
> > >  }
> > >
> > > -static void quirk_disable_panel_replay(struct intel_dp *intel_dp)
> > > +static void quirk_disable_edp_panel_replay(struct intel_dp
> > > *intel_dp)
> > >  {
> > >   struct intel_display *display =
> > > to_intel_display(intel_dp);
> > >
> > > - intel_set_dpcd_quirk(intel_dp,
> > > QUIRK_DISABLE_PANEL_REPLAY);
> > > + intel_set_dpcd_quirk(intel_dp,
> > > QUIRK_DISABLE_EDP_PANEL_REPLAY);
> > >   drm_info(display->drm, "Applying disable Panel Replay quirk\n");
> > >  }
> > >
> > > @@ -116,6 +116,8 @@ struct intel_dpcd_quirk {
> > >
> > >  #define SINK_DEVICE_ID_ANY       SINK_DEVICE_ID(0, 0, 0, 0, 0, 0)
> > >
> > > +#define DEVICE_ID_ANY            0
> > > +
> > >  /* For systems that don't have a meaningful PCI subdevice/subvendor
> > > ID */
> > >  struct intel_dmi_quirk {
> > >   void (*hook)(struct intel_display *display); @@ -261,11 +263,11 @@
> > > static const struct intel_dpcd_quirk intel_dpcd_quirks[] = {
> > >   },
> > >   /* Dell XPS 14 DA14260 */
> > >   {
> > > -         .device = 0xb080,
> > > +         .device = DEVICE_ID_ANY,
> > >           .subsystem_vendor = 0x1028,
> > >           .subsystem_device = 0x0db9,
> > >           .sink_oui = SINK_OUI(0x00, 0x22, 0xb9),
> > > -         .hook = quirk_disable_panel_replay,
> > > +         .hook = quirk_disable_edp_panel_replay,
> > >   },
> > >  };
> > >
> > > @@ -277,7 +279,8 @@ void intel_init_quirks(struct intel_display
> > > *display)
> > >   for (i = 0; i < ARRAY_SIZE(intel_quirks); i++) {
> > >           struct intel_quirk *q = &intel_quirks[i];
> > >
> > > -         if (d->device == q->device &&
> > > +         if ((d->device == q->device ||
> > > +              q->device == DEVICE_ID_ANY) &&
> > >               (d->subsystem_vendor == q->subsystem_vendor ||
> > >                q->subsystem_vendor == PCI_ANY_ID) &&
> > >               (d->subsystem_device == q->subsystem_device || @@ -300,7
> > > +303,8 @@ void intel_init_dpcd_quirks(struct intel_dp *intel_dp,
> > >   for (i = 0; i < ARRAY_SIZE(intel_dpcd_quirks); i++) {
> > >           const struct intel_dpcd_quirk *q = &intel_dpcd_quirks[i];
> > >
> > > -         if (d->device == q->device &&
> > > +         if ((d->device == q->device ||
> > > +              q->device == DEVICE_ID_ANY) &&
> > >               (d->subsystem_vendor == q->subsystem_vendor ||
> > >                q->subsystem_vendor == PCI_ANY_ID) &&
> > >               (d->subsystem_device == q->subsystem_device || diff --git
> > > a/drivers/gpu/drm/i915/display/intel_quirks.h
> > > b/drivers/gpu/drm/i915/display/intel_quirks.h
> > > index 77e490caed0d..83214eb94b0c 100644
> > > --- a/drivers/gpu/drm/i915/display/intel_quirks.h
> > > +++ b/drivers/gpu/drm/i915/display/intel_quirks.h
> > > @@ -21,7 +21,7 @@ enum intel_quirk_id {
> > >   QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK,
> > >   QUIRK_FW_SYNC_LEN,
> > >   QUIRK_EDP_LIMIT_RATE_HBR2,
> > > - QUIRK_DISABLE_PANEL_REPLAY,
> > > + QUIRK_DISABLE_EDP_PANEL_REPLAY,
> > >  };
> > >
> > >  void intel_init_quirks(struct intel_display *display);
> >

Reply via email to