A Dell Latitude 7490 (BIOS 1.41.0, PCI 8086:5917, subsystem 1028:081c)
repeatedly froze with its internal display active on Ubuntu
7.0.0-38-generic. Logs contain skl_dpll0_update and
gen9_disable_dc_states warnings. The user reports several freeze-free
days with PSR/DC disabled, including undocked sessions; swap/zswap
changes are a confounding factor.

This RFC disables automatic PSR/DC defaults only for the matching
PCI/DMI identifiers and preserves explicit overrides. Linux 7.3 with
this change built and booted. Without i915 overrides, global
parameters stayed -1 and device values became 0; the internal display
was enabled. Initial checks found no earlier warning names, GPU
hang/reset or OOM patterns.

Unpatched mainline reproduction, separate PSR/DC tests, bisection and
power measurements are missing. Power consumption may increase. Is the
early per-device parameter hook appropriate, and should panel
identification further narrow the match?

The attached text/plain RFC preserves the patch bytes; Gmail changes
pasted diffs. It includes my DCO sign-off and Assisted-by: LLM
attribution.

Report and tests:
https://gist.github.com/kennethassogba/b8332d07d6e4c508307b625cc8a037b6

Kenneth Assogba
From a2f6c87b3705283a3e2c66b2b85a04e895488874 Mon Sep 17 00:00:00 2001
From: Kenneth Assogba <[email protected]>
Date: Mon, 19 Oct 2026 22:26:34 +0200
Subject: [RFC PATCH] drm/i915/display: limit power defaults on affected
 Latitude 7490

A Latitude 7490 with BIOS 1.41.0 repeatedly froze with its internal
display active on Ubuntu 7.0.0-38-generic. The retained journal contains
skl_dpll0_update and gen9_disable_dc_states warnings. The user reports
several freeze-free days with PSR and display C-states disabled together,
including undocked sessions. Swap/zswap changes are a confounding factor.

Disable automatic PSR/DC defaults for PCI 8086:5917, subsystem 1028:081c,
and exact Dell Latitude 7490 / BIOS 1.41.0 DMI matches. Preserve explicit
parameter values. Apply the defaults after the per-device parameter copy,
before display power initialization consumes enable_dc.

Linux 7.3 with this change built and booted on the reporting machine.
Without PSR/DC boot arguments, global values stayed -1 and per-device
values became 0. The internal display was enabled and the initial log
check found neither earlier warning name, GPU hang/reset nor OOM patterns.

This RFC proposes a machine-specific workaround. The underlying cause,
unpatched mainline behavior and the need for both settings remain open.
Disabling these features may increase power consumption.

Link: https://gist.github.com/kennethassogba/b8332d07d6e4c508307b625cc8a037b6
Assisted-by: LLM
Signed-off-by: Kenneth Assogba <[email protected]>
---
 .../drm/i915/display/intel_display_device.c   | 27 +++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_display_device.c 
b/drivers/gpu/drm/i915/display/intel_display_device.c
index f17fc2c..770f524 100644
--- a/drivers/gpu/drm/i915/display/intel_display_device.c
+++ b/drivers/gpu/drm/i915/display/intel_display_device.c
@@ -3,6 +3,7 @@
  * Copyright © 2023 Intel Corporation
  */
 
+#include <linux/dmi.h>
 #include <linux/pci.h>
 
 #include <drm/drm_color_mgmt.h>
@@ -1690,6 +1691,31 @@ static const char *step_name(const struct 
intel_display_runtime_info *runtime)
        return strlen(runtime->step_name) ? runtime->step_name : "N/A";
 }
 
+static void intel_display_device_apply_param_quirks(struct intel_display 
*display,
+                                                 const struct pci_dev *pdev)
+{
+       struct intel_display_params *params = &display->params;
+
+       /* Limit the workaround to the hardware and firmware reported affected. 
*/
+       if (pdev->vendor != PCI_VENDOR_ID_INTEL || pdev->device != 0x5917 ||
+           pdev->subsystem_vendor != 0x1028 || pdev->subsystem_device != 
0x081c ||
+           !dmi_match(DMI_SYS_VENDOR, "Dell Inc.") ||
+           !dmi_match(DMI_PRODUCT_NAME, "Latitude 7490") ||
+           !dmi_match(DMI_BIOS_VERSION, "1.41.0"))
+               return;
+
+       if (params->enable_psr != -1 && params->enable_dc != -1)
+               return;
+
+       /* Preserve explicit module parameter values for further diagnosis. */
+       if (params->enable_psr == -1)
+               params->enable_psr = 0;
+       if (params->enable_dc == -1)
+               params->enable_dc = 0;
+
+       drm_info(display->drm, "Applying Latitude 7490 display power 
defaults\n");
+}
+
 struct intel_display *intel_display_device_probe(struct pci_dev *pdev,
                                                 const struct 
intel_display_parent_interface *parent)
 {
@@ -1710,6 +1736,7 @@ struct intel_display *intel_display_device_probe(struct 
pci_dev *pdev,
        display->parent = parent;
 
        intel_display_params_copy(&display->params);
+       intel_display_device_apply_param_quirks(display, pdev);
 
        if (has_no_display(pdev)) {
                drm_dbg_kms(display->drm, "Device doesn't have display\n");

Reply via email to