Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp175248iob; Mon, 2 May 2022 16:18:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx35wrYN4KU8/eBPqJ0HzSwrs15hlH2EYPR+emzenE7e3dYrBHnXlL/XbB+bGpAgksHCAwB X-Received: by 2002:a17:903:2c1:b0:158:f9d0:839c with SMTP id s1-20020a17090302c100b00158f9d0839cmr14004459plk.118.1651533532998; Mon, 02 May 2022 16:18:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651533532; cv=none; d=google.com; s=arc-20160816; b=jDPSQgDf/4Y27ACz75h8+kdW3KVWW7ZmeAI+DMWmu0Tvpq76cRHQScptFCskfF5hsL VqDjzYujtpGsXE9QL1xAOPea41HquMzG9k3OPG1biOyyNUtL/XN+YmGdbUy6AjsSrdJe hDyVSe+ygOAIBjXtGtmTZuU4FQ+YKLOLTIHUDKcdtY8MuYJg1boWWjfEsWwHKN2/IRYP RRtdNwlnm4CH3f4NVYVp3G4MbnT65YOkcmw8Ynn/E9n5xBxWqwLanrEF9fdWBu9vdcyC bzL1CkMmmTOcm1Fevgi9RBH8vY8Ep8HXLR8ys7WXZVb5AVwuJcb2L6nn3KRsQZhyt3lu hx+w== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=EL8vW3m6OCPjznoXCXY4p2BDvFflry15CcmJdzjBFzA=; b=SIKt/kPGCwIDZxxP/XoEi1hx3/gusPdaimYVMcye/5qAc0Y5OhOSOx8LSX/ZY2dAVQ 3Us/gjrOowtqbNa05zZQJ2sfodQe+Nrii8G4hiWzko9hNqBwtMaffyFUmVtBkmTQzywa 6DESOxi8491AGq4qK3Gt+uLsy/TqJ6MtE7QOPeOgAkLxrjIEXMA7dxi8T9Dyo4bcwQ1F K8gTMoPc9eIZCYUAeuM6SBgkz+mTYCSCKVKfiYyMCDK9M2pLwO13vjli8m5ys0wAElgN WXzAwI5wZZtVar1wXpSPUTy5IxE6wKEfFB8iBg/iJeGf2x8/EmGwJpIEeO/thkarswRH 2RXw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lach.pw header.s=mail header.b=RPvmFqyX; 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 q9-20020a656249000000b003ab54545cd9si15286690pgv.56.2022.05.02.16.18.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 May 2022 16:18:52 -0700 (PDT) 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; dkim=pass header.i=@lach.pw header.s=mail header.b=RPvmFqyX; 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 A090930F55; Mon, 2 May 2022 16:18:29 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1353633AbiEBRO3 (ORCPT + 99 others); Mon, 2 May 2022 13:14:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54634 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242779AbiEBRO1 (ORCPT ); Mon, 2 May 2022 13:14:27 -0400 Received: from forward103j.mail.yandex.net (forward103j.mail.yandex.net [IPv6:2a02:6b8:0:801:2::106]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 35F0A6176 for ; Mon, 2 May 2022 10:10:57 -0700 (PDT) Received: from forward101q.mail.yandex.net (forward101q.mail.yandex.net [IPv6:2a02:6b8:c0e:4b:0:640:4012:bb98]) by forward103j.mail.yandex.net (Yandex) with ESMTP id 22C80100A0A; Mon, 2 May 2022 20:10:55 +0300 (MSK) Received: from vla1-692e383ae130.qloud-c.yandex.net (vla1-692e383ae130.qloud-c.yandex.net [IPv6:2a02:6b8:c0d:4e82:0:640:692e:383a]) by forward101q.mail.yandex.net (Yandex) with ESMTP id 1D94E13E80013; Mon, 2 May 2022 20:10:55 +0300 (MSK) Received: from vla3-3dd1bd6927b2.qloud-c.yandex.net (vla3-3dd1bd6927b2.qloud-c.yandex.net [2a02:6b8:c15:350f:0:640:3dd1:bd69]) by vla1-692e383ae130.qloud-c.yandex.net (mxback/Yandex) with ESMTP id wAlxiCjCOW-Arg8C3hQ; Mon, 02 May 2022 20:10:55 +0300 X-Yandex-Fwd: 2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lach.pw; s=mail; t=1651511455; bh=EL8vW3m6OCPjznoXCXY4p2BDvFflry15CcmJdzjBFzA=; h=In-Reply-To:References:Date:Subject:Cc:To:From:Message-Id; b=RPvmFqyXyvXTbC7t2B4nTfJalnZxzc+ZnNhCz/ep8OGSnG0IjIKX1qMACxgxOCGil lxgKYO5D8uCFhUUwa9VNVNUD08ctt9zK+iVWnseEnYmWJgpGb86KnMj4bsF4jwceOQ NbqsrEgGtiuYr7bGiUu85sqiRrFPQCTzAQgkBBi4= Authentication-Results: vla1-692e383ae130.qloud-c.yandex.net; dkim=pass header.i=@lach.pw Received: by vla3-3dd1bd6927b2.qloud-c.yandex.net (smtp/Yandex) with ESMTPSA id xTgxo8AHyR-ApMSX4BE; Mon, 02 May 2022 20:10:52 +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 , "Lin, Wayne" , Jani Nikula , Yaroslav Bolyukin Subject: [RESEND PATCH v2 1/2] drm/edid: parse DRM VESA dsc bpp target Date: Mon, 2 May 2022 20:10:30 +0300 Message-Id: <20220502171031.11797-1-iam@lach.pw> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220220151940.58327-1-iam@lach.pw> References: <20220220151940.58327-1-iam@lach.pw> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,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 "DSC pass-through timing support" VESA vendor-specific data block may contain target DSC bits per pixel fields Signed-off-by: Yaroslav Bolyukin --- drivers/gpu/drm/drm_edid.c | 33 ++++++++++++++++++++++----------- include/drm/drm_connector.h | 6 ++++++ include/drm/drm_displayid.h | 4 ++++ 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index bc43e1b32092..e2ced222a081 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -5433,7 +5433,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; } @@ -5453,20 +5453,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) @@ -5511,6 +5520,8 @@ drm_reset_display_info(struct drm_connector *connector) info->mso_stream_count = 0; info->mso_pixel_overlap = 0; + + info->dp_dsc_bpp = 0; } u32 drm_add_display_info(struct drm_connector *connector, const struct edid *edid) diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 3ac4bf87f257..77ce9515afc4 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 7ffbd9f7bfc7..1be6deddcce3 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: 6a47a16dcef3fdda79a95452964d001a620db473 -- 2.35.1