> -----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); > >
