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