From patchwork Wed Nov 22 16:19:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Almeida?= X-Patchwork-Id: 168428 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2b07:b0:403:3b70:6f57 with SMTP id io7csp1442719vqb; Wed, 22 Nov 2023 08:22:07 -0800 (PST) X-Google-Smtp-Source: AGHT+IF76nS27dipLy3zXUg6iM6Zrx0BK1/hFHaguLuf+kU4EmQlZmTYtD0X37bTpPFIDe0vVztX X-Received: by 2002:a05:6820:169e:b0:57b:8ff1:f482 with SMTP id bc30-20020a056820169e00b0057b8ff1f482mr3266213oob.0.1700670126899; Wed, 22 Nov 2023 08:22:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700670126; cv=none; d=google.com; s=arc-20160816; b=q9F/5l8EgCU05YhpZoPOqI4vNx8UyIMmgG5KsQ/BYtSoqJUHGovEGi1HkCNhviywmS tM7v/A82AX0Uq9qoCBqnfnqRN/RmXLde6rIv+tbjCS+uPkqzjmmPzovL2LkjyjKM0yVR DrIK0nCmdpLlNcsNg0S5HmXjJ8Ny20E8P8DwJ4q/hjbrmFSRq3imHrFstGMowUZP+i0n laMC6BQQyZ6FRhxtBqflUq4f5kHkD7LUFaFCploiydhu4VY/rPq6+RiaB1Nuhx1QG/pl jBmmtZJOJz+2isKypJ/J20sKQ9ziWrZI6xLx5EBbQBx2i72+cgeg+YMROgPhHcI4UgKl 5Y1Q== 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=6oQ05sxUVSUOtFBVscV1RsI7xjS53GqoZMmDxVRMp58=; fh=twETL0X6hiFtzuU124rNjRfRDx+3Jx2TyWjVxuU3kZI=; b=fTMNhX2KamI7PjNqQhEqbrQQknMMmjloszxTg2IvJIn+HPRSSTMxohp1iKBk7Uh0T2 HjjjqtB3PtFTcFWcP9ek3JYtYcR2t8bXV54oKtUGfmymD+xGL2fYe40QY/LIkaTZnB/V U0sghubmL9LxoRjnoSQr8s6ilKYHpsbYBYjKyeASILE2lrzYHPB3xhVmujRDepLzV5G3 tBOZO8kIPkHqNpQeLoF8SESIULrgjlf1KvaU9atnQ0L2HL8qHaohOCVpqk0VE61oF1x6 tZmsflpGZYr8YP60A3dwObnuWdq7gRcIIAQbKkba/qJjDta1iwtsdU4BS0E7FfIF7It9 U8+A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=kL81kjGg; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id a190-20020a6366c7000000b005c217868866si11255382pgc.507.2023.11.22.08.21.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Nov 2023 08:22:06 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=kL81kjGg; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id AA3B28032370; Wed, 22 Nov 2023 08:21:01 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231767AbjKVQUu (ORCPT + 99 others); Wed, 22 Nov 2023 11:20:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48508 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231701AbjKVQUn (ORCPT ); Wed, 22 Nov 2023 11:20:43 -0500 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 784EF1B8 for ; Wed, 22 Nov 2023 08:20:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=6oQ05sxUVSUOtFBVscV1RsI7xjS53GqoZMmDxVRMp58=; b=kL81kjGgJG3ESkR+MXvVpiOJbM eXut4DmzTPdBstrbtpU+KIyTGUEAneMWE6MP9pTwRfNU6i+yHNrqIT0l6mFPb6iKhupmqN3FzaFd8 j7Ob12FgoYyiVz+G0MOY9+aMk5MxH9r1LR7Xfvx4K1JmIhfHivtxvsqp3/8GUssJB4Gc18rzbvn3d Dsp7XACwxeMucz4Zo2F3EbGwIQ8ByobEKuvHHl8wPTWJRpSWb2DvWerEuxVJ8yWdzIdLSO/FoSKrn H20FPZ0ypYyiO3YgXmJ2MFsy1lKwbR62n29BWnGf0p/4uP1Wybqez5ScTQs1LbvkyVDn+tI6rGoDd 56+9y2/w==; Received: from 189-69-166-209.dial-up.telesp.net.br ([189.69.166.209] helo=steammachine.lan) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1r5pxn-0061lT-KF; Wed, 22 Nov 2023 17:20:32 +0100 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: kernel-dev@igalia.com, alexander.deucher@amd.com, christian.koenig@amd.com, pierre-eric.pelloux-prayer@amd.com, Simon Ser , Rob Clark , Pekka Paalanen , daniel@ffwll.ch, Daniel Stone , =?utf-8?b?J01hcmVrIE9sxaHDoWsn?= , Dave Airlie , =?utf-8?q?Michel_D=C3=A4nzer?= , Randy Dunlap , ville.syrjala@linux.intel.com, intel-gfx@lists.freedesktop.org, =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v9 1/4] drm: Refuse to async flip with atomic prop changes Date: Wed, 22 Nov 2023 13:19:38 -0300 Message-ID: <20231122161941.320564-2-andrealmeid@igalia.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20231122161941.320564-1-andrealmeid@igalia.com> References: <20231122161941.320564-1-andrealmeid@igalia.com> MIME-Version: 1.0 X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Wed, 22 Nov 2023 08:21:02 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783281878831683773 X-GMAIL-MSGID: 1783281878831683773 Given that prop changes may lead to modesetting, which would defeat the fast path of the async flip, refuse any atomic prop change for async flips in atomic API. The only exception is the framebuffer ID to flip to. Currently the only plane type supported is the primary one. Signed-off-by: André Almeida Reviewed-by: Simon Ser --- v9: no changes v8: add a check for plane type, we can only flip primary planes v7: drop the mode_id exception for prop changes --- drivers/gpu/drm/drm_atomic_uapi.c | 52 +++++++++++++++++++++++++++-- drivers/gpu/drm/drm_crtc_internal.h | 2 +- drivers/gpu/drm/drm_mode_object.c | 2 +- 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c index 98d3b10c08ae..ed46133a2dd7 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -1006,13 +1006,28 @@ int drm_atomic_connector_commit_dpms(struct drm_atomic_state *state, return ret; } +static int drm_atomic_check_prop_changes(int ret, uint64_t old_val, uint64_t prop_value, + struct drm_property *prop) +{ + if (ret != 0 || old_val != prop_value) { + drm_dbg_atomic(prop->dev, + "[PROP:%d:%s] No prop can be changed during async flip\n", + prop->base.id, prop->name); + return -EINVAL; + } + + return 0; +} + int drm_atomic_set_property(struct drm_atomic_state *state, struct drm_file *file_priv, struct drm_mode_object *obj, struct drm_property *prop, - uint64_t prop_value) + uint64_t prop_value, + bool async_flip) { struct drm_mode_object *ref; + uint64_t old_val; int ret; if (!drm_property_change_valid_get(prop, prop_value, &ref)) @@ -1029,6 +1044,13 @@ int drm_atomic_set_property(struct drm_atomic_state *state, break; } + if (async_flip) { + ret = drm_atomic_connector_get_property(connector, connector_state, + prop, &old_val); + ret = drm_atomic_check_prop_changes(ret, old_val, prop_value, prop); + break; + } + ret = drm_atomic_connector_set_property(connector, connector_state, file_priv, prop, prop_value); @@ -1044,6 +1066,13 @@ int drm_atomic_set_property(struct drm_atomic_state *state, break; } + if (async_flip) { + ret = drm_atomic_crtc_get_property(crtc, crtc_state, + prop, &old_val); + ret = drm_atomic_check_prop_changes(ret, old_val, prop_value, prop); + break; + } + ret = drm_atomic_crtc_set_property(crtc, crtc_state, prop, prop_value); break; @@ -1051,6 +1080,7 @@ int drm_atomic_set_property(struct drm_atomic_state *state, case DRM_MODE_OBJECT_PLANE: { struct drm_plane *plane = obj_to_plane(obj); struct drm_plane_state *plane_state; + struct drm_mode_config *config = &plane->dev->mode_config; plane_state = drm_atomic_get_plane_state(state, plane); if (IS_ERR(plane_state)) { @@ -1058,6 +1088,21 @@ int drm_atomic_set_property(struct drm_atomic_state *state, break; } + if (async_flip && prop != config->prop_fb_id) { + ret = drm_atomic_plane_get_property(plane, plane_state, + prop, &old_val); + ret = drm_atomic_check_prop_changes(ret, old_val, prop_value, prop); + break; + } + + if (async_flip && plane_state->plane->type != DRM_PLANE_TYPE_PRIMARY) { + drm_dbg_atomic(prop->dev, + "[OBJECT:%d] Only primary planes can be changed during async flip\n", + obj->id); + ret = -EINVAL; + break; + } + ret = drm_atomic_plane_set_property(plane, plane_state, file_priv, prop, prop_value); @@ -1337,6 +1382,7 @@ int drm_mode_atomic_ioctl(struct drm_device *dev, struct drm_out_fence_state *fence_state; int ret = 0; unsigned int i, j, num_fences; + bool async_flip = false; /* disallow for drivers not supporting atomic: */ if (!drm_core_check_feature(dev, DRIVER_ATOMIC)) @@ -1450,8 +1496,8 @@ int drm_mode_atomic_ioctl(struct drm_device *dev, goto out; } - ret = drm_atomic_set_property(state, file_priv, - obj, prop, prop_value); + ret = drm_atomic_set_property(state, file_priv, obj, + prop, prop_value, async_flip); if (ret) { drm_mode_object_put(obj); goto out; diff --git a/drivers/gpu/drm/drm_crtc_internal.h b/drivers/gpu/drm/drm_crtc_internal.h index 6b646e0783be..c05c9ee9c859 100644 --- a/drivers/gpu/drm/drm_crtc_internal.h +++ b/drivers/gpu/drm/drm_crtc_internal.h @@ -253,7 +253,7 @@ int drm_atomic_set_property(struct drm_atomic_state *state, struct drm_file *file_priv, struct drm_mode_object *obj, struct drm_property *prop, - uint64_t prop_value); + uint64_t prop_value, bool async_flip); int drm_atomic_get_property(struct drm_mode_object *obj, struct drm_property *property, uint64_t *val); diff --git a/drivers/gpu/drm/drm_mode_object.c b/drivers/gpu/drm/drm_mode_object.c index ac0d2ce3f870..0e8355063eee 100644 --- a/drivers/gpu/drm/drm_mode_object.c +++ b/drivers/gpu/drm/drm_mode_object.c @@ -538,7 +538,7 @@ static int set_property_atomic(struct drm_mode_object *obj, obj_to_connector(obj), prop_value); } else { - ret = drm_atomic_set_property(state, file_priv, obj, prop, prop_value); + ret = drm_atomic_set_property(state, file_priv, obj, prop, prop_value, false); if (ret) goto out; ret = drm_atomic_commit(state); From patchwork Wed Nov 22 16:19:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Almeida?= X-Patchwork-Id: 168429 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2b07:b0:403:3b70:6f57 with SMTP id io7csp1443184vqb; Wed, 22 Nov 2023 08:22:49 -0800 (PST) X-Google-Smtp-Source: AGHT+IHuzIbTmJNSlhmWLNXfNCpfw2BLzlQYOpURYCZov2+JVINg08pq+tX2mNvMWsBnb82YkOpJ X-Received: by 2002:a17:903:2601:b0:1cf:6b8f:5b0b with SMTP id jd1-20020a170903260100b001cf6b8f5b0bmr2236906plb.4.1700670168987; Wed, 22 Nov 2023 08:22:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700670168; cv=none; d=google.com; s=arc-20160816; b=rpmtbLHZyq5UL1UXfryQt4K/Iy9he9XxLQJVcZ6PKfrP2As3cKJNsvwH2qUfC496my YqmoZXmv6KYNxmxkvflPyb0R++MG4Edu2dbNPXMg0LaWZ/Dvzzbq/qLRYZmjgUEX1dtG X9at7RzdHDKUcq5TEnNpceKZmNEGJ3MUptjCEar6nsZCqS3CZ6eWrCfU74KmFBVj3RRg J2uq16AL5X3NGZ4oTDx7hYYvCBt01Rj0tfeKGVy0M0hqPpsnK/q4W+nuuf8dToEaFeif DCvHIC+6vf9uCJNO2bMPgy8r+R29D16X4WwizLFbfWMpHWXsi3IsUVVBvBVd9n359lmt G/Pg== 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=F4k94dWeA9E9cnOAfUovq7CO/D9PnaeF/xo2VAuyrQ8=; fh=twETL0X6hiFtzuU124rNjRfRDx+3Jx2TyWjVxuU3kZI=; b=vogLIwMGTVbPnI9MlCF6sMBM1j0xjpm4GMOshRTK50D5vDUXGAwVnLzQOk+ado2UZK c/fFkwaqZH71dtNgqvxY4+xXQGJ8t52suTvshDTqDBI0NoWqJUlCqFDyeaoaYnyiacc5 WqKzfavrwksqYQQWfRYLbCuJULgK9RkavQHFbwSs2aSepn27hq/m2kiJRu3OhZAL9UrY fUWBN1pg1bzO42mwLWDdU6/VCg7AeuNAfZNM4PCN67bkKcXiiAWDgIJsP0tOb7LEYvQJ CDp81ZnmQh9V2yj7+G+RiZL00qxGnO3cvmbSxHWnOE0TnDLRiLVU4otk2uZAbKoDTEOr o2Gg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=nJBdGwjv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id x9-20020a170902ec8900b001cf6a75e972si5130019plg.136.2023.11.22.08.22.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Nov 2023 08:22:48 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=nJBdGwjv; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 990468070713; Wed, 22 Nov 2023 08:20:44 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229991AbjKVQUp (ORCPT + 99 others); Wed, 22 Nov 2023 11:20:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48532 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231709AbjKVQUn (ORCPT ); Wed, 22 Nov 2023 11:20:43 -0500 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AE1659F for ; Wed, 22 Nov 2023 08:20:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=F4k94dWeA9E9cnOAfUovq7CO/D9PnaeF/xo2VAuyrQ8=; b=nJBdGwjvU0dNBeukokNJqEIt7q NFXNy1p2tlY4GBZFgTcFSWqROlfrIIN6rZ7Fv/i6Rk5NFGzjEKS94pUIrnDizTttanSJQrW+0ZY2M 0rE4g0GrVr+OO/SUHU+45K8EpMIbFv7CIrB5fN4FSl+ULA0QMv0RFyEeA5MSamvEKMYQmrrKzfJGt wJ2tSDKWa+Zz+uoXQixgEXr/wiRRdg+le9/bvVarqqJIkIe5atEnnnKwoIVhS7FF+hhsymFhYC1Zb en9mBJ6qTNWfs7I0nbkWCwX5u6V0k2A6omOOsr10aFvS56D0zR4/xJHGfY0f9Fsft9RDGzAmgmODI E6wV9pMQ==; Received: from 189-69-166-209.dial-up.telesp.net.br ([189.69.166.209] helo=steammachine.lan) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1r5pxs-0061lT-RP; Wed, 22 Nov 2023 17:20:37 +0100 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: kernel-dev@igalia.com, alexander.deucher@amd.com, christian.koenig@amd.com, pierre-eric.pelloux-prayer@amd.com, Simon Ser , Rob Clark , Pekka Paalanen , daniel@ffwll.ch, Daniel Stone , =?utf-8?b?J01hcmVrIE9sxaHDoWsn?= , Dave Airlie , =?utf-8?q?Michel_D=C3=A4nzer?= , Randy Dunlap , ville.syrjala@linux.intel.com, intel-gfx@lists.freedesktop.org, =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v9 2/4] drm: allow DRM_MODE_PAGE_FLIP_ASYNC for atomic commits Date: Wed, 22 Nov 2023 13:19:39 -0300 Message-ID: <20231122161941.320564-3-andrealmeid@igalia.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20231122161941.320564-1-andrealmeid@igalia.com> References: <20231122161941.320564-1-andrealmeid@igalia.com> MIME-Version: 1.0 X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Wed, 22 Nov 2023 08:20:44 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783281923054107435 X-GMAIL-MSGID: 1783281923054107435 From: Simon Ser If the driver supports it, allow user-space to supply the DRM_MODE_PAGE_FLIP_ASYNC flag to request an async page-flip. Set drm_crtc_state.async_flip accordingly. Document that drivers will reject atomic commits if an async flip isn't possible. This allows user-space to fall back to something else. For instance, Xorg falls back to a blit. Another option is to wait as close to the next vblank as possible before performing the page-flip to reduce latency. Signed-off-by: Simon Ser Reviewed-by: Alex Deucher Co-developed-by: André Almeida Signed-off-by: André Almeida --- v9: dropped atomic_async_page_flip_not_supported --- drivers/gpu/drm/drm_atomic_uapi.c | 25 ++++++++++++++++++++++--- include/uapi/drm/drm_mode.h | 9 +++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c index ed46133a2dd7..de4265423ddc 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -1368,6 +1368,18 @@ static void complete_signaling(struct drm_device *dev, kfree(fence_state); } +static void +set_async_flip(struct drm_atomic_state *state) +{ + struct drm_crtc *crtc; + struct drm_crtc_state *crtc_state; + int i; + + for_each_new_crtc_in_state(state, crtc, crtc_state, i) { + crtc_state->async_flip = true; + } +} + int drm_mode_atomic_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv) { @@ -1409,9 +1421,13 @@ int drm_mode_atomic_ioctl(struct drm_device *dev, } if (arg->flags & DRM_MODE_PAGE_FLIP_ASYNC) { - drm_dbg_atomic(dev, - "commit failed: invalid flag DRM_MODE_PAGE_FLIP_ASYNC\n"); - return -EINVAL; + if (!dev->mode_config.async_page_flip) { + drm_dbg_atomic(dev, + "commit failed: DRM_MODE_PAGE_FLIP_ASYNC not supported\n"); + return -EINVAL; + } + + async_flip = true; } /* can't test and expect an event at the same time. */ @@ -1514,6 +1530,9 @@ int drm_mode_atomic_ioctl(struct drm_device *dev, if (ret) goto out; + if (arg->flags & DRM_MODE_PAGE_FLIP_ASYNC) + set_async_flip(state); + if (arg->flags & DRM_MODE_ATOMIC_TEST_ONLY) { ret = drm_atomic_check_only(state); } else if (arg->flags & DRM_MODE_ATOMIC_NONBLOCK) { diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h index 09e7a471ee30..95630f170110 100644 --- a/include/uapi/drm/drm_mode.h +++ b/include/uapi/drm/drm_mode.h @@ -957,6 +957,15 @@ struct hdr_output_metadata { * Request that the page-flip is performed as soon as possible, ie. with no * delay due to waiting for vblank. This may cause tearing to be visible on * the screen. + * + * When used with atomic uAPI, the driver will return an error if the hardware + * doesn't support performing an asynchronous page-flip for this update. + * User-space should handle this, e.g. by falling back to a regular page-flip. + * + * Note, some hardware might need to perform one last synchronous page-flip + * before being able to switch to asynchronous page-flips. As an exception, + * the driver will return success even though that first page-flip is not + * asynchronous. */ #define DRM_MODE_PAGE_FLIP_ASYNC 0x02 #define DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE 0x4 From patchwork Wed Nov 22 16:19:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Almeida?= X-Patchwork-Id: 168430 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2b07:b0:403:3b70:6f57 with SMTP id io7csp1443842vqb; Wed, 22 Nov 2023 08:23:55 -0800 (PST) X-Google-Smtp-Source: AGHT+IGQU2dg0IKdza4WYyiJbo8I17ltRTs8PTGgwYX/r9g2ThASLPjZTmsMFIXcxkiOYeDxMWns X-Received: by 2002:a17:90b:1bcf:b0:27d:2108:af18 with SMTP id oa15-20020a17090b1bcf00b0027d2108af18mr3424205pjb.25.1700670235240; Wed, 22 Nov 2023 08:23:55 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700670235; cv=none; d=google.com; s=arc-20160816; b=LWYPYMhvtgHmiq4G0zcDwgl/VEkYHsNmu5eXjXPmtrwm+6FJfQXrhL/oWM+JaDMEUh Dwb/EIbl2O6nRz5fRQB5mS9KpV+m3Wh5+t6vEJRDwNNDCww6IDKoXpHhJO+LSXALHBlT 8Ctxib5d76ylwA8J/BiiILWKi4WiWYgPO/wADQ3BhwCHZ7M4lE7ulRQN4zyk33iNAmNd 89nsSDZBTh8RM1GgqZe8Jngnsux7JslFRGkAYitsawYuaONBsl/6ftIidxulKSlIZVX3 m0mXcHHVpaXXUqAKLD/lQnnWd1gIqTr83//vIrRDpch47NrCo4aiRqEmm8kYZFuKEFrA +Tow== 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=EoeKWmvDXudVDgBjqkb0Elm6Q/W5MOXGYpVoR+3DovU=; fh=twETL0X6hiFtzuU124rNjRfRDx+3Jx2TyWjVxuU3kZI=; b=O701UDUJt74kF8DurRX1oVDkA87i8q5zEN+TysoWntj+VE+U604kI7vPUFfS5pCmA2 E1/wILYwHlyqh/yW0f4RV4Wzcdziz8MaSZ2VaVBtKHyo1HFDKKazXC/eUxv/LuXy4Ne1 VpjRCksVSN3XtF2irxgBGPhBASySj9v5XVjoBHCrrgfHFxxlB1b6vE7AUvUnjY+fm2wp 3ujZhLebqNfgW5hqKfcIjMz3X0fQhv7Zc35PvwhGjn0j98SCR6dJKPcbbFvim+IawmeC /z5XdKZ6Nn82UBj88EhbA7xhe4ALZ7AvqNY0Ajw+jGXe4kJYsJUFTjtW7UVEFBtX1yrR eajg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=kBl4FtPD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id bo15-20020a17090b090f00b002769b4b64e7si1702778pjb.20.2023.11.22.08.23.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Nov 2023 08:23:55 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=kBl4FtPD; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 685A080ABFD5; Wed, 22 Nov 2023 08:21:13 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232386AbjKVQU5 (ORCPT + 99 others); Wed, 22 Nov 2023 11:20:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48558 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231690AbjKVQUt (ORCPT ); Wed, 22 Nov 2023 11:20:49 -0500 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BB262CB for ; Wed, 22 Nov 2023 08:20:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=EoeKWmvDXudVDgBjqkb0Elm6Q/W5MOXGYpVoR+3DovU=; b=kBl4FtPD7uxqELbnBF1EFvRV+a h0XRGQqlyMOEtK3X2w9uqu8OrBIb3VOBJVfkG1HK44qZqg6atuvWUtKcNYRmphjdwmcsMGCn2rwcQ OnhSTQ37w9l0hfbx/xPtVeOa3am3Hp9d3JskkauIkxltgk8fpUYk38plfJ7zbzVEGQw0lcizZj0Uu kgGWGUMTUrgNQWYlE/q+ljulSs0gW54d35L8/owlE4+6z7i/I6gCVTljfQAM8yKAljGXE4HgASUW1 GpRh3uDWGZnXvWj/oKfwBn5Moa+z4PHxhVY4EtLTS1P7yjiT1AeBenhjt3lYySY8UNrd+oU6Eq3BD ntc26zpg==; Received: from 189-69-166-209.dial-up.telesp.net.br ([189.69.166.209] helo=steammachine.lan) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1r5pxy-0061lT-2B; Wed, 22 Nov 2023 17:20:42 +0100 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: kernel-dev@igalia.com, alexander.deucher@amd.com, christian.koenig@amd.com, pierre-eric.pelloux-prayer@amd.com, Simon Ser , Rob Clark , Pekka Paalanen , daniel@ffwll.ch, Daniel Stone , =?utf-8?b?J01hcmVrIE9sxaHDoWsn?= , Dave Airlie , =?utf-8?q?Michel_D=C3=A4nzer?= , Randy Dunlap , ville.syrjala@linux.intel.com, intel-gfx@lists.freedesktop.org, =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v9 3/4] drm: introduce DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP Date: Wed, 22 Nov 2023 13:19:40 -0300 Message-ID: <20231122161941.320564-4-andrealmeid@igalia.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20231122161941.320564-1-andrealmeid@igalia.com> References: <20231122161941.320564-1-andrealmeid@igalia.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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 X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Wed, 22 Nov 2023 08:21:14 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783281992982928901 X-GMAIL-MSGID: 1783281992982928901 From: Simon Ser This new kernel capability indicates whether async page-flips are supported via the atomic uAPI. DRM clients can use it to check for support before feeding DRM_MODE_PAGE_FLIP_ASYNC to the kernel. Make it clear that DRM_CAP_ASYNC_PAGE_FLIP is for legacy uAPI only. Signed-off-by: Simon Ser Reviewed-by: André Almeida Reviewed-by: Alex Deucher Signed-off-by: André Almeida --- v9: no changes --- --- drivers/gpu/drm/drm_ioctl.c | 4 ++++ include/uapi/drm/drm.h | 10 +++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index 44fda68c28ae..f461ed862480 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -301,6 +301,10 @@ static int drm_getcap(struct drm_device *dev, void *data, struct drm_file *file_ case DRM_CAP_CRTC_IN_VBLANK_EVENT: req->value = 1; break; + case DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP: + req->value = drm_core_check_feature(dev, DRIVER_ATOMIC) && + dev->mode_config.async_page_flip; + break; default: return -EINVAL; } diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h index 8662b5aeea0c..796de831f4a0 100644 --- a/include/uapi/drm/drm.h +++ b/include/uapi/drm/drm.h @@ -713,7 +713,8 @@ struct drm_gem_open { /** * DRM_CAP_ASYNC_PAGE_FLIP * - * If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC. + * If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC for legacy + * page-flips. */ #define DRM_CAP_ASYNC_PAGE_FLIP 0x7 /** @@ -773,6 +774,13 @@ struct drm_gem_open { * :ref:`drm_sync_objects`. */ #define DRM_CAP_SYNCOBJ_TIMELINE 0x14 +/** + * DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP + * + * If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC for atomic + * commits. + */ +#define DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP 0x15 /* DRM_IOCTL_GET_CAP ioctl argument type */ struct drm_get_cap { From patchwork Wed Nov 22 16:19:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Almeida?= X-Patchwork-Id: 168431 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2b07:b0:403:3b70:6f57 with SMTP id io7csp1443859vqb; Wed, 22 Nov 2023 08:23:57 -0800 (PST) X-Google-Smtp-Source: AGHT+IGBIFgOjMWIuIVmbz+yxk4s4A6+niFkpGLIL1CWMnC0CAMxzvPwRRmz0UYydmcVqHlmHQQB X-Received: by 2002:a05:6a00:1a91:b0:68f:f650:3035 with SMTP id e17-20020a056a001a9100b0068ff6503035mr2904093pfv.12.1700670236739; Wed, 22 Nov 2023 08:23:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700670236; cv=none; d=google.com; s=arc-20160816; b=vCRUmUG6EPgzh9pFwCIz3vGYlTWLND25T9yB2srkZRh2DkuD/qVBjNzu7XFaBR4lgP w7azJ3aBX3ygEt7cmTKjKn2v9EWTodwCbcokVPsGSfnOc7QSN5OW+At/yZNqCTJCeBtZ x12zJq4y76l8Kx8Z7zswQ5dPQgnPmCx7zpz5LHNoYnPcaz9L3ZlxagpncaNdeGq0VyQX YtxviCSezjBcPYBHdc2JbX/aiTFpurzR/8Ni4NSftJq80stv7id2OVSeFrHJmH47rKKk 8z/Z1knl3/LChAcLgMjaBaFMRVVZx8edml7UsPHh3feF3UjjpDHdpiE41kfT43aqBygm YLMw== 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=LgiP6k4b25j6JdOl1t3vzbWpalkz+TaPG+lRilXJhV0=; fh=loKY2ocQdNgn+dXueaTNGmytblF8w/n8A1xyLuplAXA=; b=zzCgqhLAH3kjmI7ILgn9kZXWcBQIDAFa9TFRsvO3OIIsNYnJwlDbGiFJpw4aJ4tNg2 CvjV0TW93Ysnvty85wjUUOzAV/uVVR2tTI+LgioM8fJo2GRvhg6kXuyGkerJ+3Uy+OvT dem/3rdyrme552dFtvItp1pEcY72sBZ0ZtH2ysvlTgaPHjtBqZ3XK+GAYpnzcYhyTFuN ub8K0fjEbhbA8T1PIx5HoDnm5//oD1mFlGAvcb0ETe8H/C4hIoPgcDUzloQ/7kMBCamU /HVgWYM7SWlzQ2nUK8FCnUDUIvr0MzPY1ckBoSDP0ey26hQH/xgg6ErTP4A41ngo680x l34w== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=QUMPjg4Y; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id by11-20020a056a02058b00b005b64e8336dfsi13845363pgb.604.2023.11.22.08.23.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Nov 2023 08:23:56 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=QUMPjg4Y; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id DB18480CF54D; Wed, 22 Nov 2023 08:21:18 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232824AbjKVQVD (ORCPT + 99 others); Wed, 22 Nov 2023 11:21:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47296 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232644AbjKVQU6 (ORCPT ); Wed, 22 Nov 2023 11:20:58 -0500 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AAC481B8 for ; Wed, 22 Nov 2023 08:20:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=LgiP6k4b25j6JdOl1t3vzbWpalkz+TaPG+lRilXJhV0=; b=QUMPjg4YQvQo+GWFK/4494HEuy rDbyp+KIU3owVzNlGUlll01Ecxk0G5hSpLUk1kYdO5RVPKm9qYBlnXSrnFJGx695NoaHrAG842lFe 5UyEqnz66VZR4ydlO49u3LFEtJcAbsLs7DS26s7fFoQavfPZkt8lEFzzjpiwYM0MnCU2QmzdprWZA ImjWX+UpkODk0aIWKOONuZ7SrGKK3p7CT2cNfkl3k4JcUg0BCBSheK67BExi7+rLI0/nZBYbq2pd7 CobE7liFqYjf7kfeVOPgGSJYWs25ygFn0Li48MqB3lL25Hb8SwWMT5g+nUt16DzaqafSSnKTxh09R kybx9Bcg==; Received: from 189-69-166-209.dial-up.telesp.net.br ([189.69.166.209] helo=steammachine.lan) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1r5py3-0061lT-FC; Wed, 22 Nov 2023 17:20:47 +0100 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: kernel-dev@igalia.com, alexander.deucher@amd.com, christian.koenig@amd.com, pierre-eric.pelloux-prayer@amd.com, Simon Ser , Rob Clark , Pekka Paalanen , daniel@ffwll.ch, Daniel Stone , =?utf-8?b?J01hcmVrIE9sxaHDoWsn?= , Dave Airlie , =?utf-8?q?Michel_D=C3=A4nzer?= , Randy Dunlap , ville.syrjala@linux.intel.com, intel-gfx@lists.freedesktop.org, Pekka Paalanen , =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v9 4/4] drm/doc: Define KMS atomic state set Date: Wed, 22 Nov 2023 13:19:41 -0300 Message-ID: <20231122161941.320564-5-andrealmeid@igalia.com> X-Mailer: git-send-email 2.42.1 In-Reply-To: <20231122161941.320564-1-andrealmeid@igalia.com> References: <20231122161941.320564-1-andrealmeid@igalia.com> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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 X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Wed, 22 Nov 2023 08:21:19 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783281994272669234 X-GMAIL-MSGID: 1783281994272669234 From: Pekka Paalanen Specify how the atomic state is maintained between userspace and kernel, plus the special case for async flips. Signed-off-by: Pekka Paalanen Signed-off-by: André Almeida --- v9: - no changes v8: - no changes v7: - add a note that drivers can make exceptions for ad-hoc prop changes - add a note about flipping the same FB_ID as a no-op --- --- Documentation/gpu/drm-uapi.rst | 47 ++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/Documentation/gpu/drm-uapi.rst b/Documentation/gpu/drm-uapi.rst index 370d820be248..d0693f902a5c 100644 --- a/Documentation/gpu/drm-uapi.rst +++ b/Documentation/gpu/drm-uapi.rst @@ -570,3 +570,50 @@ dma-buf interoperability Please see Documentation/userspace-api/dma-buf-alloc-exchange.rst for information on how dma-buf is integrated and exposed within DRM. + +KMS atomic state +================ + +An atomic commit can change multiple KMS properties in an atomic fashion, +without ever applying intermediate or partial state changes. Either the whole +commit succeeds or fails, and it will never be applied partially. This is the +fundamental improvement of the atomic API over the older non-atomic API which is +referred to as the "legacy API". Applying intermediate state could unexpectedly +fail, cause visible glitches, or delay reaching the final state. + +An atomic commit can be flagged with DRM_MODE_ATOMIC_TEST_ONLY, which means the +complete state change is validated but not applied. Userspace should use this +flag to validate any state change before asking to apply it. If validation fails +for any reason, userspace should attempt to fall back to another, perhaps +simpler, final state. This allows userspace to probe for various configurations +without causing visible glitches on screen and without the need to undo a +probing change. + +The changes recorded in an atomic commit apply on top the current KMS state in +the kernel. Hence, the complete new KMS state is the complete old KMS state with +the committed property settings done on top. The kernel will try to avoid +no-operation changes, so it is safe for userspace to send redundant property +settings. However, not every situation allows for no-op changes, due to the +need to acquire locks for some attributes. Userspace needs to be aware that some +redundant information might result in oversynchronization issues. No-operation +changes do not count towards actually needed changes, e.g. setting MODE_ID to a +different blob with identical contents as the current KMS state shall not be a +modeset on its own. As a special exception for VRR needs, explicitly setting +FB_ID to its current value is not a no-op. + +A "modeset" is a change in KMS state that might enable, disable, or temporarily +disrupt the emitted video signal, possibly causing visible glitches on screen. A +modeset may also take considerably more time to complete than other kinds of +changes, and the video sink might also need time to adapt to the new signal +properties. Therefore a modeset must be explicitly allowed with the flag +DRM_MODE_ATOMIC_ALLOW_MODESET. This in combination with +DRM_MODE_ATOMIC_TEST_ONLY allows userspace to determine if a state change is +likely to cause visible disruption on screen and avoid such changes when end +users do not expect them. + +An atomic commit with the flag DRM_MODE_PAGE_FLIP_ASYNC is allowed to +effectively change only the FB_ID property on any planes. No-operation changes +are ignored as always. Changing any other property will cause the commit to be +rejected. Each driver may relax this restriction if they have guarantees that +such property change doesn't cause modesets. Userspace can use TEST_ONLY commits +to query the driver about this.