REGRESSION: i915 Haswell 6 bpc dithering broken (watercolor color banding)

Kareem Nedzmee-Seid <[email protected]>
Newsgroups org.freedesktop.lists.intel-gfx,org.kernel.vger.linux-kernel
Message-ID <CALQngLNwDOaWDdH+ahGZ92-ydOOwq_FgzVFtbuSvRC0U5WmYEg@mail.gmail.com>
i have a severe issue where haswell era graphics render colors
terribly on linux. the i915 driver seems to fail dithering on 6 bit
laptop displays, and colors get super washed out/banded because the
system treats it like an 8 bit panel when it's actually 6 bit. when
watching movies or videos, these jagged lines come out of nowhere and
ruin the image ;-;

i already have the patch file written by ville, but i don't know how
to safely compile a driver myself and i can't risk breaking anything
on this machine since i rely on it daily for schoolwork.

could the dev team please review and merge this patch into mainline
kernel / stable releases so it gets pushed out through official distro
updates? thank you! :)

original issue:
https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/16045

here is original patch code as it is:

From f94b29912b124d729caed9e4c6474c480a5f9cc1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <[email protected]>
Date: Thu, 14 May 2026 18:46:54 +0300
Subject: [PATCH] drm/edid: Ignore the "DFP 1.x" bit for non-TMDS outputs
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Limit the "DFP 1.x" EDID bit parsing to connector types
that use a DFP compatible interface, namely DVI and HDMI.

This avoid populating info->bpc for other output types,
allowing for driver specific fallbacks to kick in. In this
particular case we have a 6bpc eDP panel where we need to
rely on the bpc override from the Intel Video BIOS Table (VBT)
to determine the proper color depth. Unfortunately the VBT
override can't be generally trusted because it tends to be
left at the default 6bpc value regardless of the color depth
of the panel. So we only trust it if the EDID doesn't specify
a color depth explicitly.

Cc: Mario Kleiner <[email protected]>
Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/16045
Fixes: 210a021dab63 ("drm/edid: Set 8 bpc color depth for displays
with "DFP 1.x compliant TMDS".")
Signed-off-by: Ville Syrjälä <[email protected]>
---
 drivers/gpu/drm/drm_edid.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 404208bf23a6..ee99f680e8f5 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -5693,6 +5693,19 @@ void drm_edid_cta_sad_set(struct cea_sad
*cta_sad, const u8 *sad)
  cta_sad->byte2 = sad[2];
 }

+static bool connector_is_dfp_compatible(struct drm_connector *connector)
+{
+ switch (connector->connector_type) {
+ case DRM_MODE_CONNECTOR_DVII:
+ case DRM_MODE_CONNECTOR_DVID:
+ case DRM_MODE_CONNECTOR_HDMIA:
+ case DRM_MODE_CONNECTOR_HDMIB:
+ return true;
+ default:
+ return false;
+ }
+}
+
 /*
  * drm_edid_to_eld - build ELD from EDID
  * @connector: connector corresponding to the HDMI/DP sink
@@ -6783,6 +6796,7 @@ static void update_display_info(struct
drm_connector *connector,
  * extensions which tell otherwise.
  */
  if (info->bpc == 0 && edid->revision == 3 &&
+     connector_is_dfp_compatible(connector) &&
      edid->input & DRM_EDID_DIGITAL_DFP_1_X) {
  info->bpc = 8;
  drm_dbg_kms(connector->dev,
-- 
2.52.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.