Commit 1de647ab authored by Jouni Högander's avatar Jouni Högander
Browse files

drm/i915/psr: Fixes for Dell XPS DA14260 quirk



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: 45c77d4b ("drm/i915/psr: Disable Panel Replay on Dell XPS 14 DA14260 as a quirk")
Cc: Mika Kahola <mika.kahola@intel.com>
Signed-off-by: default avatarJouni Högander <jouni.hogander@intel.com>
Reviewed-by: default avatarMika Kahola <mika.kahola@intel.com>
Link: https://patch.msgid.link/20260320080403.1396926-1-jouni.hogander@intel.com
parent f86b08bf
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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;
+10 −6
Original line number Diff line number Diff line
@@ -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 ||
+1 −1
Original line number Diff line number Diff line
@@ -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);