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