Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp5926978pxb; Mon, 14 Feb 2022 10:53:24 -0800 (PST) X-Google-Smtp-Source: ABdhPJy4PRz+dlAO0BhRJhb0oVKeUJqD9PcYnleO963qSJID6POIPZPZwSfn8x1VR6WvihHjRDVa X-Received: by 2002:a63:6888:: with SMTP id d130mr375004pgc.124.1644864804509; Mon, 14 Feb 2022 10:53:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1644864804; cv=none; d=google.com; s=arc-20160816; b=h0CrMqpDMpLuY6Yy9fgFAXMLfCx/9q4FySpD9ZxuDjEE1WbVK3TQtBhY3TFbAKBy3G +K5DSSuTvqEb7Zjs4FFXqBzBQzC7Uu8A8YfruH21r58rB3fvrtJ5hokzZfpoYd70Kdo9 wm+kOhK1zJUvNUmVIThngUez6EhYbrRLn5ODUpSlgmEdPemqQazD6L3Me1vt91tSoUYD Jsrh09ystjccBZGAUWMI/FTqUS4x+/Ksst52uUA4zN2oxWzGWZyfeOlTWlBmZLmbevkO bdrrX42UKWzjNDbkVjtRGyeQrgUi2RXqZbDNkMXRep8+PH0bk/bIXvtwgk16+dTmYZat JXCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=X8UGY1d8UtYGU+vl5lyu1hts5yxwZcUTViISsyXC9Ko=; b=YsAHlWPa0mv7Z9g99giWmkJzGq+y24prKF178KlL6Nhw14TXXuky80ynl5xUq1fD00 N/i8nm/4PwdM2y6XEGUmtP7CajeEDT/3dWUaKVFmHybOyxXP5DHY6ElpQjSjfdMHjD3d qm/Y4PpcsFBoO0Z6cswR2wuYBcRcLXjlXW0ZyfvEyjHUQY56zXgjIpEuBtxMUutWbFyL LVjaHF02/kD2JIulLE3hIqdgEyjoYInS4DMB6woWFULqNVAL0XYdMWym6OAyZcuyDY7L 1b68Ju690IDWT44YZTRiC7Lm2E5BbbBag4EiNd0z64I2vZfliIG/Z+jDEjZ0ykauVrFr qvEg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id l65si438069pge.458.2022.02.14.10.53.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 10:53:24 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 2CCFE95A3A; Mon, 14 Feb 2022 10:52:29 -0800 (PST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236289AbiBMNc0 (ORCPT + 99 others); Sun, 13 Feb 2022 08:32:26 -0500 Received: from mxb-00190b01.gslb.pphosted.com ([23.128.96.19]:43696 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230046AbiBMNc0 (ORCPT ); Sun, 13 Feb 2022 08:32:26 -0500 Received: from forward100p.mail.yandex.net (forward100p.mail.yandex.net [IPv6:2a02:6b8:0:1472:2741:0:8b7:100]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DE0055EDED for ; Sun, 13 Feb 2022 05:32:19 -0800 (PST) Received: from forward101q.mail.yandex.net (forward101q.mail.yandex.net [IPv6:2a02:6b8:c0e:4b:0:640:4012:bb98]) by forward100p.mail.yandex.net (Yandex) with ESMTP id 480ED4F08177; Sun, 13 Feb 2022 16:32:13 +0300 (MSK) Received: from vla1-25221a47e1d2.qloud-c.yandex.net (vla1-25221a47e1d2.qloud-c.yandex.net [IPv6:2a02:6b8:c0d:3c06:0:640:2522:1a47]) by forward101q.mail.yandex.net (Yandex) with ESMTP id 4305513E80002; Sun, 13 Feb 2022 16:32:13 +0300 (MSK) Received: from vla5-047c0c0d12a6.qloud-c.yandex.net (vla5-047c0c0d12a6.qloud-c.yandex.net [2a02:6b8:c18:3484:0:640:47c:c0d]) by vla1-25221a47e1d2.qloud-c.yandex.net (mxback/Yandex) with ESMTP id iarXuVZ1oX-WCd0hlAt; Sun, 13 Feb 2022 16:32:13 +0300 X-Yandex-Fwd: 2 Authentication-Results: vla1-25221a47e1d2.qloud-c.yandex.net; dkim=pass Received: by vla5-047c0c0d12a6.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id lKwSmfPfvd-WAIGJwTH; Sun, 13 Feb 2022 16:32:11 +0300 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client certificate not present) From: Yaroslav Bolyukin To: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org Cc: Thomas Zimmermann , Maxime Ripard , Maarten Lankhorst , Daniel Vetter , David Airlie , "Pan, Xinhui" , =?UTF-8?q?Christian=20K=C3=B6nig?= , Alex Deucher , Rodrigo Siqueira , Leo Li , Harry Wentland , Yaroslav Bolyukin Subject: [PATCH 1/2] edid: parse DRM VESA dsc bpp target Date: Sun, 13 Feb 2022 16:31:27 +0300 Message-Id: <20220213133128.5833-1-iam@lach.pw> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RDNS_NONE, SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As per DisplayID v2.0 Errata E9 spec Signed-off-by: Yaroslav Bolyukin --- drivers/gpu/drm/drm_edid.c | 31 ++++++++++++++++++++----------- include/drm/drm_connector.h | 6 ++++++ include/drm/drm_displayid.h | 4 ++++ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index a7663f9a1..83ee685c8 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -5270,7 +5270,7 @@ static void drm_parse_vesa_mso_data(struct drm_connector *connector, if (oui(vesa->oui[0], vesa->oui[1], vesa->oui[2]) != VESA_IEEE_OUI) return; - if (sizeof(*vesa) != sizeof(*block) + block->num_bytes) { + if (block->num_bytes < 5) { drm_dbg_kms(connector->dev, "Unexpected VESA vendor block size\n"); return; } @@ -5290,20 +5290,29 @@ static void drm_parse_vesa_mso_data(struct drm_connector *connector, break; } - if (!info->mso_stream_count) { - info->mso_pixel_overlap = 0; - return; + info->mso_pixel_overlap = 0; + + if (info->mso_stream_count) { + info->mso_pixel_overlap = FIELD_GET(DISPLAYID_VESA_MSO_OVERLAP, vesa->mso); + if (info->mso_pixel_overlap > 8) { + drm_dbg_kms(connector->dev, "Reserved MSO pixel overlap value %u\n", + info->mso_pixel_overlap); + info->mso_pixel_overlap = 8; + } + + drm_dbg_kms(connector->dev, "MSO stream count %u, pixel overlap %u\n", + info->mso_stream_count, info->mso_pixel_overlap); } - info->mso_pixel_overlap = FIELD_GET(DISPLAYID_VESA_MSO_OVERLAP, vesa->mso); - if (info->mso_pixel_overlap > 8) { - drm_dbg_kms(connector->dev, "Reserved MSO pixel overlap value %u\n", - info->mso_pixel_overlap); - info->mso_pixel_overlap = 8; + if (block->num_bytes < 7) { + /* DSC bpp is optional */ + return; } - drm_dbg_kms(connector->dev, "MSO stream count %u, pixel overlap %u\n", - info->mso_stream_count, info->mso_pixel_overlap); + info->dp_dsc_bpp = FIELD_GET(DISPLAYID_VESA_DSC_BPP_INT, vesa->dsc_bpp_int) * 16 + + FIELD_GET(DISPLAYID_VESA_DSC_BPP_FRACT, vesa->dsc_bpp_fract); + + drm_dbg_kms(connector->dev, "DSC bits per pixel %u\n", info->dp_dsc_bpp); } static void drm_update_mso(struct drm_connector *connector, const struct edid *edid) diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 5e36eb3df..04ef0e995 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -634,6 +634,12 @@ struct drm_display_info { * @mso_pixel_overlap: eDP MSO segment pixel overlap, 0-8 pixels. */ u8 mso_pixel_overlap; + + /** + * @dp_dsc_bpp: DP Display-Stream-Compression (DSC) timing's target + * DST bits per pixel in 6.4 fixed point format. 0 means undefined + */ + u16 dp_dsc_bpp; }; int drm_display_info_set_bus_formats(struct drm_display_info *info, diff --git a/include/drm/drm_displayid.h b/include/drm/drm_displayid.h index 7ffbd9f7b..1be6deddc 100644 --- a/include/drm/drm_displayid.h +++ b/include/drm/drm_displayid.h @@ -131,12 +131,16 @@ struct displayid_detailed_timing_block { #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) struct displayid_vesa_vendor_specific_block { struct displayid_block base; u8 oui[3]; u8 data_structure_type; u8 mso; + u8 dsc_bpp_int; + u8 dsc_bpp_fract; } __packed; /* DisplayID iteration */ base-commit: 1528038385c0a706aac9ac165eeb24044fef6825 -- 2.35.1