From patchwork Fri Jul 7 22:40:54 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: 117321 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f45:0:b0:3ea:f831:8777 with SMTP id v5csp3581135vqx; Fri, 7 Jul 2023 15:44:26 -0700 (PDT) X-Google-Smtp-Source: APBJJlFROGT/ZwWwU2NrOlex1iIEPxJWE7e76xlFeXeMmLac0Aa9vOndNRmy20GxQMb9SX2Tuiql X-Received: by 2002:a05:6358:7e43:b0:134:e301:2c21 with SMTP id p3-20020a0563587e4300b00134e3012c21mr6925255rwm.15.1688769866368; Fri, 07 Jul 2023 15:44:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688769866; cv=none; d=google.com; s=arc-20160816; b=ljfxPKrYfkSRgBQFWQ0G7lAKmRuUANhq5vgaDGOJpCMOJ3HJsep/Lvi3GmnoECkpx6 Jc6s/lit9PqmKOXP1B+wCLu42zKMDCp+COu9KInURBy/h5l211TrQMkSMrcW9FrfHgbP U5TjUF87UT5hyywl+S6jYb7lhO9erTWQVCxSuMm6pj0u10kWb8yjo+HJFPBhyVmwgaUF dd2KvOFe7xxmhfei6KE5QtiTpwBxKLLmldNWr5t+ofMA+SlRZhyAyKEsGomZArOtrPeR 7PxebNXJ80q6wMWggHydciQ3DvkgUgy546hAZDihbUc1XRVIKOniEzv6i4V6C3wrIfud hVIw== 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=lbvpM8EakHHy+USxQroX9eqPrbtC1pudfZEWMIGGBk8=; fh=qbfaDyBg+GqerSAvcu3kFTx3mMThVk/CBXk9qNOf42k=; b=Y79Jv+OOHMuEaNV/PBvBN7S2cNNoEN2fmUHrhDyXtCKiXOGJw5EW2fgv5hOeZ2tks9 kH0ZDJnwcBPex1u/BkCBHAOPEBp0Jmm8QLpNxQsOPWcVAngqOFdRzAMcEtF5GNW8d2ia hEnZv30j05K0c5Lmg/h7bYg3ToKeXajapAevyQyJk0ZWqdViy4jBmrFwVsgRx/MA7YtH /KRrEqzi//jx0VCuA/dlTDoMVSo8Le+Vkfl5zHD2q50tRkWFC8/+qPMQdl3WdsCWbZrX 1oFP3EfXMayLCUVAGyOxPJbhZQ6QaBW/noKuJpraOqHYkfEYZnGxAGIQ7WVmkX6GKfPH ujzQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=fxyL4ff7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d11-20020a170903230b00b001b8904eadb8si4779278plh.460.2023.07.07.15.44.14; Fri, 07 Jul 2023 15:44:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=fxyL4ff7; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231761AbjGGWl2 (ORCPT + 99 others); Fri, 7 Jul 2023 18:41:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55430 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229458AbjGGWlZ (ORCPT ); Fri, 7 Jul 2023 18:41:25 -0400 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9A692211F for ; Fri, 7 Jul 2023 15:41:20 -0700 (PDT) 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=lbvpM8EakHHy+USxQroX9eqPrbtC1pudfZEWMIGGBk8=; b=fxyL4ff7fQ10YsgKGvzcUVvtFI p+2pbiSuengbOyfgEX7mZ8lXTSI7tvgLAA0dOfvWZbKBDdrQoK3o6Rs2VoYq4zyxZvN0rlD8cO7pG YfMidR8hIZr8UzR4e5moUaoCGOwy/d0ckun1CfGkjvo1iUkUUpGQPIDRAAFlskonw2nMb7QBSOaVJ 40F9r34Sw5jG6SkQfJmd/Q9EppE9UPaYuNiMRfE7+TrYixL44oxhldYgDRDCKWLXWhbDL33OZTYw+ BS2OeCGbK4yDJqf+B6CtYA858He/2hJoE5nn/uK8flf06YY+yocKKDRhkv/FqSDLsnMZbN0108553 qjfmS/Aw==; Received: from [187.74.70.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 1qHu8b-00AP6e-Cf; Sat, 08 Jul 2023 00:41:17 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, wayland-devel@lists.freedesktop.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 Vetter , Daniel Stone , =?utf-8?b?J01hcmVrIE9sxaHDoWsn?= , Dave Airlie , =?utf-8?q?Michel_D=C3=A4nzer?= , Randy Dunlap , hwentlan@amd.com, joshua@froggi.es, ville.syrjala@linux.intel.com, =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v5 1/6] drm: allow DRM_MODE_PAGE_FLIP_ASYNC for atomic commits Date: Fri, 7 Jul 2023 19:40:54 -0300 Message-ID: <20230707224059.305474-2-andrealmeid@igalia.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230707224059.305474-1-andrealmeid@igalia.com> References: <20230707224059.305474-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,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED 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-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1770803551375429760?= X-GMAIL-MSGID: =?utf-8?q?1770803551375429760?= 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 --- v4: no changes --- drivers/gpu/drm/drm_atomic_uapi.c | 28 +++++++++++++++++++++++++--- include/uapi/drm/drm_mode.h | 9 +++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c index d867e7f9f2cd..dfd4cf7169df 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -1286,6 +1286,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) { @@ -1326,9 +1338,16 @@ 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; + } + if (dev->mode_config.atomic_async_page_flip_not_supported) { + drm_dbg_atomic(dev, + "commit failed: DRM_MODE_PAGE_FLIP_ASYNC not supported with atomic\n"); + return -EINVAL; + } } /* can't test and expect an event at the same time. */ @@ -1426,6 +1445,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 46becedf5b2f..56342ba2c11a 100644 --- a/include/uapi/drm/drm_mode.h +++ b/include/uapi/drm/drm_mode.h @@ -949,6 +949,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 Fri Jul 7 22:40:55 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: 117322 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f45:0:b0:3ea:f831:8777 with SMTP id v5csp3583857vqx; Fri, 7 Jul 2023 15:52:36 -0700 (PDT) X-Google-Smtp-Source: APBJJlHPmjV+m4rq7/iWd1Trg8Hxtvuu0SEiZc2ZPJqOVJHylK+1dq2b6xC4YBG/DMaKIVPN9gPu X-Received: by 2002:a05:620a:2a05:b0:767:4246:1f83 with SMTP id o5-20020a05620a2a0500b0076742461f83mr9055446qkp.49.1688770356386; Fri, 07 Jul 2023 15:52:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688770356; cv=none; d=google.com; s=arc-20160816; b=Zm8xZySF/S9vwrp/WnCcvOfvTVpGLr14nslkZX9lSvMwZZUOXmtNPKAMWji/rK36p6 2pxqHrj/ea0VDG1iEN61Pgafxr+MfzL+sy2YK+s0VcRE4SK+EzN1ZUAi6WMbTp9r55vG hcs000HcCCoDLkRm9vN57Y2MLWELd9J8MFoVjhOxepK3cMLR2nhyD9egQR5mRtuKrqQ4 ta5pw5FKhVMjl0PoFhJxxvQfYiMRAEA1Pa0MmIvYYcLegYDHNiWbhEZ7FGfiOCNqFzqm A1zDu4rjxN2qg2/UNq6+GogV/AB56kMN2XxM5k7tdL0h+VSdpFIeJjgIXoEcckKbS/b6 C6wA== 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=HPO0XUJvL8MHQ9quXzm+tMdaWyxXHw4tFqRhJIQaDP4=; fh=qbfaDyBg+GqerSAvcu3kFTx3mMThVk/CBXk9qNOf42k=; b=ytuyj7GYuM5n3qF7jyQpsw0XJOJLflcblUc5N38gJLBduTYPEraXgESYw8IpGD3vz6 +xYP37t/2YNhkOAdiUHpD28GSx0Ofo+O9vd4WLr/6IxBurycRaVw7SS4An3CVg4BWh/8 3Hh0kex2V27+0yJHwG7PjTYiZPYHud6T/kNknz4YTJ8kd9D2oUfSu1I4/xEHlJvvDViu pM2yeRytu67O2Awne1gEG5cCxeUxoN5u5UM4ZcVjSVm142sqwkGxV0tC4xSv8wTeAlo9 JWNDUVOjdB7LZyp02OkiGjDdf/wraDTrnFLHggRhgbgNtnoBlanvM2Ml130tr8m0Nqc2 ShOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=WTX3qzd2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f8-20020a056a00238800b00682b0b7ed43si4914469pfc.368.2023.07.07.15.52.21; Fri, 07 Jul 2023 15:52:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=WTX3qzd2; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232134AbjGGWle (ORCPT + 99 others); Fri, 7 Jul 2023 18:41:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55440 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231245AbjGGWlZ (ORCPT ); Fri, 7 Jul 2023 18:41:25 -0400 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 067D82127 for ; Fri, 7 Jul 2023 15:41:25 -0700 (PDT) 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=HPO0XUJvL8MHQ9quXzm+tMdaWyxXHw4tFqRhJIQaDP4=; b=WTX3qzd2WgPiBRfVMnXdnjDkIL Xt0tfRouRdRFvzV9YPftRJk2trpmEsvBPLJ3D9GGBpRcqsdmC3apU+KoZ5BevgZl1busI9l1mz1MX dtEbJ8YtsgDv8dP5mjdbKsYbZwa1kJk+tsOEoQYojXADWMlZ2IGsalDpPFlEjQ+UyeD8VEn0v9y/f 1FYs9V5hbFaNNJESmn9mUNJwKbqoTQIdH4KGiu9u13tEyygtJzkwXu9k4IfYdINwhUT7Z14RheXdD WiZK9OgNzgh2o0/gnmbdoWqgMLK9hsdO9jNq2dgHu1j+lonJ72Y9Wja+HW/W4unSa+/MXqRb8n3lZ ma9X2ryQ==; Received: from [187.74.70.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 1qHu8g-00AP6e-Aw; Sat, 08 Jul 2023 00:41:22 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, wayland-devel@lists.freedesktop.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 Vetter , Daniel Stone , =?utf-8?b?J01hcmVrIE9sxaHDoWsn?= , Dave Airlie , =?utf-8?q?Michel_D=C3=A4nzer?= , Randy Dunlap , hwentlan@amd.com, joshua@froggi.es, ville.syrjala@linux.intel.com, =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v5 2/6] drm: introduce DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP Date: Fri, 7 Jul 2023 19:40:55 -0300 Message-ID: <20230707224059.305474-3-andrealmeid@igalia.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230707224059.305474-1-andrealmeid@igalia.com> References: <20230707224059.305474-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,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED 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-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1770804065151385438?= X-GMAIL-MSGID: =?utf-8?q?1770804065151385438?= 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 --- v4: no changes --- drivers/gpu/drm/drm_ioctl.c | 5 +++++ include/uapi/drm/drm.h | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index 7c9d66ee917d..8f756b99260d 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -302,6 +302,11 @@ 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 && + !dev->mode_config.atomic_async_page_flip_not_supported; + break; default: return -EINVAL; } diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h index a87bbbbca2d4..54c558f81f3c 100644 --- a/include/uapi/drm/drm.h +++ b/include/uapi/drm/drm.h @@ -706,7 +706,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 /** @@ -767,6 +768,13 @@ struct drm_gem_open { * Documentation/gpu/drm-mm.rst, section "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 Fri Jul 7 22:40:56 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: 117323 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f45:0:b0:3ea:f831:8777 with SMTP id v5csp3585423vqx; Fri, 7 Jul 2023 15:57:24 -0700 (PDT) X-Google-Smtp-Source: APBJJlHAdev0DACpvn9ppIUSnWoqWdWXfw+qD2c9/aAzrzT7JNgoV6cLI2uMbmqhy2QGZa9sBFVs X-Received: by 2002:aa7:8895:0:b0:66a:2ff1:dee3 with SMTP id z21-20020aa78895000000b0066a2ff1dee3mr5781343pfe.6.1688770644243; Fri, 07 Jul 2023 15:57:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688770644; cv=none; d=google.com; s=arc-20160816; b=KiDYtOfYilwEGlvjS7JcxjntxL5D2FYfc+/mHr4J/9hWECplODukjk8YUR53y4YvlD YO75CpVANhUemhuOlngvT7rGa47aUtVnjHtqw+SJiRwOYS0erupYMFs6S8Tl4BqibiKc tsFUwXk3DFLnPumwG1P5Ho35gUY4tE7PRjbwbxmW4KBjfzJqIOl7Xv7vI7VafMBlh9of 7sZMbjthJtIiSwYIyyuBkcrjodmfHC1MkCNUhbvpLFo8HgvAWuYVpFZJg9FzzTToMGbp yu/v8Q6Ocs6hBLVnEO4SLKKaTu9r4RmpBrIrgHe5V3mAYW5+fB+RJ+/BwKx+rrbWBLJ/ fnNQ== 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=mFfau7nIYSTNFQZxA6ftp9PAp8q78Z2XWdM3YuMBn/Y=; fh=qbfaDyBg+GqerSAvcu3kFTx3mMThVk/CBXk9qNOf42k=; b=Y8oqp0xmcJznEhWELnOLezAS22UDS5KAtGS/OwpXGf0Rf8Q8P/py+ItdJ0yWMWsXdj H7QzKfYlVmHgLUmnQP0YNIX9Zo/9J6v3AuTuOJRc+LMbK7NC3WwnW7J3vbKNuQVPfqv9 r8s9X/1OYN9w6FBgQF5COB4zdNeqDT/DLxmPPNoKjbjJM9K/6zmv0xRTcxn1IJrEQBwV YvEy067q45e/Dx8vrdW2UQhfcroNkYUVaZ5t9KjuRtZHV0hbHvQmpDOlB29SEEjmvNz1 LhQKU4vQxVIqbEqVtNOJk9o/IP5I0v5dgEnjjUOd/Er18hoiaJBVofTWn71ASicr2NZo gaWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=FIxhstka; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p3-20020a056a000b4300b006811bf554b8si4711749pfo.396.2023.07.07.15.57.09; Fri, 07 Jul 2023 15:57:24 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=FIxhstka; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232404AbjGGWli (ORCPT + 99 others); Fri, 7 Jul 2023 18:41:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55450 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231845AbjGGWla (ORCPT ); Fri, 7 Jul 2023 18:41:30 -0400 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D4285211F for ; Fri, 7 Jul 2023 15:41:29 -0700 (PDT) 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=mFfau7nIYSTNFQZxA6ftp9PAp8q78Z2XWdM3YuMBn/Y=; b=FIxhstkaSARJbAONjxSef/UG+1 LVzJ1Z0c9ikFDoE/jcdWB6ETgq7y6dtXVNzzVuZHhD7tkRabiKD6fZIITaAg5P4hSLmsVMYB5AK9P cZf6D9zCekZ7TGjNVzh1l6WkTtUXDu6jsTlUo/wtNOazW58QWsVSwHsMeaPQZkRCD9szLkFmViP4O iQ0SscA7GC0fViXWGypXjUaJ1q9SnRlY0pAp2lqlm9gYGGp99XLM7pzlc1GN4Lzh251iCpoA4s2p1 qOjcn4CqViJUwg/pqPgBrquIHWhfXDnHxSkpTz2ZuScpf+/Z5A+V4FTEqJlql1WtFPbiNWQoqM1hz bydqMhvg==; Received: from [187.74.70.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 1qHu8l-00AP6e-5e; Sat, 08 Jul 2023 00:41:27 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, wayland-devel@lists.freedesktop.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 Vetter , Daniel Stone , =?utf-8?b?J01hcmVrIE9sxaHDoWsn?= , Dave Airlie , =?utf-8?q?Michel_D=C3=A4nzer?= , Randy Dunlap , hwentlan@amd.com, joshua@froggi.es, ville.syrjala@linux.intel.com, =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v5 3/6] drm: introduce drm_mode_config.atomic_async_page_flip_not_supported Date: Fri, 7 Jul 2023 19:40:56 -0300 Message-ID: <20230707224059.305474-4-andrealmeid@igalia.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230707224059.305474-1-andrealmeid@igalia.com> References: <20230707224059.305474-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,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED 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-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1770804367152746721?= X-GMAIL-MSGID: =?utf-8?q?1770804367152746721?= From: Simon Ser This new field indicates whether the driver has the necessary logic to support async page-flips via the atomic uAPI. This is leveraged by the next commit to allow user-space to use this functionality. All atomic drivers setting drm_mode_config.async_page_flip are updated to also set drm_mode_config.atomic_async_page_flip_not_supported. We will gradually check and update these drivers to properly handle drm_crtc_state.async_flip in their atomic logic. The goal of this negative flag is the same as fb_modifiers_not_supported: we want to eventually get rid of all drivers missing atomic support for async flips. New drivers should not set this flag, instead they should support atomic async flips (if they support async flips at all). IOW, we don't want more drivers with async flip support for legacy but not atomic. Signed-off-by: Simon Ser Reviewed-by: André Almeida Reviewed-by: Alex Deucher Signed-off-by: André Almeida --- v4: no changes --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 1 + drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 1 + drivers/gpu/drm/i915/display/intel_display.c | 1 + drivers/gpu/drm/nouveau/nouveau_display.c | 1 + include/drm/drm_mode_config.h | 11 +++++++++++ 5 files changed, 15 insertions(+) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 7acd73e5004f..258461826140 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -3970,6 +3970,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev) adev_to_drm(adev)->mode_config.prefer_shadow = 1; /* indicates support for immediate flip */ adev_to_drm(adev)->mode_config.async_page_flip = true; + adev_to_drm(adev)->mode_config.atomic_async_page_flip_not_supported = true; state = kzalloc(sizeof(*state), GFP_KERNEL); if (!state) diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c index 29603561d501..8afb22b1e730 100644 --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c @@ -639,6 +639,7 @@ static int atmel_hlcdc_dc_modeset_init(struct drm_device *dev) dev->mode_config.max_height = dc->desc->max_height; dev->mode_config.funcs = &mode_config_funcs; dev->mode_config.async_page_flip = true; + dev->mode_config.atomic_async_page_flip_not_supported = true; return 0; } diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 0aae9a1eb3d5..a5c503ca9168 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c @@ -8318,6 +8318,7 @@ static void intel_mode_config_init(struct drm_i915_private *i915) mode_config->helper_private = &intel_mode_config_funcs; mode_config->async_page_flip = HAS_ASYNC_FLIPS(i915); + mode_config->atomic_async_page_flip_not_supported = true; /* * Maximum framebuffer dimensions, chosen to match diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c index ec3ffff487fc..f497dcd9e22f 100644 --- a/drivers/gpu/drm/nouveau/nouveau_display.c +++ b/drivers/gpu/drm/nouveau/nouveau_display.c @@ -709,6 +709,7 @@ nouveau_display_create(struct drm_device *dev) dev->mode_config.async_page_flip = false; else dev->mode_config.async_page_flip = true; + dev->mode_config.atomic_async_page_flip_not_supported = true; drm_kms_helper_poll_init(dev); drm_kms_helper_poll_disable(dev); diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h index 973119a9176b..47b005671e6a 100644 --- a/include/drm/drm_mode_config.h +++ b/include/drm/drm_mode_config.h @@ -918,6 +918,17 @@ struct drm_mode_config { */ bool async_page_flip; + /** + * @atomic_async_page_flip_not_supported: + * + * If true, the driver does not support async page-flips with the + * atomic uAPI. This is only used by old drivers which haven't yet + * accomodated for &drm_crtc_state.async_flip in their atomic logic, + * even if they have &drm_mode_config.async_page_flip set to true. + * New drivers shall not set this flag. + */ + bool atomic_async_page_flip_not_supported; + /** * @fb_modifiers_not_supported: * From patchwork Fri Jul 7 22:40:57 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: 117320 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f45:0:b0:3ea:f831:8777 with SMTP id v5csp3581103vqx; Fri, 7 Jul 2023 15:44:19 -0700 (PDT) X-Google-Smtp-Source: APBJJlFx/LSRMsBTv7fCefGkNun7SbCivkScfccQhNIlQcXAtUub2gQxpqB1tp4ziJnDTZjoMUBl X-Received: by 2002:a05:6808:1a1e:b0:3a1:e4d1:878d with SMTP id bk30-20020a0568081a1e00b003a1e4d1878dmr6914175oib.9.1688769859354; Fri, 07 Jul 2023 15:44:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688769859; cv=none; d=google.com; s=arc-20160816; b=vNK4hsv5eywC+YLx5l2TRyyHFkRY39eHryXYwzSHAfkJAJtqlgM7KapfVjFXWu7cfn QVydmUfV/wI7vTzzITjAzMpAV4dgnhC+wU55F1imHRYSgM0N0eoOgy8wOkL3WQ2rxsHU 4Gqi2fOGgO8cuxFF6VDvZHwnfTrAxr5IcwS/1/cmENMuY/0hOL3fEuegN0WgpX5O2QB8 BpNRVcOHLswjfaMtD73B6v7pj8hFPoalnusys0Xc2nBPNP7E42xnzyI/I1KYX+sxy4Yn 8aAIU9h+0otlESccC/Hwt0PUbs0Gzln8xd+Af+LIc4awWDaGZ9lwLaRa7ltAAyRaPC28 PJ1Q== 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=aypGJ9zKriwl5rC/G/jg2t+UqZhEdGjhBXoWEgZUCvg=; fh=qbfaDyBg+GqerSAvcu3kFTx3mMThVk/CBXk9qNOf42k=; b=yE0Gf1eIdGmJq3cdun1WZWTW9Bg6FU8kn2BHvZGcVW8KjRGgCEsAPomNVGv8+KbLp3 nTJyQguptcwyGKg0rZWgRaW00zbf4Ez0vRab4D75SWDjyVkfkMj7fiqE3U92QRmKy8RB iKLtxeMl+4ebefYf/6V/3kou2/PT9YHH81qPjEz4p1KxjKDPqtWnH2GMNmjFuhj1dY9p 11Mb5t+0ZicOzCu1QRztNVMinTR8ZZlcgpxKUX0JWexf4MAqTPwtF1SgtV6ArRUyrivo XVJbv2VO88JCObCdkpcT4TjwK9GSV7hreP/v/KtyM5Aiws7tTLP7l6IAWBtaQOli7gFe XSXQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=YoMIy1Dd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w8-20020a63f508000000b0055c17284a85si2166345pgh.377.2023.07.07.15.44.03; Fri, 07 Jul 2023 15:44:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=YoMIy1Dd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229502AbjGGWll (ORCPT + 99 others); Fri, 7 Jul 2023 18:41:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55484 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231245AbjGGWlg (ORCPT ); Fri, 7 Jul 2023 18:41:36 -0400 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A937B211F for ; Fri, 7 Jul 2023 15:41:34 -0700 (PDT) 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=aypGJ9zKriwl5rC/G/jg2t+UqZhEdGjhBXoWEgZUCvg=; b=YoMIy1Ddi9+Na1Kzc4Ix/3xroM hl2Vjo47GexBs5ZIQHY9+0h8I54dZREpP1iEIz+NyOmu7jfs8OKpoEs3Rm1wO3YRUERnnJBazIWvB dOWcOg0sGoMEejQ8PZhrD3nwwp5qi11v1grM8Tjt5OdlI4eou4i8f/nPOYRkcSMJgtSseS0kdrVJa C0TmC4fSA/PvJCWa4wFVuiLxvvODsezvSylJ1ApB24yH8HnXvBfyiuzyVvTXae7dzp5HSmb/lLzvI yXCzVi0V6ZevOMIOj37NggzHcXPTEupDg8Hv+uEAszJGsQImLy9LgDFXkIdW/7TkfFzmaj2RCN5Ay qMCYsJAg==; Received: from [187.74.70.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 1qHu8p-00AP6e-Vl; Sat, 08 Jul 2023 00:41:32 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, wayland-devel@lists.freedesktop.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 Vetter , Daniel Stone , =?utf-8?b?J01hcmVrIE9sxaHDoWsn?= , Dave Airlie , =?utf-8?q?Michel_D=C3=A4nzer?= , Randy Dunlap , hwentlan@amd.com, joshua@froggi.es, ville.syrjala@linux.intel.com, =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v5 4/6] amd/display: indicate support for atomic async page-flips on DC Date: Fri, 7 Jul 2023 19:40:57 -0300 Message-ID: <20230707224059.305474-5-andrealmeid@igalia.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230707224059.305474-1-andrealmeid@igalia.com> References: <20230707224059.305474-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,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED 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-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1770803543791242030?= X-GMAIL-MSGID: =?utf-8?q?1770803543791242030?= From: Simon Ser amdgpu_dm_commit_planes() already sets the flip_immediate flag for async page-flips. This flag is used to set the UNP_FLIP_CONTROL register. Thus, no additional change is required to handle async page-flips with the atomic uAPI. Signed-off-by: Simon Ser Reviewed-by: André Almeida Reviewed-by: Alex Deucher Signed-off-by: André Almeida --- v4: no changes --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 258461826140..7acd73e5004f 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -3970,7 +3970,6 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev) adev_to_drm(adev)->mode_config.prefer_shadow = 1; /* indicates support for immediate flip */ adev_to_drm(adev)->mode_config.async_page_flip = true; - adev_to_drm(adev)->mode_config.atomic_async_page_flip_not_supported = true; state = kzalloc(sizeof(*state), GFP_KERNEL); if (!state) From patchwork Fri Jul 7 22:40:58 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: 117331 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f45:0:b0:3ea:f831:8777 with SMTP id v5csp3589721vqx; Fri, 7 Jul 2023 16:05:42 -0700 (PDT) X-Google-Smtp-Source: APBJJlE00i+fI9fLJ3pkgEjbVN6jZiO6vYbZwNNhsi9NtJ/EjPBFanmN9hZACM7IC+xg/y3847sC X-Received: by 2002:aa7:c141:0:b0:514:9df0:e3f3 with SMTP id r1-20020aa7c141000000b005149df0e3f3mr5352853edp.0.1688771142188; Fri, 07 Jul 2023 16:05:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688771142; cv=none; d=google.com; s=arc-20160816; b=J9DK7DFJvzBqN214np13Y6GoO4UnuCFtIcQ9RhYqlq5MMkcq0hgki6vBBe9gshjKUs iCY98oyGcgmKP2BxI0bENjvHn8kptSf0z/HkyzzRQiKexnZGfUdzkjye38L9naiitZDw v5AndpDjC5bguQJthH3su1yynPTZ7dxXSVRWzhG0bs+iF2Z8kD4Nleca/kb+WjRMNGGF aHhydI77cCj7hnqA2swzUcBbFTQnn6fF177ic6CY9Q85QedfxDz0JUKuF3pKiuo3e9uY h8i+wSONtneWW1cFWPN1uzq5LzjnrrLzQEzuX4T4dkFej2FuUeD0FwBXkAgJEYOkzzUa 76ZQ== 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=de0EjBF+hzGDM+i69O+/YEHpbFntjniyjiLFzME0BgQ=; fh=qbfaDyBg+GqerSAvcu3kFTx3mMThVk/CBXk9qNOf42k=; b=SZXrxGe39W6VYI1oRr+hAcWiKbp+N5HgFmWdMJj6qiPhiXMASzooNUcvG4wn3Ay48F eG0zvCzYr3pY+MOwfkRer8S+DgocS1l5+WkMlXsccFPFMkYgwhLiDqcSoMyZ66/7yz3G sQmTSeMLW6BSwd3DAgFdwAuyDAJOqJbbMQcY4KNzxrQbQq2PyaBd8XoGt4FyDUHx9FvR nzOwH9znvZlRESjPbZ7mvNkGYk/2pTo3REF02tdtLbmcN6cT+a8gozzGsBYo/HrQlAH5 eevzP5r3trSJjpy0JxR/MCk0ezfm15OUzZXReQoEbyZunVi/hHtpY6mfuZHEvJDERvh9 xDug== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=pr7i6Elh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l19-20020a056402029300b0051e1b797279si2838947edv.166.2023.07.07.16.05.18; Fri, 07 Jul 2023 16:05:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b=pr7i6Elh; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232377AbjGGWlt (ORCPT + 99 others); Fri, 7 Jul 2023 18:41:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55600 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232418AbjGGWll (ORCPT ); Fri, 7 Jul 2023 18:41:41 -0400 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B103A212D for ; Fri, 7 Jul 2023 15:41:39 -0700 (PDT) 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=de0EjBF+hzGDM+i69O+/YEHpbFntjniyjiLFzME0BgQ=; b=pr7i6ElhPBq4hMwP1RxSfNRX3w FhHG0ElDBsFZbPU01vkXlK9eefxtD4SfCwMUHWmB3apmHAY2qXSWmqP6jXYEmUNror8Fdw6zJx/cK AE85Rdafqq/WLNl/+UrMeQRtOEq28/mvF/GKJpXGNvCGhAxGHEd0czxQvd6H1nKvay0zQrJLwf5sO RQm93ORQZY2JeJsRM2iWh1X9nV+rU9ZehYloxyf6vk+hq1/gqsFSqnlSw+I2FHBHiP0wweZZu/eY/ w6VFWVeV8SZA/iAMWB1yN8k6KS8yfSUZN3IPo0e+k/komiehe4FoMM/Vv8lmfXRKnnAym+OsmiUi3 T0DG+0eg==; Received: from [187.74.70.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 1qHu8u-00AP6e-RH; Sat, 08 Jul 2023 00:41:37 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, wayland-devel@lists.freedesktop.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 Vetter , Daniel Stone , =?utf-8?b?J01hcmVrIE9sxaHDoWsn?= , Dave Airlie , =?utf-8?q?Michel_D=C3=A4nzer?= , Randy Dunlap , hwentlan@amd.com, joshua@froggi.es, ville.syrjala@linux.intel.com, =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v5 5/6] drm: Refuse to async flip with atomic prop changes Date: Fri, 7 Jul 2023 19:40:58 -0300 Message-ID: <20230707224059.305474-6-andrealmeid@igalia.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230707224059.305474-1-andrealmeid@igalia.com> References: <20230707224059.305474-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,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED 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-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1770804889174912037?= X-GMAIL-MSGID: =?utf-8?q?1770804889174912037?= 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 exceptions are the framebuffer ID to flip to and the mode ID, that could be referring to an identical mode. Signed-off-by: André Almeida --- v4: new patch --- drivers/gpu/drm/drm_atomic_helper.c | 5 +++ drivers/gpu/drm/drm_atomic_uapi.c | 52 +++++++++++++++++++++++++++-- drivers/gpu/drm/drm_crtc_internal.h | 2 +- drivers/gpu/drm/drm_mode_object.c | 2 +- 4 files changed, 56 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index 2c2c9caf0be5..1e2973f0e1f6 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -629,6 +629,11 @@ drm_atomic_helper_check_modeset(struct drm_device *dev, WARN_ON(!drm_modeset_is_locked(&crtc->mutex)); if (!drm_mode_equal(&old_crtc_state->mode, &new_crtc_state->mode)) { + if (new_crtc_state->async_flip) { + drm_dbg_atomic(dev, "[CRTC:%d:%s] no mode changes allowed during async flip\n", + crtc->base.id, crtc->name); + return -EINVAL; + } drm_dbg_atomic(dev, "[CRTC:%d:%s] mode changed\n", crtc->base.id, crtc->name); new_crtc_state->mode_changed = true; diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c index dfd4cf7169df..536c21f53b5f 100644 --- a/drivers/gpu/drm/drm_atomic_uapi.c +++ b/drivers/gpu/drm/drm_atomic_uapi.c @@ -972,13 +972,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)) @@ -995,6 +1010,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); @@ -1003,6 +1025,7 @@ int drm_atomic_set_property(struct drm_atomic_state *state, case DRM_MODE_OBJECT_CRTC: { struct drm_crtc *crtc = obj_to_crtc(obj); struct drm_crtc_state *crtc_state; + struct drm_mode_config *config = &crtc->dev->mode_config; crtc_state = drm_atomic_get_crtc_state(state, crtc); if (IS_ERR(crtc_state)) { @@ -1010,6 +1033,18 @@ int drm_atomic_set_property(struct drm_atomic_state *state, break; } + /* + * We allow mode_id changes here for async flips, because we + * check later on drm_atomic_helper_check_modeset() callers if + * there are modeset changes or they are equal + */ + if (async_flip && prop != config->prop_mode_id) { + 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; @@ -1017,6 +1052,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)) { @@ -1024,6 +1060,13 @@ 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; + } + ret = drm_atomic_plane_set_property(plane, plane_state, file_priv, prop, prop_value); @@ -1312,6 +1355,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)) @@ -1348,6 +1392,8 @@ int drm_mode_atomic_ioctl(struct drm_device *dev, "commit failed: DRM_MODE_PAGE_FLIP_ASYNC not supported with atomic\n"); return -EINVAL; } + + async_flip = true; } /* can't test and expect an event at the same time. */ @@ -1427,8 +1473,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 501a10edd0e1..381130cebe81 100644 --- a/drivers/gpu/drm/drm_crtc_internal.h +++ b/drivers/gpu/drm/drm_crtc_internal.h @@ -251,7 +251,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 ba1608effc0f..64f519254895 100644 --- a/drivers/gpu/drm/drm_mode_object.c +++ b/drivers/gpu/drm/drm_mode_object.c @@ -536,7 +536,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 Fri Jul 7 22:40:59 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: 117327 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f45:0:b0:3ea:f831:8777 with SMTP id v5csp3588947vqx; Fri, 7 Jul 2023 16:04:19 -0700 (PDT) X-Google-Smtp-Source: APBJJlH2LRHlA04fL1AiK3oyBGN8X7I/mLdbeO9zbQUbfCG9QcjLdJeZXGDfAOmAMlIvArf+duKm X-Received: by 2002:a05:6402:31f0:b0:51e:2e39:9003 with SMTP id dy16-20020a05640231f000b0051e2e399003mr4039154edb.40.1688771059465; Fri, 07 Jul 2023 16:04:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1688771059; cv=none; d=google.com; s=arc-20160816; b=TOhJLU5LBjYMiC76MydOZcZzSaI0uEBvaP6R6STvJtIMDheP2Em2CJ8FM4FCJOe6rz xP6XoxvmRS276Y2aLy1Jb62zqUiHuBrMq0PSNoRdT7hHpb7JgELOO7EYlvOO/C4L9BMb PHfy9IwXr0ER3+5r8dENQa2PVnfnN7b4wxXys0MZU6M9spIBLEBNvbsZ79eLtfdX5WFl 471mj1zo6GHFoXalhClBIgh6gDcfbVeF1aNzQKae/vTTfQDsi1lKDG2lOAHNX7qP+r0m 8GsO/DIMi+DXyTgu/044nsOoaK+bBdZtGXwUbffQu+bvoVFUDXnGfVDiKSKbVa1fHtax 3J1g== 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=ILhK3ntOSguFvvoL3dtIQ/0orxl4TRRaxUfEny2T4hQ=; fh=LjT+njuVizWTSzr6iuglUnPxawOqQbLOR7Ym8u+3GU0=; b=BxsCeHOSZlNjj0xX6oP0dJcVA7MI1R3B43PURX6kWlV4g4KWZOq3XVy8Podcq5EuqB 7PpIAneFaq9RK17gmtcntYcbpacjNMnwWGzS2VHtqEJr6HDWn7N5gt18VTJWSg28s7pr 74U1xG8z95f+hdZiMyxQroftyzSV2GnGekw4U0mb5NRbx71Q0aJyAJr4a23TReFpRPXG FZmKJRiSrkzfiSOO2+cEvSCgHSD5k/7Y1e51ffWiRi+bRdQ7eHZWzxAWiDbTr8WQqXO3 ITSsHjXVO+XyM86MBVzBqaQsVkwNGEr+x+HUYySlcHTfKP8wAawWZpqXC8tvpvuhOQHf YHWA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b="luAS5a/o"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id l19-20020a056402029300b0051e1b797279si2838947edv.166.2023.07.07.16.03.55; Fri, 07 Jul 2023 16:04:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=fail header.i=@igalia.com header.s=20170329 header.b="luAS5a/o"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232560AbjGGWmI (ORCPT + 99 others); Fri, 7 Jul 2023 18:42:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56006 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232505AbjGGWlx (ORCPT ); Fri, 7 Jul 2023 18:41:53 -0400 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 364C826BC for ; Fri, 7 Jul 2023 15:41:45 -0700 (PDT) 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=ILhK3ntOSguFvvoL3dtIQ/0orxl4TRRaxUfEny2T4hQ=; b=luAS5a/ov3Z7w1pwXMMISdcq0X CmkBLudpjLqOfv+LJLAAHgZSMAOwntplymB5St0mZV6gheeahYHsf0oKk1dEbckva2adI1sAtldg0 zSAfkyB5qESAnGy93JB4hhHc7vEiAIq1eGRa5uuHhV8Ye1zRG/hGSONknqFrN7KJDUsh41ixqVhCn 7pEMfWtuB6/0Rb4vY44mVDt1yIc9YleiwG15e+Ed80YgxVvmPu+KiZZx1W017yqrMNixeQtYjnRJr 5oOG8jA6fnQ2CMTbxf5k92qZOx0ViYm1r5jHbNCXCuZSKJ8sQ4SM5777oDp3S9kiK0I4V0eDj8DvU bbpZeGCQ==; Received: from [187.74.70.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 1qHu8z-00AP6e-SZ; Sat, 08 Jul 2023 00:41:42 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, wayland-devel@lists.freedesktop.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 Vetter , Daniel Stone , =?utf-8?b?J01hcmVrIE9sxaHDoWsn?= , Dave Airlie , =?utf-8?q?Michel_D=C3=A4nzer?= , Randy Dunlap , hwentlan@amd.com, joshua@froggi.es, ville.syrjala@linux.intel.com, Pekka Paalanen , =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v5 6/6] drm/doc: Define KMS atomic state set Date: Fri, 7 Jul 2023 19:40:59 -0300 Message-ID: <20230707224059.305474-7-andrealmeid@igalia.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230707224059.305474-1-andrealmeid@igalia.com> References: <20230707224059.305474-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,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED 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-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1770804802215675514?= X-GMAIL-MSGID: =?utf-8?q?1770804802215675514?= 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 Acked-by: Pekka Paalanen Reviewed-by: Daniel Vetter --- v4: total rework by Pekka --- Documentation/gpu/drm-uapi.rst | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/Documentation/gpu/drm-uapi.rst b/Documentation/gpu/drm-uapi.rst index 65fb3036a580..6a1662c08901 100644 --- a/Documentation/gpu/drm-uapi.rst +++ b/Documentation/gpu/drm-uapi.rst @@ -486,3 +486,44 @@ and the CRTC index is its position in this array. .. kernel-doc:: include/uapi/drm/drm_mode.h :internal: + +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 automatically avoid +no-operation changes, so it is safe and even expected for userspace to send +redundant property settings. 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. + +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.