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]>
> 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.
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);
--
Jani Nikula, Intel