From patchwork Mon Sep 24 18:15:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kazlauskas, Nicholas" X-Patchwork-Id: 10612773 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3C06B112B for ; Mon, 24 Sep 2018 18:15:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 22979296A8 for ; Mon, 24 Sep 2018 18:15:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1577A2A192; Mon, 24 Sep 2018 18:15:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id AB9EF296A8 for ; Mon, 24 Sep 2018 18:15:56 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 338786E084; Mon, 24 Sep 2018 18:15:54 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0085.outbound.protection.outlook.com [104.47.42.85]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4FC516E021; Mon, 24 Sep 2018 18:15:51 +0000 (UTC) Received: from CY4PR12CA0034.namprd12.prod.outlook.com (2603:10b6:903:129::20) by SN1PR12MB0432.namprd12.prod.outlook.com (2a01:111:e400:5865::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1143.15; Mon, 24 Sep 2018 18:15:49 +0000 Received: from CO1NAM03FT029.eop-NAM03.prod.protection.outlook.com (2a01:111:f400:7e48::206) by CY4PR12CA0034.outlook.office365.com (2603:10b6:903:129::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1164.22 via Frontend Transport; Mon, 24 Sep 2018 18:15:49 +0000 Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) Received: from SATLEXCHOV01.amd.com (165.204.84.17) by CO1NAM03FT029.mail.protection.outlook.com (10.152.80.168) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.20.1185.13 via Frontend Transport; Mon, 24 Sep 2018 18:15:48 +0000 Received: from kazbox.amd.com (10.180.168.240) by SATLEXCHOV01.amd.com (10.181.40.71) with Microsoft SMTP Server id 14.3.389.1; Mon, 24 Sep 2018 13:15:46 -0500 From: Nicholas Kazlauskas To: , Subject: [PATCH v2 0/3] A DRM API for adaptive sync and variable refresh rate support Date: Mon, 24 Sep 2018 14:15:34 -0400 Message-ID: <20180924181537.12092-1-nicholas.kazlauskas@amd.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:165.204.84.17; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(396003)(376002)(39860400002)(136003)(346002)(2980300002)(428003)(189003)(199004)(478600001)(53936002)(486006)(86362001)(50226002)(77096007)(26005)(186003)(4326008)(6666003)(5660300001)(356003)(2906002)(305945005)(16586007)(68736007)(2616005)(126002)(476003)(81156014)(6306002)(97736004)(1076002)(8936002)(53416004)(106466001)(8676002)(217873002)(426003)(105586002)(110136005)(36756003)(81166006)(336012)(54906003)(44832011)(48376002)(966005)(7696005)(14444005)(50466002)(5024004)(47776003)(316002)(104016004)(51416003)(72206003); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1PR12MB0432; H:SATLEXCHOV01.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoDomainNonexistent; MX:1; A:1; X-Microsoft-Exchange-Diagnostics: 1; CO1NAM03FT029; 1:EBl7kv5c7wBJ2MXtJXRExlAHcNBcOrUQu2H9wh5Kh9Ym/SfiXROJa3qniJlKpKsQJjjWfSdbwJJSiq6JsGDAhN4VQ3EUbuQBSk4rrd2PeDuWM+ZPhif2fCvClmYOEGqI X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ae470f19-0db2-4b77-484f-08d62249c130 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534165)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060); SRVR:SN1PR12MB0432; X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0432; 3:VruaO51p6doESfeJy3ELZ7Us+TyJbrkhexmgrHEaBriTFvjixX8OBm0xnKGjtcH5+la60yD4TZM1EZasolHL8DMB9Beil72S2a5kiz32+OT0e9wHP7AeTi19c0m62UhOElrAFst0pVjAM+YIcRD0I64dzuxTqSQ6s9Z55CgxmzLQMufJxZ9GMXtIrPUtM7H9ktpTfDdXHSDto0iY25JzQ5vwA5rRAmJVtU1rg20rHpZhLSn4xRqk2PmxPABfuoBqYsyuEkekSAdYci5jdASgESNV6XhZZ/5XFPEaKws/5UEUujNaj7NizF8yO2FVjnGQl8vmaQE4BE/Ls+bZUJD/x7rla0gRX7FUb1yxIGOlc/0=; 25:pwJv+aUXRSjVb1d98f6MWCgA+YhH8Bv/76BfH3KUiKkm/nUqcCwTghj1bMUinkPchh2TSupVkB3Da7u5EbbKhz+QcDvpH2UZBdyamfBWlx0N0vbI+ixcU1e5GV3T6sxbRxPjQqUiCKCNfyelwLNgtm3RyvOI/drrDfEiHdhZbb8OaxsuJsps2B24LSCT7U6mfpgwumPwgyCQHD5eCWIjgN4nyD+l2oz3bfIbU1aVTI7MLvCkK7+iokVcOKMtphCChr2i6PpqlmupjvpxI+xMR3WU4fLOGALcYGfNMa+S5+LlKNWQXFwm1bqa2MkMikRkrQ79wjmfdDAEVZGFsm2sog== X-MS-TrafficTypeDiagnostic: SN1PR12MB0432: X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0432; 31:Mr5BQl8QMf7pPkOcXTp2QE2s5EtCWVd5CW11e9p8K7yjUpn3kwRFHO88n86ZIScENaFFTzSEnso8lkGy5HjDeU80AARKwf0e+9QY7LHDuDFV1F+93JWEoEyxEFSvUQyUskvo0tA9cwqbLC1dKWSCGD1wNvNFZCz4lPRCn5rVYZrWrHEztcYUIUZidZlLAkoTBUIkzJYDMzU6Tl3aRrwpPkVXtdhEbzs3aqiia5ziroU=; 20:57t4e65+zXqvWJLndUwNDhsRkQFfX2suzO4DKccagXfZmDKYsSpztvSVMu0GbphpRFAH9B/GD/4nw2J/TTkYsEM+xTCfI158TF2YKtYRkTUVNaJtvUidTQCwH/SJVpiyPANJBoUkoDQ7nrj1pKXTFt5qA7lSnIiYg8/H4FvMYvAmIkHgtWvW3y47QYs1zwArmYGHkUGpTy+QUNyCXAjz1UFDmX+SYlr4RTna/cs8dGihGWO/l15bWSisNiwdnj348dopnOWMgrI+xoBSTXxLiznz1fiJqcdhymiTyxLkCe0s9cJrpjDy0pGZ6vvpFhWYOdEAp6zJdVqb2qKiGS7fG56HI6xh1OzgSWJ1duIcr/acmbA+n80E4AL0f1SZwvh2fsezFEtRada2FM8O0zv2Jf4TtBSc3S6zPcbjUjWBngwMZ5KUiImavf+EY9V60ymWDkbcqAi+X2W/SP/KVw6mCx9RDu6bq8GgGyAIrKI/7ZKglQx/PutXiG571fc9pUL5 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(5213294742642)(217544274631240); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231355)(944501410)(52105095)(10201501046)(93006095)(93003095)(3002001)(6055026)(149066)(150027)(6041310)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123564045)(20161123562045)(201708071742011)(7699051); SRVR:SN1PR12MB0432; BCL:0; PCL:0; RULEID:; SRVR:SN1PR12MB0432; X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0432; 4:MGm/nv8SREplLsK+g9BavDRfatxwIRIhNV6kc6QqW7icgc1f377wJohWGWfwZ1Pql7ZVY9Zsw2AMx6epDAGTwUyHoF9ZFZDAWu273lgC4MmvwvmI2TQDI5vpXSkgF8/jV5UFLg2MrP3naVDAcKN3m8+MZZzm46wTXCbd+nQ57Bx/7GZyQT5R935e0B/Sxyw0A4VK+HkraPHoMrh6DmEqO9YTSTIJFekTFz8/k6nQGqLk2lz8StYhssn8XdcPO9CzUoz1zZE1Vh9Jvk0g+thU/vKHWNw9ysLtXHGiJCcUpW4iSazLevivjUxNC1X1b21CccV2xpiMBOVADV9XE6fmm8qclOqWHYVv/K86K7/haMQ= X-Forefront-PRVS: 0805EC9467 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN1PR12MB0432; 23:V6nO1c2CC+1m2Z1liYzqLdwDI7Co+5LkHszDqYw7U?= 2C+APPic9uggSWSrpb5nclHuacLqoEuxgjYa/JoUUFADcDqRp7hQBGkLmTJK1lSmU3EYbtzj7ZbEnYq90qYDwkBbvj/Kg3VGsfIW86BpBGX3qjbtPmFntLjTP8qWj3oyN6t8FTEECovVnMWNH6PFSJk0wX1nlMe68stcSMm9iE0drDLC1QF0RovaYx0bqqRqzfAmFH9num0k11p5GV3ClWW2lOBXPIqX5Cdwdqq4opQHO1Z7Y9221K5X+8sVzvLPuTbfdMd1hDnzNSfa3WMi0FSAUZbh5Xo0hBRQXOgoCIbFfnmaI+RRdD7zVd0WaoLKWGA3jjWRhJoAFDPsXXlEwDSmjUGKn9zDoLWDPh7GjCNGwOwDeo+bCvtA5br5N6UsD5XeyBagRerPMoNtPaxPwcrvxn7zi1hNfGPoeHWgxoZBSoXuaHIP91yUVwAsVnUtwqt35uYGeGfP2CSlgog6DQr5VzEw5Pl2zOKXf3F0oh9qrfElOzOX9ILsrgZOyDmxGeh553Jkdny4e+auzQxkB6UFrb7v3MhnB/mDgNJWovSAHzbcWaqrTuFcorQ1oeLMUDqEShQ/3I0LGRKV0ha2d+jUWeLZCmYjU1ad6JB6WBE7JsO2eTjUJElekjrVMaDw+lyixAa7WDLzMyA+lZmlb/MgMC5DYeRifI0HI9mulxw2HFwM8bTa9Oc+2K6wD0i0MoZf8VNgPC283zMKCPpg6HtrnYcGcAHKix8ubgFD7YMkOHa25lzWL8DD1q9/wylFJ7mdy1NUArwNhcESY1DOXWdBfy0BA1+XrYMiPSznnhitv03nSKuFOGzWjB3QELx1qxUo4hFyvGZ1i1JBd4GphXC6i8CSS8s3vctg2OW0u7xph+QYJKpZZBfDUUgFRZDCexuMbm0piTAzz5Jwt62MTRaFP5Sc14lQ4rE9vLAe9I4yCOvmpc0dizjPJIgWiuIgHF/WFC5WraG65Ji+uthSB2yCT2wqMY+oXSJU1FoK6lnuXO/POr/dHkQc3FxeJA+r30JOUTIt85L65ZUZFWJD5oWRaJj9hYOdT5/Fm3G/dSdT4XAg1gkU2rhBbG2ByL8Oe/RTS5oODN60x/vxk+nagvvAOPpRT6s33SUWWWExmh8OTVtLV4v1Q3Ju6rZrVCo9LYt0YiOFtmU0hrhDim9tfYpJGbVWwlwWqqhutZQHuyaHA== X-Microsoft-Antispam-Message-Info: uRAgiFIxqg29dZxlcm6/LNsG0GLGvdWa6YJNWhozKdpndHupu40btQtsCi1O1pEp07s+2Iu47ecpucoARTZ1OiOrdTC6dGgjtR31HbeZqo1BJf2vbm3nHCyF6rhf1lzphQrQD3Afhzb/mf+cyrmXdO3a77r1/Z/++hREO4a1tIOMtleLWMLeTnXI5hd/GlABvXDI79d05hISviW1zPfg4UNQtOZVZ9K13SqrGj0m4CQuX9C79yAk1NreNcnXfFXwqfv48glpP/FCfdTmJ5Fpd2gEHeQyZQ/YtufxnWvuXtl0rNydPvkp+yDeTiUkd6x3odOor+0QlIAW3AiFpDB0U+A4Ur1itQeTYAFUaEHxyBI= X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0432; 6:7uq93LMeakl13LNygYr6nJrIHDQod3eSeYpzvEOgmUnFOtqN6woBadI5QOqCZjHtmSUnptCPxByFswNKJ9BJwITkszEk3bl3rfL8uc65BdX2LGWndlpj2qAa0ZE0t2qzkLiF7s3oQ2OG8owxCpRqMIuvnQFtTm9o995241ETN0uFVOecR/t1we5VLTMgoDOFxKsGWfdh21NEppPUd2EktOp0p7Jrcc8G5euob3RiKJ/HaSGhaKbZaBc42xTF00le6mjMp5E1oOzROvTzlqLlTGGdCtC//ZNPbAK9HOKtEg2KyaZzvJT56auAydnUSdsqEc3jwvgGj8TZyV5o52CUma24w3XqvRph3/aCjHrciS+k232x2WTQKqRNFDHpwPeZx2re/CkVdXsW3u5lFWLDnT9OV4+yWZoH8mGm4mJn+UJCn/BcZuKCL3ZVA0oQAJPGMVNSdzDTmeEu9ycqOCWZQA==; 5:2u0YL104IUFj20Q+rvKQjeIHwoY7HC0OjoCPgEq9dyezcpt5LaeXBZCNBAZomJjGyA6LdTaMlKN9l0Qd7W9UCkEiYTGvin4+u3ItW/y3pFNC5T7dHMiPC9pi6iQy3Ogmsx8S0NQYGaAKEN74NLuVWtpkgqgnAgnqxQJFNTd8vCg=; 7:mMrnyWfSjcn3IHwhrrh/BhlqRvbWJznaBBzGobgMBh9B6id9AOKS6RMVDhjTr/Il+EB6pStaQDJJinSzpMsmyvF3Ue/EWKzEosnbDUWKCi+/bWM0d9AJtnIY+59VSnsRwMWXcM2T3D2UgCZm4deC7ITm3xe84wS44ZRgzwW+/1KEbL6cphPnMewjgf6gnEVNsi75qb3wITJGBXXADsCvQVP0oHWFwYiUp8frxSgCtlPNFAUuRBd/uAR79ZpKuzCF SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN1PR12MB0432; 20:I8ZnM+Gm90FInktlxpfEBIGkb/Br6mLLOHXLGNM9YgHhdVWW+2h7i2NYN0wRcdUo8eOz9NClMyIgmDdDPPp3CLHmLnlSGtVtZasNjjpWGgs7szo5GX4z7nztKAfxl1275p3KHs06+5fV4pvaG1PMoVdZMAk+e9L/mCJSLnDqRWyXHgXGqiu/4x8WrYggxzMD/ccnMoA0GpmpvZhWKUkf4tfa1mW6daNN6rJO8bNgbCPefSTEm5iZl0l3apFMRBGF X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Sep 2018 18:15:48.5190 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ae470f19-0db2-4b77-484f-08d62249c130 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[SATLEXCHOV01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB0432 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: nicolai.haehnle@amd.com, michel@daenzer.net, Christian.Koenig@amd.com, manasi.d.navare@intel.com, Alexander.Deucher@amd.com, Nicholas Kazlauskas , Marek.Olsak@amd.com Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP These patches are part of a proposed new interface for supporting variable refresh rate via DRM properties. === Changes from v1 === For drm: * The variable_refresh_capable property is now flagged as DRM_MODE_PROP_IMMUTABLE For drm/gpu/amd/display: * Patches no longer pull in IOCTL/FreeSync refactoring code * FreeSync enable/disable behavior has been modified to reflect changes in userspace behavior from xf86-video-amdgpu and mesa === Adaptive sync and variable refresh rate === Adaptive sync is part of the DisplayPort spec and allows for graphics adapters to drive displays with varying frame timings. Variable refresh rate (VRR) is essentially the same, but defined for HDMI. === Use cases for variable refresh rate === Variable frame (flip) timings don't align well with fixed refresh rate displays. This results in stuttering, tearing and/or input lag. By adjusting the display refresh rate dynamically these issues can be reduced or eliminated. However, not all content is suitable for dynamic refresh adaptation. Content that is flipped infrequently or at random intervals tends to fair poorly. Multiple clients trying to flip under the same screen can similarly interfere with prediction. Userland needs a way to let the driver know when the content on the screen is suitable for variable refresh rate and if the user wishes to have the feature enabled. === DRM API to support variable refresh rates === This patch introduces a new API via atomic properties on the DRM connector and CRTC. The connector has two new optional properties: * bool variable_refresh_capable - set by the driver if the hardware is capable of supporting variable refresh tech * bool variable_refresh_enabled - set by the user to enable variable refresh adjustment over the connector The CRTC has one additional default property: * bool variable_refresh - a content hint to the driver specifying that the CRTC contents are suitable for variable refresh adjustment == Overview for DRM driver developers === Driver developers can attach the optional connector properties via drm_connector_attach_variable_refresh_properties on connectors that support variable refresh (typically DP or HDMI). The variable_refresh_capable property should be managed as the output on the connector changes. The property is read only from userspace. The variable_refresh_enabled property is intended to be a property controlled by userland as a global on/off switch for variable refresh technology. It should be checked before enabling variable refresh rate. === Overview for Userland developers == The variable_refresh property on the CRTC should be set to true when the CRTCs are suitable for variable refresh rate. In practice this is probably an application like a game - a single window that covers the whole CRTC surface and is the only client issuing flips. To demonstrate the suitability of the API for variable refresh and dynamic adaptation there are additional patches using this API that implement adaptive variable refresh across kernel and userland projects: * DRM (dri-devel) * amdgpu DRM kernel driver (amd-gfx) * xf86-video-amdgpu (amd-gfx) * mesa (mesa-dev) These patches enable adaptive variable refresh on X for AMD hardware provided that the user sets the variable_refresh_enabled property to true on supported connectors (ie. using xrandr --set-prop). The patches have been tested as working on upstream userland with the GNOME desktop environment under a single monitor setup. They also work on KDE in single monitor setup if the compositor is disabled. The patches require that the application window can issue screen flips via the Present extension to xf86-video-amdgpu. Due to Present extension limitations some desktop environments and multi-monitor setups are currently not compatible. Full implementation details for these changes can be reviewed in their respective mailing lists. === Previous discussions === These patches are based upon feedback from patches and feedback from two previous threads on the subject which are linked below for reference: https://lists.freedesktop.org/archives/amd-gfx/2018-April/021047.html https://lists.freedesktop.org/archives/dri-devel/2017-October/155207.html https://lists.freedesktop.org/archives/dri-devel/2018-September/189404.html Nicholas Kazlauskas Nicholas Kazlauskas (3): drm: Add variable refresh rate properties to connector drm: Add variable refresh property to DRM CRTC drm/amd/display: Set FreeSync state using DRM VRR properties .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 232 +++++++++--------- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 6 +- drivers/gpu/drm/drm_atomic_helper.c | 1 + drivers/gpu/drm/drm_atomic_uapi.c | 12 + drivers/gpu/drm/drm_connector.c | 35 +++ drivers/gpu/drm/drm_crtc.c | 2 + drivers/gpu/drm/drm_mode_config.c | 6 + include/drm/drm_connector.h | 27 ++ include/drm/drm_crtc.h | 13 + include/drm/drm_mode_config.h | 8 + 10 files changed, 225 insertions(+), 117 deletions(-)