From nobody Sun Feb 8 12:51:35 2026 Received: from mail.0la.ch (mail.0la.ch [78.47.82.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 84A2D3112B2 for ; Tue, 2 Dec 2025 11:03:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=78.47.82.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764673395; cv=none; b=ZA9bWbYrxsDYQ6ji40lYOvstrA1M2rAmAMO8J4kklvAC8U1MD9gZz9LnVmUew/Lab9vxUKluh8H0fHKbFdHS9fVLcUOKYa+ZIt4xC2ypHQ+uGlUOtlwRmoA2xjBlbWijsETlRLxELO/USpWnmjqyXRYIxdlGlpAz86aTT/9sZtg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764673395; c=relaxed/simple; bh=HyPADbhSht1LD5DM6L76cFlYCwoehOBOVKA0IMMlI2A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=R0xNfu8ooQKDuI1pvh2R5pmVIJ1VsffwAwsY1k00zMB0LdvMejIZ2Kq9hpiOOWQbhCBLlybQLthShspr95jDPSoBohuPXWxfsJT3LGWYZa1eszPbd72B+tVgW/+RLVvUmU9t3cZ8piG7c4NQon37z4GcKNJVnd6zg6l/OGJlSGM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=lach.pw; spf=pass smtp.mailfrom=lach.pw; dkim=pass (2048-bit key) header.d=lach.pw header.i=@lach.pw header.b=hbK9usNa; dkim=permerror (0-bit key) header.d=lach.pw header.i=@lach.pw header.b=C3MWeRD1; arc=none smtp.client-ip=78.47.82.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=lach.pw Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=lach.pw Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=lach.pw header.i=@lach.pw header.b="hbK9usNa"; dkim=permerror (0-bit key) header.d=lach.pw header.i=@lach.pw header.b="C3MWeRD1" DKIM-Signature: v=1; a=rsa-sha256; s=202502r; d=lach.pw; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1764673363; bh=ckfhUsREgLRZ4tW63Aos0S1 WxtenlrgDq18XG5VKaLY=; b=hbK9usNaYC4f2jMKdktu5oEQzDtOdxYX96Fbi/S25n1x9ZtFH3 2Gebyr6PDB0MRWS9kmoc7idNZtk0QUvLsY5wDifCa3E5xjwPctG4MVSMXllniLB1KLUBTcb9NSu qu0jou4Q2E2y4Bb121km3fSaKKvSZ55a/O7Ks66CODBiS9kvY4dJxmOK98bz7rH2RbpKHhr5oxK bFFGHGkc7yg9YdXWR0jevb+HUrGdQfMjyEO47hEtQsihBZDBkLd/RddGRdxe+LKLRbSr3G0KQ0a jFK3OnOwXYBr+eNBwzT+0+ZJplATFzfr1najiWSAEEcHFmXv0Vkm0TuPtm65xzRMd9A==; DKIM-Signature: v=1; a=ed25519-sha256; s=202502e; d=lach.pw; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1764673363; bh=ckfhUsREgLRZ4tW63Aos0S1 WxtenlrgDq18XG5VKaLY=; b=C3MWeRD1uO8jLVlB4ewnVue17ysjvo9K0TxzaztqcY1OEeHDgE 93E5FlNATxLogTAOb5iMtQDkW/DvXapnuqBQ==; From: Yaroslav Bolyukin To: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula Cc: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Wayne Lin , amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Yaroslav Bolyukin , Jani Nikula Subject: [PATCH v7 1/7] drm/edid: rename VESA block parsing functions to more generic name Date: Tue, 2 Dec 2025 12:02:12 +0100 Message-ID: <20251202110218.9212-2-iam@lach.pw> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251202110218.9212-1-iam@lach.pw> References: <20251202110218.9212-1-iam@lach.pw> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Those functions would also parse DSC Bits Per Pixel value in the future commits. Signed-off-by: Yaroslav Bolyukin Reviewed-by: Jani Nikula --- drivers/gpu/drm/drm_edid.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 26bb7710a462..64f7a94dd9e4 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -6527,8 +6527,8 @@ static void drm_get_monitor_range(struct drm_connecto= r *connector, info->monitor_range.min_vfreq, info->monitor_range.max_vfreq); } =20 -static void drm_parse_vesa_mso_data(struct drm_connector *connector, - const struct displayid_block *block) +static void drm_parse_vesa_specific_block(struct drm_connector *connector, + const struct displayid_block *block) { struct displayid_vesa_vendor_specific_block *vesa =3D (struct displayid_vesa_vendor_specific_block *)block; @@ -6587,8 +6587,8 @@ static void drm_parse_vesa_mso_data(struct drm_connec= tor *connector, info->mso_stream_count, info->mso_pixel_overlap); } =20 -static void drm_update_mso(struct drm_connector *connector, - const struct drm_edid *drm_edid) +static void drm_update_vesa_specific_block(struct drm_connector *connector, + const struct drm_edid *drm_edid) { const struct displayid_block *block; struct displayid_iter iter; @@ -6596,7 +6596,7 @@ static void drm_update_mso(struct drm_connector *conn= ector, displayid_iter_edid_begin(drm_edid, &iter); displayid_iter_for_each(block, &iter) { if (block->tag =3D=3D DATA_BLOCK_2_VENDOR_SPECIFIC) - drm_parse_vesa_mso_data(connector, block); + drm_parse_vesa_specific_block(connector, block); } displayid_iter_end(&iter); } @@ -6756,7 +6756,7 @@ static void update_display_info(struct drm_connector = *connector, if (edid->features & DRM_EDID_FEATURE_RGB_YCRCB422) info->color_formats |=3D DRM_COLOR_FORMAT_YCBCR422; =20 - drm_update_mso(connector, drm_edid); + drm_update_vesa_specific_block(connector, drm_edid); =20 out: if (drm_edid_has_internal_quirk(connector, EDID_QUIRK_NON_DESKTOP)) { --=20 2.51.2 From nobody Sun Feb 8 12:51:35 2026 Received: from mail.0la.ch (mail.0la.ch [78.47.82.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3F23C310774 for ; Tue, 2 Dec 2025 11:03:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=78.47.82.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764673397; cv=none; b=BVUke8yAkj4KU4rhtKmG9Y7VIXY8USZ81uUYRCNeRYrmxgAnqKzF9mtQhWmS0rD8atJ9aEGDj1Z72VQF3ZZvZCXFqO2dy4tGRd20gQNd5zANzcXAdD6xSnT1XKjctU7EvpGJV2ry7cDDphcKC+QzQaSk1H1IEMFqHfwnyniI3jU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764673397; c=relaxed/simple; bh=v3U5twJ0npy8wDsGOoP4lABACuVPfKBEuyASwK3lyG8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=syjWqilRVHycrUUcBT/reeiz0+EO9dyDDZ+0trKk/kGp8cP4pqQbXJ//Gd4hs+djmcat4h4KbFL07DIAOoUUbXszQyQcMCt0xYsnxPg15vDeDaBmUk1+mSe1XR1/YFGomXYimD3tbXeI07Dw8X7nlsp52acqthkXtSOPLTwmdPg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=lach.pw; spf=pass smtp.mailfrom=lach.pw; dkim=pass (2048-bit key) header.d=lach.pw header.i=@lach.pw header.b=qCJd8ACe; dkim=permerror (0-bit key) header.d=lach.pw header.i=@lach.pw header.b=qNTPJahk; arc=none smtp.client-ip=78.47.82.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=lach.pw Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=lach.pw Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=lach.pw header.i=@lach.pw header.b="qCJd8ACe"; dkim=permerror (0-bit key) header.d=lach.pw header.i=@lach.pw header.b="qNTPJahk" DKIM-Signature: v=1; a=rsa-sha256; s=202502r; d=lach.pw; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1764673364; bh=mMVF9F5ivLgdaRrSFpWUdY9 2OM3S8hL4DQz5bXExt80=; b=qCJd8ACevc7Gpr/dY31UJV808Zff2NQSihFOEeYu9TppEKzdNA F+VGm+XDbd4h4KeMsNyES8YzUgAEc2iZ8AwAZaybx8PLBmdVUjop6Jf8l56x/nBtvSCmjw2L2tf Tf69+LTGNjgeJczf49WMkEoWxQcBTbj+j9ZMuKx71FmpSV3HdGtY5fWhJnAFOZeLX6kdtfnrbXv bPcKdOHupZRgFHyiFevXmdZb0sbWfRi3XVDEaWMEL180EATAsTDn3Mzd2r9aVJbK8gZwMlbZuEV KWe0KABqLEX77Lpam0CO6JJFXttl4zkPH9elUO7Iz4giaLgoi5ggJ1dqDcbbyT1CdFg==; DKIM-Signature: v=1; a=ed25519-sha256; s=202502e; d=lach.pw; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1764673364; bh=mMVF9F5ivLgdaRrSFpWUdY9 2OM3S8hL4DQz5bXExt80=; b=qNTPJahkG/kpDC04ShWjiGkvuTdzlF7b24xsIwyOY5XTKXweDm Gm32lIQ2loSx3nneb1ZYNnEstpkM4CRMjtBw==; From: Yaroslav Bolyukin To: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula Cc: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Wayne Lin , amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Yaroslav Bolyukin , Jani Nikula Subject: [PATCH v7 2/7] drm/edid: prepare for VESA vendor-specific data block extension Date: Tue, 2 Dec 2025 12:02:13 +0100 Message-ID: <20251202110218.9212-3-iam@lach.pw> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251202110218.9212-1-iam@lach.pw> References: <20251202110218.9212-1-iam@lach.pw> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Current VESA vendor-specific block parsing expects real block size to be the same as the defined struct size, use real offsets in conditionals instead to add struct fields in future commits. Signed-off-by: Yaroslav Bolyukin Reviewed-by: Jani Nikula --- drivers/gpu/drm/drm_edid.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 64f7a94dd9e4..a0a6ccf12475 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -6544,7 +6544,7 @@ static void drm_parse_vesa_specific_block(struct drm_= connector *connector, if (oui(vesa->oui[0], vesa->oui[1], vesa->oui[2]) !=3D VESA_IEEE_OUI) return; =20 - if (sizeof(*vesa) !=3D sizeof(*block) + block->num_bytes) { + if (block->num_bytes < 5) { drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] Unexpected VESA vendor block size\n", connector->base.id, connector->name); @@ -6567,24 +6567,22 @@ static void drm_parse_vesa_specific_block(struct dr= m_connector *connector, break; } =20 - if (!info->mso_stream_count) { - info->mso_pixel_overlap =3D 0; - return; - } - - info->mso_pixel_overlap =3D FIELD_GET(DISPLAYID_VESA_MSO_OVERLAP, vesa->m= so); - if (info->mso_pixel_overlap > 8) { + if (info->mso_stream_count) { + info->mso_pixel_overlap =3D FIELD_GET(DISPLAYID_VESA_MSO_OVERLAP, vesa->= mso); + if (info->mso_pixel_overlap > 8) { + drm_dbg_kms(connector->dev, + "[CONNECTOR:%d:%s] Reserved MSO pixel overlap value %u\n", + connector->base.id, connector->name, + info->mso_pixel_overlap); + info->mso_pixel_overlap =3D 8; + } drm_dbg_kms(connector->dev, - "[CONNECTOR:%d:%s] Reserved MSO pixel overlap value %u\n", + "[CONNECTOR:%d:%s] MSO stream count %u, pixel overlap %u\n", connector->base.id, connector->name, - info->mso_pixel_overlap); - info->mso_pixel_overlap =3D 8; + info->mso_stream_count, info->mso_pixel_overlap); + } else { + info->mso_pixel_overlap =3D 0; } - - drm_dbg_kms(connector->dev, - "[CONNECTOR:%d:%s] MSO stream count %u, pixel overlap %u\n", - connector->base.id, connector->name, - info->mso_stream_count, info->mso_pixel_overlap); } =20 static void drm_update_vesa_specific_block(struct drm_connector *connector, --=20 2.51.2 From nobody Sun Feb 8 12:51:35 2026 Received: from mail.0la.ch (mail.0la.ch [78.47.82.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 38DF81E7C03 for ; Tue, 2 Dec 2025 11:02:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=78.47.82.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764673375; cv=none; b=YgLDxWFzQzVcEK0UtEpYNW0Ad/hojk4IRVF+4ReSdSx8ndx84bZcLMZ1TwKWWJtNPn5190ePh+wRyNAwcYwXdUgoZCfACECpmykIO3ZRxs6uN92fkuJ2o6piw4zTO6fcaPwCLI9ZFF+DwD0tOmrxY8D7+cRhkJmHo9VsOSqmpjw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764673375; c=relaxed/simple; bh=3UwozoSdpLeGYHelhLmSJByuplntD1zFr4IxjJcQUQw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mYvQOktSrhCp3UPIxzTifdk+NhjYoJMhefqUs2Ihf5/Lp1TEcUOiIfmYcFSnzMqEse95AVsBP7HfaosrH34QsiMSOSH+I3PSWVa9yfJjsZJc4ZIMIDPzw2r9wbwU/PSSq55y8NOAjtA+tsQ69p+DYzJeJEOKDnKEm0U4CwervpE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=lach.pw; spf=pass smtp.mailfrom=lach.pw; dkim=pass (2048-bit key) header.d=lach.pw header.i=@lach.pw header.b=fizXDXuZ; dkim=permerror (0-bit key) header.d=lach.pw header.i=@lach.pw header.b=iRS0rPgQ; arc=none smtp.client-ip=78.47.82.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=lach.pw Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=lach.pw Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=lach.pw header.i=@lach.pw header.b="fizXDXuZ"; dkim=permerror (0-bit key) header.d=lach.pw header.i=@lach.pw header.b="iRS0rPgQ" DKIM-Signature: v=1; a=rsa-sha256; s=202502r; d=lach.pw; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1764673364; bh=Qh7YqhBCuHUkxJm9JuEEP0E bjHsrdO1GDFDIlcSDNtE=; b=fizXDXuZG64kcngL5Rk2LcjGulmW41f8PBznFKHl6rczAL8hcY 4fKXee86cDAzLTm+8Nv0Ky3IWdxSU+tuupKF7HRtZDYk/KSrGKaCwmpyMmvLUmNELyScYTGChw+ yfguGkthEoDvOiaKOz9Us52WBlDteCfd//TnqKNO7KdRm7JstjjKbl8VC8ttrcDSf7ISLuQBIjl jt15d9sTMKmbw8ziJlklW1GYHWJidO+LPWs1peb2S8/OusktDOQpNze/TdpyUdfbPoPRhm2lHbg 0uQ9PIqVFCDTnUMoI64EKFS7pSpiI07heDuSdiaotgXNH/nZWopSB/4SOtmP3Cb8LEA==; DKIM-Signature: v=1; a=ed25519-sha256; s=202502e; d=lach.pw; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1764673364; bh=Qh7YqhBCuHUkxJm9JuEEP0E bjHsrdO1GDFDIlcSDNtE=; b=iRS0rPgQzbC3s9eMbyaRYyV4mvwFIGUnplnqy49W8FlvzEYCNQ xZ5C+cqozqbhk2vJ8ZaZ7Tjh559+5UN2ejCg==; From: Yaroslav Bolyukin To: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula Cc: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Wayne Lin , amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Yaroslav Bolyukin Subject: [PATCH v7 3/7] drm/edid: MSO should only be used for non-eDP displays Date: Tue, 2 Dec 2025 12:02:14 +0100 Message-ID: <20251202110218.9212-4-iam@lach.pw> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251202110218.9212-1-iam@lach.pw> References: <20251202110218.9212-1-iam@lach.pw> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As per DisplayID v2.1a spec: If Offset 06h[2:0] is programmed to 001b (External DisplayPort), this field shall be cleared to 00b (Not supported). Link: https://lore.kernel.org/lkml/3abc1087618c822e5676e67a3ec2e64e506dc5ec= @intel.com/ Signed-off-by: Yaroslav Bolyukin Reviewed-by: Jani Nikula --- drivers/gpu/drm/drm_displayid_internal.h | 4 +++ drivers/gpu/drm/drm_edid.c | 36 +++++++++++++++--------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/drm_displayid_internal.h b/drivers/gpu/drm/drm= _displayid_internal.h index 5b1b32f73516..72f107ae832f 100644 --- a/drivers/gpu/drm/drm_displayid_internal.h +++ b/drivers/gpu/drm/drm_displayid_internal.h @@ -142,9 +142,13 @@ struct displayid_formula_timing_block { struct displayid_formula_timings_9 timings[]; } __packed; =20 +#define DISPLAYID_VESA_DP_TYPE GENMASK(2, 0) #define DISPLAYID_VESA_MSO_OVERLAP GENMASK(3, 0) #define DISPLAYID_VESA_MSO_MODE GENMASK(6, 5) =20 +#define DISPLAYID_VESA_DP_TYPE_EDP 0 +#define DISPLAYID_VESA_DP_TYPE_DP 1 + struct displayid_vesa_vendor_specific_block { struct displayid_block base; u8 oui[3]; diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index a0a6ccf12475..380a9dda275f 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -6533,6 +6533,7 @@ static void drm_parse_vesa_specific_block(struct drm_= connector *connector, struct displayid_vesa_vendor_specific_block *vesa =3D (struct displayid_vesa_vendor_specific_block *)block; struct drm_display_info *info =3D &connector->display_info; + int dp_type; =20 if (block->num_bytes < 3) { drm_dbg_kms(connector->dev, @@ -6551,20 +6552,29 @@ static void drm_parse_vesa_specific_block(struct dr= m_connector *connector, return; } =20 - switch (FIELD_GET(DISPLAYID_VESA_MSO_MODE, vesa->mso)) { - default: - drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] Reserved MSO mode value\n= ", + dp_type =3D FIELD_GET(DISPLAYID_VESA_DP_TYPE, vesa->data_structure_type); + if (dp_type > 1) { + drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] Reserved dp type value\n", connector->base.id, connector->name); - fallthrough; - case 0: - info->mso_stream_count =3D 0; - break; - case 1: - info->mso_stream_count =3D 2; /* 2 or 4 links */ - break; - case 2: - info->mso_stream_count =3D 4; /* 4 links */ - break; + } + + /* MSO is only supported for eDP */ + if (dp_type =3D=3D DISPLAYID_VESA_DP_TYPE_EDP) { + switch (FIELD_GET(DISPLAYID_VESA_MSO_MODE, vesa->mso)) { + default: + drm_dbg_kms(connector->dev, "[CONNECTOR:%d:%s] Reserved MSO mode value\= n", + connector->base.id, connector->name); + fallthrough; + case 0: + info->mso_stream_count =3D 0; + break; + case 1: + info->mso_stream_count =3D 2; /* 2 or 4 links */ + break; + case 2: + info->mso_stream_count =3D 4; /* 4 links */ + break; + } } =20 if (info->mso_stream_count) { --=20 2.51.2 From nobody Sun Feb 8 12:51:35 2026 Received: from mail.0la.ch (mail.0la.ch [78.47.82.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 558B930F93B for ; Tue, 2 Dec 2025 11:03:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=78.47.82.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764673394; cv=none; b=HSC1EKCUSy8AsywOSRDsBAdZPFzLmPNuYIGzHDRkqbajVq6t2rMK/E3hWgUiUwdT+WbeIDIyys0WOFymlwibmmPqTLRDQf/2i9lKee4P3275sTqVjrSbIO+Nop1Vv9mCK/2sCi3xhps4+0gP9AWR7obUSu9qlh8yvFOZwEljDVc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764673394; c=relaxed/simple; bh=rzIaL7hyJMvG1+NX3dofFpY0BHqE/VMaSyooOUcBkgg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OSEp3UxVYZ7ulnVrkNu6yun8FwOlEBdMV5YZOSKj+BUsw7PIAt8pxQXsrW7hVuVIhH/yABUOTcZ1e2bxJAlxtfJ56C2qSyuWQlOnqoxRYvNxv/EPVcFFYyhwGvrDnrahdcZjGMwmqwcf7YrBfDDQg4rrcmaYNdI3/WSR7Kl9lBw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=lach.pw; spf=pass smtp.mailfrom=lach.pw; dkim=pass (2048-bit key) header.d=lach.pw header.i=@lach.pw header.b=p9eKqXCB; dkim=permerror (0-bit key) header.d=lach.pw header.i=@lach.pw header.b=1xMvkWRb; arc=none smtp.client-ip=78.47.82.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=lach.pw Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=lach.pw Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=lach.pw header.i=@lach.pw header.b="p9eKqXCB"; dkim=permerror (0-bit key) header.d=lach.pw header.i=@lach.pw header.b="1xMvkWRb" DKIM-Signature: v=1; a=rsa-sha256; s=202502r; d=lach.pw; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1764673365; bh=Gl9kuiz7jbxKaBYB2iofJTz 80qNWbCqFnBqucqQQ3oc=; b=p9eKqXCBJc4TANG3Ay+sRDTt3j0rIlasGtCAPJAFkjnkr/4pYS EFagbjxiWkhD9UzGiCHnUynw5AdaYweHA5nn119a5TGxFJNmJDHn5tZDOL4YIV9AoIM/dvRV6aY iMNi002C6KZpVyWWxJnoFNCOThN4ILLqG8Tz4SA3JBcz2yg/HDhUaOs12YfP68oltIpb/khygoj QccvZvDsPLxCE4quenBwuYMxqSXOIfAY9CWr2lu9/IAL45iGhVcIeb6qxABxf1pk+7zhpVWk61L omqnsTvcjrKfxpP8zF0VOWXZOFcZ9toHan17Oqp9RCUryUHVN96wejv4SCJPWIlg+wQ==; DKIM-Signature: v=1; a=ed25519-sha256; s=202502e; d=lach.pw; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1764673365; bh=Gl9kuiz7jbxKaBYB2iofJTz 80qNWbCqFnBqucqQQ3oc=; b=1xMvkWRbxqaqQQld0IyIfuKxKgmHfuECJiowHvMbJjW7tizC7T 1bA6a606A3AJGFKFHRhxpJVkavtrgV++clCg==; From: Yaroslav Bolyukin To: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula Cc: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Wayne Lin , amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Yaroslav Bolyukin Subject: [PATCH v7 4/7] drm/edid: parse DSC DPP passthru support flag for mode VII timings Date: Tue, 2 Dec 2025 12:02:15 +0100 Message-ID: <20251202110218.9212-5-iam@lach.pw> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251202110218.9212-1-iam@lach.pw> References: <20251202110218.9212-1-iam@lach.pw> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" For timings v7 block revision >=3D1, revision field also contains a bit that indicates that the mode timings should only be used with fixed bits per pixel value specified in vesa vendor-specific block. Signed-off-by: Yaroslav Bolyukin Reviewed-by: Jani Nikula --- drivers/gpu/drm/drm_displayid_internal.h | 2 ++ drivers/gpu/drm/drm_edid.c | 12 ++++++++---- include/drm/drm_modes.h | 10 ++++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/drm_displayid_internal.h b/drivers/gpu/drm/drm= _displayid_internal.h index 72f107ae832f..724174b429f2 100644 --- a/drivers/gpu/drm/drm_displayid_internal.h +++ b/drivers/gpu/drm/drm_displayid_internal.h @@ -97,6 +97,7 @@ struct displayid_header { u8 ext_count; } __packed; =20 +#define DISPLAYID_BLOCK_REV GENMASK(2, 0) struct displayid_block { u8 tag; u8 rev; @@ -125,6 +126,7 @@ struct displayid_detailed_timings_1 { __le16 vsw; } __packed; =20 +#define DISPLAYID_BLOCK_PASSTHROUGH_TIMINGS_SUPPORT BIT(3) struct displayid_detailed_timing_block { struct displayid_block base; struct displayid_detailed_timings_1 timings[]; diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 380a9dda275f..b28ff4bafb1d 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -6794,8 +6794,8 @@ static void update_display_info(struct drm_connector = *connector, } =20 static struct drm_display_mode *drm_mode_displayid_detailed(struct drm_dev= ice *dev, - const struct displayid_detailed_timings_1 *timings, - bool type_7) + const struct displayid_block *block, + const struct displayid_detailed_timings_1 *timings) { struct drm_display_mode *mode; unsigned int pixel_clock =3D (timings->pixel_clock[0] | @@ -6811,11 +6811,16 @@ static struct drm_display_mode *drm_mode_displayid_= detailed(struct drm_device *d unsigned int vsync_width =3D le16_to_cpu(timings->vsw) + 1; bool hsync_positive =3D le16_to_cpu(timings->hsync) & (1 << 15); bool vsync_positive =3D le16_to_cpu(timings->vsync) & (1 << 15); + bool type_7 =3D block->tag =3D=3D DATA_BLOCK_2_TYPE_7_DETAILED_TIMING; =20 mode =3D drm_mode_create(dev); if (!mode) return NULL; =20 + if (type_7 && FIELD_GET(DISPLAYID_BLOCK_REV, block->rev) >=3D 1) + mode->dsc_passthrough_timings_support =3D + block->rev & DISPLAYID_BLOCK_PASSTHROUGH_TIMINGS_SUPPORT; + /* resolution is kHz for type VII, and 10 kHz for type I */ mode->clock =3D type_7 ? pixel_clock : pixel_clock * 10; mode->hdisplay =3D hactive; @@ -6848,7 +6853,6 @@ static int add_displayid_detailed_1_modes(struct drm_= connector *connector, int num_timings; struct drm_display_mode *newmode; int num_modes =3D 0; - bool type_7 =3D block->tag =3D=3D DATA_BLOCK_2_TYPE_7_DETAILED_TIMING; /* blocks must be multiple of 20 bytes length */ if (block->num_bytes % 20) return 0; @@ -6857,7 +6861,7 @@ static int add_displayid_detailed_1_modes(struct drm_= connector *connector, for (i =3D 0; i < num_timings; i++) { struct displayid_detailed_timings_1 *timings =3D &det->timings[i]; =20 - newmode =3D drm_mode_displayid_detailed(connector->dev, timings, type_7); + newmode =3D drm_mode_displayid_detailed(connector->dev, block, timings); if (!newmode) continue; =20 diff --git a/include/drm/drm_modes.h b/include/drm/drm_modes.h index b9bb92e4b029..312e5c03af9a 100644 --- a/include/drm/drm_modes.h +++ b/include/drm/drm_modes.h @@ -417,6 +417,16 @@ struct drm_display_mode { */ enum hdmi_picture_aspect picture_aspect_ratio; =20 + /** + * @dsc_passthrough_timing_support: + * + * Indicates whether this mode timing descriptor is supported + * with specific target DSC bits per pixel only. + * + * VESA vendor-specific data block shall exist with the relevant + * DSC bits per pixel declaration when this flag is set to true. + */ + bool dsc_passthrough_timings_support; }; =20 /** --=20 2.51.2 From nobody Sun Feb 8 12:51:35 2026 Received: from mail.0la.ch (mail.0la.ch [78.47.82.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5593430F953 for ; Tue, 2 Dec 2025 11:03:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=78.47.82.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764673394; cv=none; b=VmM+0Vifen+06hJAeWoMHpCLoPSvvilPM5waZHCS5J7LXK71fRamqHi2/qKqluFIVdUDNt8feIwHRKXVnRTiX1kBBQL1DnMUOZVFqiL7L55S3MY3KnQP2QLqv0/20igCLR24LhzhRT1ulj95VLCKNwCRcaDLNGZbLVsOMmuINUM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764673394; c=relaxed/simple; bh=6dNebbPQsS+ptOM49W47ktOIjscJjcad2fll2TN2/uU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EqYQr2i+g41686DitN4ciKOUCQDVBOGU3lBvv3N8mPhIAwlFuCVoARsh2udGErAGYmi1YezR3uIKFq5J6StdroKYDBWRTbsr4oom9Mdk8kUVNaMKE35J0PcoOErUb83ZQlKdoEfUwjI+jNgl/ukBW93pUl3SF9kUBz3e33yw6rA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=lach.pw; spf=pass smtp.mailfrom=lach.pw; dkim=pass (2048-bit key) header.d=lach.pw header.i=@lach.pw header.b=ixD9QGK4; dkim=permerror (0-bit key) header.d=lach.pw header.i=@lach.pw header.b=cDSad/Ni; arc=none smtp.client-ip=78.47.82.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=lach.pw Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=lach.pw Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=lach.pw header.i=@lach.pw header.b="ixD9QGK4"; dkim=permerror (0-bit key) header.d=lach.pw header.i=@lach.pw header.b="cDSad/Ni" DKIM-Signature: v=1; a=rsa-sha256; s=202502r; d=lach.pw; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1764673365; bh=BDAZeHaErjU5AdhnxRJ7MR2 NfN5vlAY+R8Q/T1fQ7s0=; b=ixD9QGK4IfioGOWZ4R9mNz/e81k/Mvxdk7kwymaEz4ULSzzq8F ZKZ6SSTV1xam1ctuVfPQyMvcqLYosB588tl9KHtovDeZZdQTFYgFnDnAYfG+30QQRsL0kniB/dU VpeCs3Oh1Wz7WXNcN9WqKfP1ld+VwnQMVwTQ+R03HK7WumwSKlBWVNjJUuxTVx20rmzhrrRijc6 A/8wZNzsGonJTXgWHbKZQTKXg0xJtyoYkto9Af4lon15lOIwLNqtAuiw+CryH3UsL/F1/ZEzJAR ew+8xmrs88PDgUTnSakjZEtT2oGRpjH8yHa0fM02ap6CLzgebpu+WuOspaY5TiPRGcg==; DKIM-Signature: v=1; a=ed25519-sha256; s=202502e; d=lach.pw; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1764673365; bh=BDAZeHaErjU5AdhnxRJ7MR2 NfN5vlAY+R8Q/T1fQ7s0=; b=cDSad/NiKfl4z9jXct6+VGQOZ/JFbAHC9M59i+FjYNbJJlBhNr gTbLaW6CqJZyN5Mam3UcoKsISonYecV+SOAg==; From: Yaroslav Bolyukin To: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula Cc: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Wayne Lin , amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Yaroslav Bolyukin Subject: [PATCH v7 5/7] drm/edid: for consistency, use mask everywhere for block rev parsing Date: Tue, 2 Dec 2025 12:02:16 +0100 Message-ID: <20251202110218.9212-6-iam@lach.pw> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251202110218.9212-1-iam@lach.pw> References: <20251202110218.9212-1-iam@lach.pw> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Other usages of block.rev bitfields were refactored to use FIELD_GET instead of bitwise ops. Signed-off-by: Yaroslav Bolyukin Reviewed-by: Jani Nikula --- drivers/gpu/drm/drm_displayid_internal.h | 1 + drivers/gpu/drm/drm_edid.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_displayid_internal.h b/drivers/gpu/drm/drm= _displayid_internal.h index 724174b429f2..55f972d32847 100644 --- a/drivers/gpu/drm/drm_displayid_internal.h +++ b/drivers/gpu/drm/drm_displayid_internal.h @@ -139,6 +139,7 @@ struct displayid_formula_timings_9 { u8 vrefresh; } __packed; =20 +#define DISPLAYID_BLOCK_DESCRIPTOR_PAYLOAD_BYTES GENMASK(6, 4) struct displayid_formula_timing_block { struct displayid_block base; struct displayid_formula_timings_9 timings[]; diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index b28ff4bafb1d..be8715632b91 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -6908,7 +6908,8 @@ static int add_displayid_formula_modes(struct drm_con= nector *connector, struct drm_display_mode *newmode; int num_modes =3D 0; bool type_10 =3D block->tag =3D=3D DATA_BLOCK_2_TYPE_10_FORMULA_TIMING; - int timing_size =3D 6 + ((formula_block->base.rev & 0x70) >> 4); + int timing_size =3D 6 + + FIELD_GET(DISPLAYID_BLOCK_DESCRIPTOR_PAYLOAD_BYTES, formula_block->base.= rev); =20 /* extended blocks are not supported yet */ if (timing_size !=3D 6) --=20 2.51.2 From nobody Sun Feb 8 12:51:35 2026 Received: from mail.0la.ch (mail.0la.ch [78.47.82.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6AA84312829 for ; Tue, 2 Dec 2025 11:03:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=78.47.82.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764673400; cv=none; b=t1v0CJQSedvy15qJr7Iw8zDVDLnnJ4i1oS8EHuIP6BnDVMqido58riIr+je7YW/9/KRdOurZKKn/obkl9Hg1LlbNfHn48YxRFrl3bRC2/CKr7jTKkW5eS05LZ9wMvAMMI0GMW4z0DFnrVOGzkAhWeBzU3SfeRPax1N0O7c4gbvo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764673400; c=relaxed/simple; bh=DTsxQ9g9bO+m08KN6zR1reSukEBwk+9TBI1ofxB4tig=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Qyt01iqYExnXNr8w8CQ/sCkXk6/bDnmTmwRdJan6TgJfzBRJtRtCmAXq/uC80jKNPhmuPUE3vuPbiVrYvtV1HQDYrmniP6f6qE/WV/7bAu5WpPBytXu5vYOfXu+frd/Mlzmx8h0XGu+YfeFsqlO4fe9JiMJaN7tQxgstn/Hmcl0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=lach.pw; spf=pass smtp.mailfrom=lach.pw; dkim=pass (2048-bit key) header.d=lach.pw header.i=@lach.pw header.b=DQWPYgod; dkim=permerror (0-bit key) header.d=lach.pw header.i=@lach.pw header.b=4a1II04o; arc=none smtp.client-ip=78.47.82.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=lach.pw Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=lach.pw Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=lach.pw header.i=@lach.pw header.b="DQWPYgod"; dkim=permerror (0-bit key) header.d=lach.pw header.i=@lach.pw header.b="4a1II04o" DKIM-Signature: v=1; a=rsa-sha256; s=202502r; d=lach.pw; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1764673366; bh=96Xx6pEA6IrK7KXRzHy93Ni ixWaJOWO8cK1KcI4cmBA=; b=DQWPYgodW9ZDxXKDNQ2kyOBxLem+Mg69hTqahxpofEZwaJq8w3 KoV45fdTwGzeIx4mK2ZoyjQIvthQh1HI5OsajT3ZwUsmCDQXtJ45hs0KnRN9gKp/oBL9Bb6TafY l9BhRizdm+Dri/hGCYNQVUsvAeM5R7GUYbjONswbj3rmkGgKo5Hviw+aCt4+bs0GmcI+J64c4u6 SkQ7r91MSyoDwKy4uB8zG+beqgYcV+L3pkEjCUf3qDBjD0kWyBUcTGWJtjcutf4FMfGZSSlHO+6 g4nldV2y8br1uYjBJRJJReUk5QhyhcmWEk0TxBl8H1x+9lDrZEebsimDInb8Jm+IapQ==; DKIM-Signature: v=1; a=ed25519-sha256; s=202502e; d=lach.pw; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1764673366; bh=96Xx6pEA6IrK7KXRzHy93Ni ixWaJOWO8cK1KcI4cmBA=; b=4a1II04oNIArJk4JPmVJHLVcoB7LyMpwoIt0MLygDJaJA0HZnf QvYH6OQ9XWj338Ok4FtR6RjO9Xb/laUfKHDw==; From: Yaroslav Bolyukin To: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula Cc: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Wayne Lin , amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Yaroslav Bolyukin Subject: [PATCH v7 6/7] drm/edid: parse DRM VESA dsc bpp target Date: Tue, 2 Dec 2025 12:02:17 +0100 Message-ID: <20251202110218.9212-7-iam@lach.pw> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251202110218.9212-1-iam@lach.pw> References: <20251202110218.9212-1-iam@lach.pw> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As per DisplayID v2.1a spec "DSC pass-through timing support", VESA vendor-specific data block may contain target DSC bits per pixel fields, that should be always used for the VII modes that declare they only support working with this value (Pass-through Timing Support for Target DSC Bits per Pixel). Signed-off-by: Yaroslav Bolyukin fixup parse DRM vesa dsc bpp target Reviewed-by: Jani Nikula --- drivers/gpu/drm/drm_displayid_internal.h | 4 ++++ drivers/gpu/drm/drm_edid.c | 17 +++++++++++++++++ include/drm/drm_connector.h | 6 ++++++ 3 files changed, 27 insertions(+) diff --git a/drivers/gpu/drm/drm_displayid_internal.h b/drivers/gpu/drm/drm= _displayid_internal.h index 55f972d32847..8f1a2f33ca1a 100644 --- a/drivers/gpu/drm/drm_displayid_internal.h +++ b/drivers/gpu/drm/drm_displayid_internal.h @@ -148,6 +148,8 @@ struct displayid_formula_timing_block { #define DISPLAYID_VESA_DP_TYPE GENMASK(2, 0) #define DISPLAYID_VESA_MSO_OVERLAP GENMASK(3, 0) #define DISPLAYID_VESA_MSO_MODE GENMASK(6, 5) +#define DISPLAYID_VESA_DSC_BPP_INT GENMASK(5, 0) +#define DISPLAYID_VESA_DSC_BPP_FRACT GENMASK(3, 0) =20 #define DISPLAYID_VESA_DP_TYPE_EDP 0 #define DISPLAYID_VESA_DP_TYPE_DP 1 @@ -157,6 +159,8 @@ struct displayid_vesa_vendor_specific_block { u8 oui[3]; u8 data_structure_type; u8 mso; + u8 dsc_bpp_int; + u8 dsc_bpp_fract; } __packed; =20 /* diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index be8715632b91..8273920f5ba4 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -45,6 +45,7 @@ #include #include #include +#include #include =20 #include "drm_crtc_internal.h" @@ -6593,6 +6594,21 @@ static void drm_parse_vesa_specific_block(struct drm= _connector *connector, } else { info->mso_pixel_overlap =3D 0; } + + if (block->num_bytes < 7) { + /* DSC bpp is optional */ + return; + } + + info->dp_dsc_bpp_x16 =3D FIELD_GET(DISPLAYID_VESA_DSC_BPP_INT, vesa->dsc_= bpp_int) << 4 | + FIELD_GET(DISPLAYID_VESA_DSC_BPP_FRACT, vesa->dsc_bpp_fract); + + if (info->dp_dsc_bpp_x16 > 0) { + drm_dbg_kms(connector->dev, + "[CONNECTOR:%d:%s] DSC bits per pixel " FXP_Q4_FMT "\n", + connector->base.id, connector->name, + FXP_Q4_ARGS(info->dp_dsc_bpp_x16)); + } } =20 static void drm_update_vesa_specific_block(struct drm_connector *connector, @@ -6641,6 +6657,7 @@ static void drm_reset_display_info(struct drm_connect= or *connector) info->mso_stream_count =3D 0; info->mso_pixel_overlap =3D 0; info->max_dsc_bpp =3D 0; + info->dp_dsc_bpp_x16 =3D 0; =20 kfree(info->vics); info->vics =3D NULL; diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 8f34f4b8183d..7decfc288aa3 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -837,6 +837,12 @@ struct drm_display_info { */ u32 max_dsc_bpp; =20 + /** + * @dp_dsc_bpp: DP Display-Stream-Compression (DSC) timing's target + * DSC bits per pixel in 6.4 fixed point format. 0 means undefined. + */ + u16 dp_dsc_bpp_x16; + /** * @vics: Array of vics_len VICs. Internal to EDID parsing. */ --=20 2.51.2 From nobody Sun Feb 8 12:51:35 2026 Received: from mail.0la.ch (mail.0la.ch [78.47.82.197]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DEF0925D208 for ; Tue, 2 Dec 2025 11:02:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=78.47.82.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764673375; cv=none; b=LqFl1cNW5IlZvDSCh8GnTOcK30UVWKKoDbl+q5I0LUKfcdTFNxn6lDuiO+f8yUlT/foRPF51Z9vXBH0y+1zRBaA7ShtNbvWy7SbB88T3JRMAlWRw8sHCUh5bE9fzYKUt2anuXNwOQk0T6a3NcnROlbBEqfA8cqvYzrivZCT2Nqw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764673375; c=relaxed/simple; bh=JWWSnSEw8EvlR881rgFPO4eJCsGEdz9Mw2l8vrOzV60=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kGSD+LGs6GsC7BXmU3gBpoaxFDbafoV+6KqXNCJXDh36EK9/eZ/gFPQuyso//pwMdJZqWvJcZXTjwTxDygRu2D7XawZmxPXp8fXGrSrtqUxApREI5VqvcBiIiH7AhQRQE54nSDZHObhp882BxWWjea60yO77Ws+FcPvNM1eguew= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=lach.pw; spf=pass smtp.mailfrom=lach.pw; dkim=pass (2048-bit key) header.d=lach.pw header.i=@lach.pw header.b=Jtzb8PDC; dkim=permerror (0-bit key) header.d=lach.pw header.i=@lach.pw header.b=nq2BwLEZ; arc=none smtp.client-ip=78.47.82.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=lach.pw Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=lach.pw Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=lach.pw header.i=@lach.pw header.b="Jtzb8PDC"; dkim=permerror (0-bit key) header.d=lach.pw header.i=@lach.pw header.b="nq2BwLEZ" DKIM-Signature: v=1; a=rsa-sha256; s=202502r; d=lach.pw; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1764673366; bh=xBHAbfvs3M52TAGHXMuwouD KJD5Hy5FqWvdsrTLN97w=; b=Jtzb8PDC0ynnntHP+09CiTRQo9CSCRwQsh7kwyLXa4Z2pyZq8d Qw9fQefyW7h8BECgmqW7yQ06YTpivbSQtE/4AoKDLGfM/X2byMjmQFheCgGTWLVZBer6jcAUJaa WNv1ENjnym7Nu5byBxEzdYuCFt83n2P4nCmRx6UyvFVgO4KTi8mhrjwgYR/AFkB0w0qrVeMmnRQ zFRmIap6ee3nhroYEwcVbg8c60Ge7x+hTWv+tI1fsNDt32iZeytOfe9ZHoQzAYxKv6ELxt93Kt8 v7RvCuzUYqb34LO0y7KqUnNEgR/BON4+mLwfCF9ZQbQ6s88yGfNRde5gIeUVOiC/sCQ==; DKIM-Signature: v=1; a=ed25519-sha256; s=202502e; d=lach.pw; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1764673366; bh=xBHAbfvs3M52TAGHXMuwouD KJD5Hy5FqWvdsrTLN97w=; b=nq2BwLEZ084XSO08oToSsDrurQD+KcGW6/iZvN3EFbcpIExhfQ pEWSvwjIAIAOjjjOPpRupoPPfBdjrKrEfQAA==; From: Yaroslav Bolyukin To: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula Cc: Harry Wentland , Leo Li , Rodrigo Siqueira , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Wayne Lin , amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Yaroslav Bolyukin Subject: [PATCH v7 7/7] drm/amd: use fixed dsc bits-per-pixel from edid Date: Tue, 2 Dec 2025 12:02:18 +0100 Message-ID: <20251202110218.9212-8-iam@lach.pw> X-Mailer: git-send-email 2.51.2 In-Reply-To: <20251202110218.9212-1-iam@lach.pw> References: <20251202110218.9212-1-iam@lach.pw> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" VESA vendor header from DisplayID spec may contain fixed bit per pixel rate, it should be used by drm driver for the modes that declare they are only supported with the declared fixed bits per pixel value. Signed-off-by: Yaroslav Bolyukin --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index e6728fd12eeb..32370279283f 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -6613,6 +6613,11 @@ static void fill_stream_properties_from_drm_display_= mode( =20 stream->output_color_space =3D get_output_color_space(timing_out, connect= or_state); stream->content_type =3D get_output_content_type(connector_state); + + /* DisplayID Type VII pass-through timings. */ + if (mode_in->dsc_passthrough_timings_support && info->dp_dsc_bpp_x16 !=3D= 0) { + stream->timing.dsc_fixed_bits_per_pixel_x16 =3D info->dp_dsc_bpp_x16; + } } =20 static void fill_audio_info(struct audio_info *audio_info, @@ -7071,6 +7076,7 @@ create_stream_for_sink(struct drm_connector *connecto= r, struct drm_display_mode mode; struct drm_display_mode saved_mode; struct drm_display_mode *freesync_mode =3D NULL; + struct drm_display_mode *dsc_passthru_mode =3D NULL; bool native_mode_found =3D false; bool recalculate_timing =3D false; bool scale =3D dm_state->scaling !=3D RMX_OFF; @@ -7162,6 +7168,16 @@ create_stream_for_sink(struct drm_connector *connect= or, } } =20 + list_for_each_entry(dsc_passthru_mode, &connector->modes, head) { + if (dsc_passthru_mode->hdisplay =3D=3D mode.hdisplay && + dsc_passthru_mode->vdisplay =3D=3D mode.vdisplay && + drm_mode_vrefresh(dsc_passthru_mode) =3D=3D mode_refresh) { + mode.dsc_passthrough_timings_support =3D + dsc_passthru_mode->dsc_passthrough_timings_support; + break; + } + } + if (recalculate_timing) drm_mode_set_crtcinfo(&saved_mode, 0); =20 --=20 2.51.2