From nobody Mon Feb 9 03:51:12 2026 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AFDE934AAFB for ; Tue, 13 Jan 2026 21:41:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768340471; cv=none; b=FkcPWlur269UJ5O8Bc5Btl5LEicuB2tR7/VkA9WgrrXpdWraNTXiwovh93kIWdohuwaUCwIKDF5klTEiYX7Fw0zFV89vT5hm3YM/b6a7McrihwHIm4G3sC3iDsEmXpbdWn8FmD8HgwFOgSSWH6U32ngBe/YgUZ+y/vcEsU6BKr4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768340471; c=relaxed/simple; bh=N86J3+JchlhAAtreFAF3eOh//qzmo1O+6ej/q/eDzrE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=sp7SQRQdeFTIvTBFtLMhMRNTuFe8vR59ck4EdsaB/WI7pJriEjtw77iCJ2Zo8jGal/QdcnZDguYnq7DjP1B2Xc5zIRHxmnVgrInqQQ3O7eVJHP9M4Rtwe4gZCPdH9y5GLi4JHzIS7KuuDjzh4HsqK9xNvZ8AzN7FpNkCeOa5OYk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=TLv5j7s4; arc=none smtp.client-ip=209.85.208.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TLv5j7s4" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-64b7d213fd6so1122160a12.0 for ; Tue, 13 Jan 2026 13:41:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768340468; x=1768945268; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jnOk7xTeKASHRNhT1/DjMa9A/4WgBFppfopFsMljQZA=; b=TLv5j7s4rJoG+I9gQTq8KS0eZLv47/ExbwDRx7lge2kV5eRGhHp0VNevXitrjOHOop k+dobltzMthWFEFd8cUgkMDcOWTP5Ybu8ShnCMNjOSST4Qbqm83ixHOHfoItj10LbQPY BMjh10R6QlxS/k7ighRbBu/vB2gpCiPqC2/FL62P9pbw/Mcrc9J3zqUPv43qCa8JQHvB FlTfZFeBqQxQUfn2DjR+uxcE78GhJwKFkfSH/4XNeZig1mKgAooMZartSYI6KbStukcF dGBvlh+enKfNgPK3oy/E/PSY8sNU1Ea4e1dgHdhuL4pw40r7e2OUlHa78qRKXX6cIO2D pAhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768340468; x=1768945268; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=jnOk7xTeKASHRNhT1/DjMa9A/4WgBFppfopFsMljQZA=; b=UAJlanCgnDV695NeJgValtMpJE+xWNF0mdg6YZwS/I0EZNTticVi4PKXUCcH3DLXWE nFV2H25YdHx9Yykq6CN+5FvVM8ResOvS8rf3r/wMNvoJoPABSNjiHsjCu3v0MMxCmeUS deZcGoUYCMfrrRLHs03NNIEQEcO+DbJqm3EmT5tdnX5PYEZaEfBHRILjdWBiWs9pakQt RmRGodndaPgJ+9mQefbY3EASrQvUPR5AtPo4ukO1UJ9R5O2MagzuyEq4kegify4Hdyao 4bOrhGUmZb1KRpb70f/hx2Px3p8bAbiAtLNGQ82V8G6L/Ub6xohcV0VjKv01W0LNDAKj 8tQA== X-Forwarded-Encrypted: i=1; AJvYcCVf/juo5lqIeKPeR9bo/7b1Sauxt8AomcjUjbVuJXoH3pzfxaRrVSpw4oSR03YLMHw0wgYCuDtf27cJfOU=@vger.kernel.org X-Gm-Message-State: AOJu0YweRi5iJMtgfxrd6cGA7sVA1Yk3h/LDUsBu9FJ7NRDXuCUo3pDl jhO2uedui6sBsc8D8MsTxy3P/cwqKss23e7fyDl0VTC0xUxRcwVPLeot X-Gm-Gg: AY/fxX5SzhT69CVq6X2NEzO452ZRqCsXoV1nTnihf3VPoed6AHRpNzGj3px48KXYw0c S0zpkMKsJTXiJjIZCtRUuqmockbt4ZRlpkDtbSqTfQ5mVQ9iWpBvyAKNjRJw08ssRkBJLl5Edge MwZVAaklLe+6EokRrikPtqpJBXFCVVxwBVqr1yHcsmF+ZztL+J0ZmcRm3hT+weQOiVgABBfeZ13 +hn252zsIvTrzXKNHTi/XakqpXaDJe/vZTbBCcZwSOBfJfKsX0Zt58obApzpLAgCELLllNSSWcD bTvHcwzmVKq5L6ViymslKGVBroh6qWFCaPiB1lBu0XjHuE4ASZncZc/5iaHz/WlBkmNvFNXNdjD E/svZaa/muRi7U/tymMOc6KJ/2eMOQhwKAZjklnWY1IYV+2MzSdkeygfJWVtRK0k+iGesPqB3/g RZs8Z9CZ6wLQTCdY1BNPXGg8Oj71NnP7rADa3+ih4RHGwpEkViZRk3rXF1aSTyDVuD X-Received: by 2002:a05:6402:35ca:b0:64d:2889:cf4e with SMTP id 4fb4d7f45d1cf-653ec47d79emr190526a12.7.1768340467986; Tue, 13 Jan 2026 13:41:07 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6507bf6d5e0sm20858052a12.31.2026.01.13.13.41.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Jan 2026 13:41:07 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, harry.wentland@amd.com, sunpeng.li@amd.com, siqueira@igalia.com Cc: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/3] drm/edid: parse more info from HDMI Forum vsdb Date: Tue, 13 Jan 2026 22:41:02 +0100 Message-ID: <20260113214104.146856-2-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260113214104.146856-1-tomasz.pakula.oficjalny@gmail.com> References: <20260113214104.146856-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Adds flags and a struct to hold HDMI VRR information. `supported` here is an additional property which allows easier parsing in consumers and adds a bit of logic used to detect malformed VRRmin/VRRmax values. Signed-off-by: Tomasz Paku=C5=82a Tested-by: Bernhard Berger --- drivers/gpu/drm/drm_edid.c | 41 +++++++++++++++++++++++++++++++- include/drm/drm_connector.h | 47 +++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index e2e85345aa9a..1e066d614da7 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -6149,6 +6149,33 @@ static void drm_parse_ycbcr420_deep_color_info(struc= t drm_connector *connector, hdmi->y420_dc_modes =3D dc_mask; } =20 +static void drm_parse_vrr_info(struct drm_hdmi_info *hdmi, const u8 *db) +{ + struct drm_hdmi_vrr_cap *vrr =3D &hdmi->vrr_cap; + + if (cea_db_payload_len(db) < 8) + return; + + hdmi->fapa_start_location =3D db[8] & DRM_EDID_FAPA_START_LOCATION; + hdmi->allm =3D db[8] & DRM_EDID_ALLM; + hdmi->fva =3D db[8] & DRM_EDID_FVA; + vrr->cnmvrr =3D db[8] & DRM_EDID_CNMVRR; + vrr->cinema_vrr =3D db[8] & DRM_EDID_CINEMA_VRR; + vrr->mdelta =3D db[8] & DRM_EDID_MDELTA; + + if (cea_db_payload_len(db) < 9) + return; + + vrr->vrr_min =3D db[9] & DRM_EDID_VRR_MIN_MASK; + vrr->supported =3D (vrr->vrr_min >=3D 1 && vrr->vrr_min <=3D 48); + + if (cea_db_payload_len(db) < 10) + return; + + vrr->vrr_max =3D (db[9] & DRM_EDID_VRR_MAX_UPPER_MASK) << 2 | db[10]; + vrr->supported &=3D (vrr->vrr_max =3D=3D 0 || vrr->vrr_max >=3D 100); +} + static void drm_parse_dsc_info(struct drm_hdmi_dsc_cap *hdmi_dsc, const u8 *hf_scds) { @@ -6274,7 +6301,7 @@ static void drm_parse_hdmi_forum_scds(struct drm_conn= ector *connector, } =20 drm_parse_ycbcr420_deep_color_info(connector, hf_scds); - + drm_parse_vrr_info(&connector->display_info.hdmi, hf_scds); if (cea_db_payload_len(hf_scds) >=3D 11 && hf_scds[11]) { drm_parse_dsc_info(hdmi_dsc, hf_scds); dsc_support =3D true; @@ -6284,6 +6311,18 @@ static void drm_parse_hdmi_forum_scds(struct drm_con= nector *connector, "[CONNECTOR:%d:%s] HF-VSDB: max TMDS clock: %d KHz, HDMI 2.1 support= : %s, DSC 1.2 support: %s\n", connector->base.id, connector->name, max_tmds_clock, str_yes_no(max_frl_rate), str_yes_no(dsc_support)); + drm_dbg_kms(connector->dev, + "[CONNECTOR:%d:%s] FAPA in blanking: %s, ALLM support: %s, Fast Vact= ive support: %s\n", + connector->base.id, connector->name, str_yes_no(hdmi->fapa_start_loc= ation), + str_yes_no(hdmi->allm), str_yes_no(hdmi->fva)); + drm_dbg_kms(connector->dev, + "[CONNECTOR:%d:%s] Negative M VRR support: %s, CinemaVRR support: %s= , Mdelta: %d\n", + connector->base.id, connector->name, str_yes_no(hdmi->vrr_cap.cnmvrr= ), + str_yes_no(hdmi->vrr_cap.cinema_vrr), hdmi->vrr_cap.mdelta); + drm_dbg_kms(connector->dev, + "[CONNECTOR:%d:%s] VRRmin: %u, VRRmax: %u, VRR supported: %s\n", + connector->base.id, connector->name, hdmi->vrr_cap.vrr_min, + hdmi->vrr_cap.vrr_max, str_yes_no(hdmi->vrr_cap.supported)); } =20 static void drm_parse_hdmi_deep_color_info(struct drm_connector *connector, diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h index 8f34f4b8183d..296f26551206 100644 --- a/include/drm/drm_connector.h +++ b/include/drm/drm_connector.h @@ -254,6 +254,41 @@ struct drm_scdc { struct drm_scrambling scrambling; }; =20 +/** + * struct drm_hdmi_vrr_cap - Information about VRR capabilities of a HDMI = sink + * + * Describes the VRR support provided by HDMI 2.1 sink. The information is + * fetched fom additional HFVSDB blocks defined for HDMI 2.1. + */ +struct drm_hdmi_vrr_cap { + /** @mcnmvrr: flag for Negative M VRR support by sink */ + bool cnmvrr; + + /** @mcinema_vrr: flag for Cinema VRR support by sink */ + bool cinema_vrr; + + /** @mdelta: flag for limited frame-to-frame compensation support */ + bool mdelta; + + /** + * @vrr_min : minimum supported variable refresh rate in Hz. + * Valid values only inide 1 - 48 range + */ + u16 vrr_min; + + /** + * @vrr_max : maximum supported variable refresh rate in Hz (optional). + * Valid values are either 0 (max based on video mode) or >=3D 100 + */ + u16 vrr_max; + + /** + * @supported: flag for vrr support based on checking for VRRmin and + * VRRmax values having correct values. + */ + bool supported; +}; + /** * struct drm_hdmi_dsc_cap - DSC capabilities of HDMI sink * @@ -330,6 +365,18 @@ struct drm_hdmi_info { /** @max_lanes: supported by sink */ u8 max_lanes; =20 + /** @fapa_start_location: flag for the FAPA in blanking support */ + bool fapa_start_location; + + /** @allm: flag for Auto Low Latency Mode support by sink */ + bool allm; + + /** @fva: flag for Fast Vactive support by sink */ + bool fva; + + /** @vrr_cap: VRR capabilities of the sink */ + struct drm_hdmi_vrr_cap vrr_cap; + /** @dsc_cap: DSC capabilities of the sink */ struct drm_hdmi_dsc_cap dsc_cap; }; --=20 2.52.0 From nobody Mon Feb 9 03:51:12 2026 Received: from mail-ed1-f46.google.com (mail-ed1-f46.google.com [209.85.208.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC9C234D901 for ; Tue, 13 Jan 2026 21:41:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768340476; cv=none; b=ryF7CoTrii6d22ur1tF+NmDtH+tFABH6ETr1suaCawsXslcwycO8ZNFCBzKBowFv3mlh07hm0D8d3q8U29xu5wCbWQPHth1EvcSk8yRog+awSYcAIQ3BO3kn44ehVPxkZYxWPsriNWnkmAZRvnAwnX1yVuZMbUfRhhDo4kEXWH8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768340476; c=relaxed/simple; bh=hapdsjjAHfTj0T8XyEvJ91ouMdZDY38B5pL1Tl9Nl00=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=kF5waNRkHfuegeKax3ZZ34HSRCdkUW+qKNZl4qjJ8/yog3GD3fW1Ln/pOCiNKcNzHewMk1TesZy2rg5wcZy+703zCp1i2rtoXNBtr2irP50p66CNPdbIRaVaprIDVGPSfgerADv6D91R28kzRJA+0/ahbae4Jz+px/1sbSsmu7k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Mvol8K4W; arc=none smtp.client-ip=209.85.208.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Mvol8K4W" Received: by mail-ed1-f46.google.com with SMTP id 4fb4d7f45d1cf-64b5b68a9bdso1334399a12.3 for ; Tue, 13 Jan 2026 13:41:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768340469; x=1768945269; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5TVnYGVRm+Z+bM0lIMVs1bFQFPxij1W9a0LrjLJBefs=; b=Mvol8K4WwNpe8pfChtKkJXzRbeBVUUGq9kD1haHUp736Nb1UMa6+l5yICt5ny1Kmuv iiwsLyaFiSoaZMLP3xl9QhJna1742A2IG74vkSjhioZWx/mnIGxFr3cj1L8kAmDOWN1u Ai6HmxCJpQHVHimMwA38Y/xQ/uvaFI9atgth0tEP/JIZ1EfiXOVUcLgeshBGvE1d8Lva ySWEYbXp8OmHHf6Sz9Xkkp9bv6m9o24e46OAcq2K6QFI0s+hnYakBBLNnLqh1GwHtaF2 3RCyFhpKEb4UWJbVWimOFr3/3CCroKOGl3ooptQol4cNCAJpYe+egp7+jsZipgJUKV8c 56/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768340469; x=1768945269; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=5TVnYGVRm+Z+bM0lIMVs1bFQFPxij1W9a0LrjLJBefs=; b=ikzsenRx5uwOkRRyx3e53M88WqYQ+Cot3cl5dlbNhEfcEpwYLQ8ghhng/+Tql3l+H3 RQs7mbVEyvSR4Ek67y//ABe67PiBYKSTaCXmCt+esaLewJi/rmwm+cKR4NGBvVweUK3k OJqyVx5YRykKzIAeUFkamax/q7kWfaWblnXEKeA58MWFGqMO0huV3+h6cuuSr9ji8Q3u FB+gHF3Abvq9XzopE7Jq9DAY06v2wBEjgBJeowCD7bkdD9ZvHpjaW+ncmLv+3lc6X/tr VCfwgFnhxqJQdK4Ydmn99oQcJBMANdDo9vJI+0sw4PxQphMaLnzQISFRsbpn1D0T3lLZ Jiww== X-Forwarded-Encrypted: i=1; AJvYcCWiOIkKxTBwtZzGYPMAfFpI6cqAa9J0lzxetzFhB8wbna2GB/+dVDtZbv/4uZRDEN5w2p88nwL2M270RbY=@vger.kernel.org X-Gm-Message-State: AOJu0YxD5zmR00dhiP6CvFiL5IFd+HXnSFxeuzs6FSlYj6Jx207z5joH T3Wux7CnbpOXdqGdu1d0urZZWHVLEik/TdJPBSyP6tfSlWA9xQlVOT6L X-Gm-Gg: AY/fxX6/zvNXCZfNjssE4Lkjan+sIXFreX4hwQziFQBTRN4Ilv/m97O/aQvCuyQBodI 69mtkfWirnWHYZiMHY31WJd5IhO/n2koLOJNnmTrslxp5ZqubUt60nO5++Vp6+wfDoTjBv1hG34 H5WgDgdUkhMOBwmj54h4yEPV2nycnD6PrrePfz6YbsdzERLyuOznK3dmzxMg0YjbWKNt1K8ISh6 5YRf9qPZy2oN7WZVhKgSOQTbmDvULF0mUgVkQBUpfxBeJwSsL4pnTvMx78qI7hYPO1MgjOIgX/9 fgCoHropdzbM5QsglFgqmkG1eOqWpJXr/f+6zu/lFkFok8o2/qVLyIhyFlbt8czkQFPY1wPsbXC Psj6mWxMX28A0WcLHve3mAbGLxry5+a1S878YlGG+r3ZifLTSzPkAI9Rru+nfn2Uj06eG7g4Sv6 ZwfnMhvQAjlh+hHxuUePxwbLxXUR1YTvhkJc+PyfktQaRlI+Yv+kqr6zR4inu5uR3R X-Received: by 2002:a05:6402:2816:b0:645:7d1b:e151 with SMTP id 4fb4d7f45d1cf-653ec1086d0mr204044a12.1.1768340469025; Tue, 13 Jan 2026 13:41:09 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6507bf6d5e0sm20858052a12.31.2026.01.13.13.41.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Jan 2026 13:41:08 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, harry.wentland@amd.com, sunpeng.li@amd.com, siqueira@igalia.com Cc: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/3] drm/amd/display: rename PCON adaptive sync types Date: Tue, 13 Jan 2026 22:41:03 +0100 Message-ID: <20260113214104.146856-3-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260113214104.146856-1-tomasz.pakula.oficjalny@gmail.com> References: <20260113214104.146856-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Make the name more generic for the upcoming HDMI VRR over PCON implementation Signed-off-by: Tomasz Paku=C5=82a Tested-by: Bernhard Berger --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 4 ++-- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 2 +- drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h | 4 ++-- drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) 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 7fe40bbba265..1318d88687ae 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -9342,7 +9342,7 @@ static void update_freesync_state_on_stream( =20 aconn =3D (struct amdgpu_dm_connector *)new_stream->dm_stream_context; =20 - if (aconn && (aconn->as_type =3D=3D FREESYNC_TYPE_PCON_IN_WHITELIST || ac= onn->vsdb_info.replay_mode)) { + if (aconn && (aconn->as_type =3D=3D ADAPTIVE_SYNC_TYPE_PCON_IN_WHITELIST = || aconn->vsdb_info.replay_mode)) { pack_sdp_v1_3 =3D aconn->pack_sdp_v1_3; =20 if (aconn->vsdb_info.amd_vsdb_version =3D=3D 1) @@ -13003,7 +13003,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, if (amdgpu_dm_connector->dc_link) as_type =3D dm_get_adaptive_sync_support_type(amdgpu_dm_connector->dc_li= nk); =20 - if (as_type =3D=3D FREESYNC_TYPE_PCON_IN_WHITELIST) { + if (as_type =3D=3D ADAPTIVE_SYNC_TYPE_PCON_IN_WHITELIST) { i =3D parse_hdmi_amd_vsdb(amdgpu_dm_connector, edid, &vsdb_info); if (i >=3D 0 && vsdb_info.freesync_supported && vsdb_info.amd_vsdb_versi= on > 0) { =20 diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/dr= ivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c index d0f770dd0a95..63dc9382c48e 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c @@ -1393,7 +1393,7 @@ enum adaptive_sync_type dm_get_adaptive_sync_support_= type(struct dc_link *link) if (dpcd_caps->adaptive_sync_caps.dp_adap_sync_caps.bits.ADAPTIVE_SYNC_S= DP_SUPPORT =3D=3D true && dpcd_caps->allow_invalid_MSA_timing_param =3D=3D true && dm_is_freesync_pcon_whitelist(dpcd_caps->branch_dev_id)) - as_type =3D FREESYNC_TYPE_PCON_IN_WHITELIST; + as_type =3D ADAPTIVE_SYNC_TYPE_PCON_IN_WHITELIST; break; default: break; diff --git a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h b/dr= ivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h index 66dc9a19aebe..91fe039c0c95 100644 --- a/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h +++ b/drivers/gpu/drm/amd/display/modules/inc/mod_info_packet.h @@ -44,8 +44,8 @@ void mod_build_hf_vsif_infopacket(const struct dc_stream_= state *stream, enum adaptive_sync_type { ADAPTIVE_SYNC_TYPE_NONE =3D 0, ADAPTIVE_SYNC_TYPE_DP =3D 1, - FREESYNC_TYPE_PCON_IN_WHITELIST =3D 2, - FREESYNC_TYPE_PCON_NOT_IN_WHITELIST =3D 3, + ADAPTIVE_SYNC_TYPE_PCON_IN_WHITELIST =3D 2, + ADAPTIVE_SYNC_TYPE_PCON_NOT_IN_WHITELIST =3D 3, ADAPTIVE_SYNC_TYPE_EDP =3D 4, }; =20 diff --git a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c = b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c index b3d55cac3569..429bc0ab86d6 100644 --- a/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c +++ b/drivers/gpu/drm/amd/display/modules/info_packet/info_packet.c @@ -535,12 +535,12 @@ void mod_build_adaptive_sync_infopacket(const struct = dc_stream_state *stream, if (stream !=3D NULL) mod_build_adaptive_sync_infopacket_v2(stream, param, info_packet); break; - case FREESYNC_TYPE_PCON_IN_WHITELIST: + case ADAPTIVE_SYNC_TYPE_PCON_IN_WHITELIST: case ADAPTIVE_SYNC_TYPE_EDP: mod_build_adaptive_sync_infopacket_v1(info_packet); break; case ADAPTIVE_SYNC_TYPE_NONE: - case FREESYNC_TYPE_PCON_NOT_IN_WHITELIST: + case ADAPTIVE_SYNC_TYPE_PCON_NOT_IN_WHITELIST: default: break; } --=20 2.52.0 From nobody Mon Feb 9 03:51:12 2026 Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B8EB234E777 for ; Tue, 13 Jan 2026 21:41:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768340476; cv=none; b=QsetLuPxRAUdoxBhqNddkhOhW9HHi47mhM9LS5R6qlbCkrIFDRip1i3dn1xQqzejGRTqcmyKcmzsjwhtSFFSLLVfGRjdG7JQ41Mjd1Y1HqW7uioVo4qnMBa2Csdzx+8ZZjq2DB/w84qV9YnJhi5hNFUGMLPYQwS1ErKTlsnFDo0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768340476; c=relaxed/simple; bh=Y+LJMaVDOEtnT2cg2K8RPgvuJ9HSWA0+kFg0LncYrPo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=YD0IcdU4PmvNrD9eAESwx592enHHcLqXs0pY7ShUG46qDr1f1C24BP9NRsiTF9+m0RMCSjLK3d6HS5bwEP3K2GD+F6OB2rd/qKgya4NbuJXGNWAMs6BExIZRupENfRws5r8Con47PJ06OtD8dgdMUKin2e1SiZLPTk/aQTz4vHI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=etbpaMjH; arc=none smtp.client-ip=209.85.208.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="etbpaMjH" Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-64b6f22bc77so1467944a12.1 for ; Tue, 13 Jan 2026 13:41:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768340470; x=1768945270; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=N4LHM++IvHyHjeqEMT100Kj5QFDlUAnoHSe0AnsGOac=; b=etbpaMjHlgacX8up9+NIguviLhw4D2KoKKddflYhaEeSDGovj+LdQyisnRH85R3972 pShm1jlC4qV4qngqFlvKS+mDQnfG2VovcLU5a69ZxjUPN08EYgm0cdFKSO3SevTg34So UB2QMi3b+BQGYjYvTHxTA8bnUFDIdulJaMYepVnmDB/npHCnXevONal/U+6AhBh/DLik 8mnfQo63pf4LJ0RtfbYigqZqx/GJMJRdNBdGTaWaOiSovY3/nIo9NvvRUO2X3PGj4sj6 XEyQtmJ3RolG0io7tvQpQr9li2YfE2bFm5gxFWsm7QTkdowlFkp9kHvsiLkqnRCJEfj/ DDrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768340470; x=1768945270; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=N4LHM++IvHyHjeqEMT100Kj5QFDlUAnoHSe0AnsGOac=; b=XVq1zpGhWrHs4vNTYvBtY9i+vLtsD7ebwEbtZNatupBXfBQtFSKyljFoepIvUpUYvm lm/XRzPr7bS0V4QD4tl4hg1OMEIlDMhebjDN1D2Q8tU9i/mkampET5N2ITHI4TcjsFyS H5K6PKxhsnK8hxKfnPaDZlk9BLsGLdpd/fuC33IYX3qTRtQPNm8Gsxr+bmQNfWZ+IzZ7 vyeR/xepxu3NoQVZj7aEBcxUz5panUvuYxA3vIP4Lsz2ABy/LHSvHCOqcUxdrJsGWGsS SXvdjVeDlylqmmCuIX/yHX7AR65Dvl5PfiLwgiTrolzEjpvrxPlwBbeNGx/mHCeRCZa8 99oQ== X-Forwarded-Encrypted: i=1; AJvYcCVFgq2eHOHf4IAid4TJW1nqjQJoJWG1jdTIGntP4WoRoh5oV5ID1v7b2OxZkPuYUf+G1mr/wK6SOMVyHTo=@vger.kernel.org X-Gm-Message-State: AOJu0Yymtm0oqrxzXxPe8Nr3BGi74iDqG9Kfd+9lArw7+ke8NJUd1/qy nOJuMn1upRpplXiX+1d+KLvo4mwo2t7wscGwbg6Wuo5HOFCIF9QHJtRY X-Gm-Gg: AY/fxX7BEK0eOGvXfEGetWQvpJBnFyn1YWrQQ6XTFojXUm4ztz68Zzv9uMFh2HCAUBk tAm2IosqBP6Xei6OBIFjvAgg3N6yf9vwNcsthgjsfwTL57/85MB3V6Hte8yn38ZTNwnAiXo+TOU 8Vcq3lUBS9LW6oTGCRdkgzpJ27bayXNoj5RsZDIprRczCA9acVuZ25P/uhTwPte5/mkDpoYm9jE lwb8doHjczOWLwh5tbGwEE15IjTpnwJYeUk0U2B0hJ9PG9+8WKa/nnV8p4uJLHIGmEc7SQVPEKT AfphlRQqnMph5KqUv0HU9m7PUZ32DfUD8NQntgo1HxCDX5PgU+x8B1sGNtBrtvNZcwsLIRRTin0 NBjeAaHtdMeCdNISYJtF8uwZPXnDFzFTTf7MR121fziO8mMqDj1jAm3NLmeyC4pVn/TCXwE0Z4q 8vhpVFiawBYBQBv1n3/yh8I/41uUyHgZUPaFBRHGOX48yZG9l8LGNrVyhz6rLIImVR X-Received: by 2002:a05:6402:2816:b0:645:7d1b:e151 with SMTP id 4fb4d7f45d1cf-653ec1086d0mr204062a12.1.1768340470025; Tue, 13 Jan 2026 13:41:10 -0800 (PST) Received: from laptok.lan (87-205-5-123.static.ip.netia.com.pl. [87.205.5.123]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6507bf6d5e0sm20858052a12.31.2026.01.13.13.41.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Jan 2026 13:41:09 -0800 (PST) From: =?UTF-8?q?Tomasz=20Paku=C5=82a?= To: alexander.deucher@amd.com, maarten.lankhorst@linux.intel.com, mripard@kernel.org, tzimmermann@suse.de, airlied@gmail.com, simona@ffwll.ch, harry.wentland@amd.com, sunpeng.li@amd.com, siqueira@igalia.com Cc: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/3] drm/amd/display: enable HDMI VRR over PCON Date: Tue, 13 Jan 2026 22:41:04 +0100 Message-ID: <20260113214104.146856-4-tomasz.pakula.oficjalny@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260113214104.146856-1-tomasz.pakula.oficjalny@gmail.com> References: <20260113214104.146856-1-tomasz.pakula.oficjalny@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable This works the same as FreeSync over PCON just without sending FreeSync info packets (we're sending standard DisplayPort info packets) + reading the VRR range from the HDMI Forum vendor specific data block. PCONs take over HDMI VRR triggering. Prefer HDMI VRR over FreeSync to reduce VRR flickering on many TVs. FreeSync over HDMI seems to be a fallback solution and not a first-class citizen. This especially helps VMM7100. In case of VRRmin =3D=3D 0, the selected video mode is the upper boundary. Tested with VMM7100 and CH7218 based adapters on multiple HDMI 2.1 and HDMI 2.0 devices. (Samsung S95B, LG C4, Sony Bravia 8, Dell AW3423DWF) Fixes: https://gitlab.freedesktop.org/drm/amd/-/issues/4805 Signed-off-by: Tomasz Paku=C5=82a Tested-by: Bernhard Berger --- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) 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 1318d88687ae..53f3c88c7cdc 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -12932,6 +12932,7 @@ void amdgpu_dm_update_freesync_caps(struct drm_conn= ector *connector, struct dc_sink *sink; struct amdgpu_device *adev =3D drm_to_adev(connector->dev); struct amdgpu_hdmi_vsdb_info vsdb_info =3D {0}; + struct drm_hdmi_vrr_cap *hdmi_vrr; const struct edid *edid; bool freesync_capable =3D false; enum adaptive_sync_type as_type =3D ADAPTIVE_SYNC_TYPE_NONE; @@ -13004,21 +13005,37 @@ void amdgpu_dm_update_freesync_caps(struct drm_co= nnector *connector, as_type =3D dm_get_adaptive_sync_support_type(amdgpu_dm_connector->dc_li= nk); =20 if (as_type =3D=3D ADAPTIVE_SYNC_TYPE_PCON_IN_WHITELIST) { + hdmi_vrr =3D &connector->display_info.hdmi.vrr_cap; i =3D parse_hdmi_amd_vsdb(amdgpu_dm_connector, edid, &vsdb_info); - if (i >=3D 0 && vsdb_info.freesync_supported && vsdb_info.amd_vsdb_versi= on > 0) { =20 + /* Prefer HDMI VRR over FreeSync */ + if (hdmi_vrr->supported) { + /* VRRmax =3D=3D 0 is a valid value. Selected mode is the upper boundar= y. */ + u16 vrr_max =3D hdmi_vrr->vrr_max ? hdmi_vrr->vrr_max : 10000; + + amdgpu_dm_connector->pack_sdp_v1_3 =3D true; + amdgpu_dm_connector->as_type =3D as_type; + + amdgpu_dm_connector->min_vfreq =3D hdmi_vrr->vrr_min; + amdgpu_dm_connector->max_vfreq =3D vrr_max; + + connector->display_info.monitor_range.min_vfreq =3D hdmi_vrr->vrr_min; + connector->display_info.monitor_range.max_vfreq =3D vrr_max; + + } else if (i >=3D 0 && vsdb_info.freesync_supported && vsdb_info.amd_vsd= b_version > 0) { amdgpu_dm_connector->pack_sdp_v1_3 =3D true; amdgpu_dm_connector->as_type =3D as_type; amdgpu_dm_connector->vsdb_info =3D vsdb_info; =20 amdgpu_dm_connector->min_vfreq =3D vsdb_info.min_refresh_rate_hz; amdgpu_dm_connector->max_vfreq =3D vsdb_info.max_refresh_rate_hz; - if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 1= 0) - freesync_capable =3D true; =20 connector->display_info.monitor_range.min_vfreq =3D vsdb_info.min_refre= sh_rate_hz; connector->display_info.monitor_range.max_vfreq =3D vsdb_info.max_refre= sh_rate_hz; } + + if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 10) + freesync_capable =3D true; } =20 update: --=20 2.52.0