]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/i915/psr: Fixes for Dell XPS DA14260 quirk
authorJouni Högander <jouni.hogander@intel.com>
Fri, 20 Mar 2026 08:04:03 +0000 (10:04 +0200)
committerJouni Högander <jouni.hogander@intel.com>
Thu, 26 Mar 2026 05:17:01 +0000 (07:17 +0200)
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 <mika.kahola@intel.com>
Signed-off-by: Jouni Högander <jouni.hogander@intel.com>
Reviewed-by: Mika Kahola <mika.kahola@intel.com>
Link: https://patch.msgid.link/20260320080403.1396926-1-jouni.hogander@intel.com
drivers/gpu/drm/i915/display/intel_psr.c
drivers/gpu/drm/i915/display/intel_quirks.c
drivers/gpu/drm/i915/display/intel_quirks.h

index b319e5bd62747de8bf84854c71ca9dadf8b9864b..2f1b48cd8efda6c3c39ee1b5167a875e7242faa5 100644 (file)
@@ -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)) {
                drm_dbg_kms(display->drm,
                            "Panel Replay support not currently available for this setup\n");
                return;
index 8f1bf8f418ec76f777cb3fe3b77c8b08ff34ac1b..883f297d4b8379bd4ba85dbcd6ea6285d3af2dc1 100644 (file)
@@ -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 ||
index 77e490caed0d863119c54af75375f1ba42f655be..83214eb94b0c4e2bad2958433f6b5547eff2c8cc 100644 (file)
@@ -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);