mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Thomas Zimmermann <tzimmermann@suse.de>
To: Maxime Ripard <mripard@kernel.org>,
	Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>
Cc: "Daniel Stone" <daniels@collabora.com>,
	"Harry Wentland" <harry.wentland@amd.com>,
	"Jocelyn Falempe" <jfalempe@redhat.com>,
	"Jonas Ådahl" <jadahl@redhat.com>,
	"Michel Dänzer" <mdaenzer@redhat.com>,
	"Pekka Paalanen" <pekka.paalanen@collabora.com>,
	"Sebastian Wick" <sebastian.wick@redhat.com>,
	"Simon Ser" <contact@emersion.fr>,
	"Victoria Brekenfeld" <victoria@system76.com>,
	"Xaver Hugl" <xaver.hugl@kde.org>,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 09/11] drm/atomic-uapi: Add DRM_MODE_ATOMIC_RESET flag
Date: Wed, 9 Sep 2026 09:13:13 +0200	[thread overview]
Message-ID: <70b689d2-5876-4bb6-a784-3c0bff2e4b4e@suse.de> (raw)
In-Reply-To: <20260908-drm-reset-state-flag-v3-9-905570f387a4@kernel.org>



Am 08.09.26 um 16:35 schrieb Maxime Ripard:
> From: Sebastian Wick <sebastian.wick@redhat.com>
>
> Userspace currently has no atomic way to reset all KMS object states
> to their defaults. To bring a display pipeline to a known state, a
> compositor must explicitly set every property on every object, which
> requires tracking which properties exist and what their defaults are.
>
> Introduce DRM_MODE_ATOMIC_RESET (0x0800) which, when passed to the
> atomic ioctl, fills the commit with default states for all KMS
> objects before applying the properties supplied in the request.
> Properties not explicitly included in the commit remain at their
> defaults (CRTCs inactive, planes disabled, connectors unbound, and
> so on).
>
> The flag cannot be combined with DRM_MODE_PAGE_FLIP_ASYNC, since a
> full state reset is incompatible with an async flip.
>
> Signed-off-by: Sebastian Wick <sebastian.wick@redhat.com>
> Co-developed-by: Maxime Ripard <mripard@kernel.org>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>

Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>


> ---
>   drivers/gpu/drm/drm_atomic.c      |  3 +++
>   drivers/gpu/drm/drm_atomic_uapi.c | 13 +++++++++++++
>   drivers/gpu/drm/drm_ioctl.c       |  3 +++
>   include/uapi/drm/drm.h            | 10 ++++++++++
>   include/uapi/drm/drm_mode.h       | 14 +++++++++++++-
>   5 files changed, 42 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
> index 4c15757308d6..d5b3a7d99239 100644
> --- a/drivers/gpu/drm/drm_atomic.c
> +++ b/drivers/gpu/drm/drm_atomic.c
> @@ -1625,10 +1625,13 @@ EXPORT_SYMBOL(drm_atomic_get_new_bridge_state);
>    * the current state.
>    *
>    * Color operations are not checked because they always use
>    * drm_atomic_helper_colorop_create_state() and do not have a per-driver hook.
>    *
> + * This is used to report the %DRM_CAP_ATOMIC_RESET capability to userspace,
> + * and as a precondition in drm_atomic_commit_fill_with_defaults().
> + *
>    * Returns:
>    * True if all objects implement atomic_create_state, false otherwise.
>    */
>   bool drm_atomic_can_create_state(struct drm_device *dev)
>   {
> diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
> index d52504d823bc..fe794a65a727 100644
> --- a/drivers/gpu/drm/drm_atomic_uapi.c
> +++ b/drivers/gpu/drm/drm_atomic_uapi.c
> @@ -1665,10 +1665,17 @@ int drm_mode_atomic_ioctl(struct drm_device *dev,
>   		drm_dbg_atomic(dev,
>   			       "commit failed: page-flip event requested with test-only commit\n");
>   		return -EINVAL;
>   	}
>   
> +	if ((arg->flags & DRM_MODE_ATOMIC_RESET) &&
> +			(arg->flags & DRM_MODE_PAGE_FLIP_ASYNC)) {
> +		drm_dbg_atomic(dev,
> +			       "commit failed: reset cannot be combined with async flip\n");
> +		return -EINVAL;
> +	}
> +
>   	state = drm_atomic_commit_alloc(dev);
>   	if (!state)
>   		return -ENOMEM;
>   
>   	drm_modeset_acquire_init(&ctx, DRM_MODESET_ACQUIRE_INTERRUPTIBLE);
> @@ -1680,10 +1687,16 @@ int drm_mode_atomic_ioctl(struct drm_device *dev,
>   	copied_objs = 0;
>   	copied_props = 0;
>   	fence_state = NULL;
>   	num_fences = 0;
>   
> +	if (arg->flags & DRM_MODE_ATOMIC_RESET) {
> +		ret = drm_atomic_commit_fill_with_defaults(state);
> +		if (ret)
> +			goto out;
> +	}
> +
>   	for (i = 0; i < arg->count_objs; i++) {
>   		uint32_t obj_id, count_props;
>   		struct drm_mode_object *obj;
>   
>   		if (get_user(obj_id, objs_ptr + copied_objs)) {
> diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
> index 0dbf04d4aa9e..f13bb7c490c4 100644
> --- a/drivers/gpu/drm/drm_ioctl.c
> +++ b/drivers/gpu/drm/drm_ioctl.c
> @@ -303,10 +303,13 @@ static int drm_getcap(struct drm_device *dev, void *data, struct drm_file *file_
>   		break;
>   	case DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP:
>   		req->value = drm_core_check_feature(dev, DRIVER_ATOMIC) &&
>   			     dev->mode_config.async_page_flip;
>   		break;
> +	case DRM_CAP_ATOMIC_RESET:
> +		req->value = drm_atomic_can_create_state(dev);
> +		break;
>   	default:
>   		return -EINVAL;
>   	}
>   	return 0;
>   }
> diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
> index bc7ef7684099..b6e2f2edd122 100644
> --- a/include/uapi/drm/drm.h
> +++ b/include/uapi/drm/drm.h
> @@ -793,10 +793,20 @@ struct drm_gem_change_handle {
>    * If set to 1, the driver supports &DRM_MODE_PAGE_FLIP_ASYNC for atomic
>    * commits.
>    */
>   #define DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP	0x15
>   
> +/**
> + * DRM_CAP_ATOMIC_RESET
> + *
> + * If set to 1, the driver supports the &DRM_MODE_ATOMIC_RESET flag in
> + * &DRM_IOCTL_MODE_ATOMIC commits. When supported, userspace can pass that
> + * flag to reset all KMS object states to their defaults before applying
> + * property changes.
> + */
> +#define DRM_CAP_ATOMIC_RESET	0x16
> +
>   /* DRM_IOCTL_GET_CAP ioctl argument type */
>   struct drm_get_cap {
>   	__u64 capability;
>   	__u64 value;
>   };
> diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
> index ed1a660a3dfd..32eb3f650d7a 100644
> --- a/include/uapi/drm/drm_mode.h
> +++ b/include/uapi/drm/drm_mode.h
> @@ -1326,10 +1326,21 @@ struct drm_mode_destroy_dumb {
>    * To the best of the driver's knowledge, visual artifacts are guaranteed to
>    * not appear when this flag is not set. Some sinks might display visual
>    * artifacts outside of the driver's control.
>    */
>   #define DRM_MODE_ATOMIC_ALLOW_MODESET 0x0400
> +/**
> + * DRM_MODE_ATOMIC_RESET
> + *
> + * Reset all KMS object states (CRTCs, planes, connectors, color operations)
> + * to their default values before applying the properties in this commit.
> + * Properties not explicitly included in the commit will remain at their
> + * defaults (CRTCs inactive, planes disabled, connectors unbound, etc.).
> + *
> + * This flag cannot be combined with &DRM_MODE_PAGE_FLIP_ASYNC.
> + */
> +#define DRM_MODE_ATOMIC_RESET 0x0800
>   
>   /**
>    * DRM_MODE_ATOMIC_FLAGS
>    *
>    * Bitfield of flags accepted by the &DRM_IOCTL_MODE_ATOMIC IOCTL in
> @@ -1338,11 +1349,12 @@ struct drm_mode_destroy_dumb {
>   #define DRM_MODE_ATOMIC_FLAGS (\
>   		DRM_MODE_PAGE_FLIP_EVENT |\
>   		DRM_MODE_PAGE_FLIP_ASYNC |\
>   		DRM_MODE_ATOMIC_TEST_ONLY |\
>   		DRM_MODE_ATOMIC_NONBLOCK |\
> -		DRM_MODE_ATOMIC_ALLOW_MODESET)
> +		DRM_MODE_ATOMIC_ALLOW_MODESET |\
> +		DRM_MODE_ATOMIC_RESET)
>   
>   struct drm_mode_atomic {
>   	__u32 flags;
>   	__u32 count_objs;
>   	__u64 objs_ptr;
>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, (HRB 36809, AG Nürnberg)



  reply	other threads:[~2026-09-09  7:13 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-08 14:35 [PATCH v3 00/11] drm: " Maxime Ripard
2026-09-08 14:35 ` [PATCH v3 01/11] drm/atomic: colorop: Rename state to state_to_destroy Maxime Ripard
2026-09-09  6:28   ` Thomas Zimmermann
2026-09-11 13:27   ` (subset) " Maxime Ripard
2026-09-08 14:35 ` [PATCH v3 02/11] drm/atomic: Create function to insert CRTC state into a commit Maxime Ripard
2026-09-09  6:30   ` Thomas Zimmermann
2026-09-08 14:35 ` [PATCH v3 03/11] drm/atomic: Create function to insert plane " Maxime Ripard
2026-09-09  6:34   ` Thomas Zimmermann
2026-09-08 14:35 ` [PATCH v3 04/11] drm/atomic: Create function to insert colorop " Maxime Ripard
2026-09-09  6:35   ` Thomas Zimmermann
2026-09-08 14:35 ` [PATCH v3 05/11] drm/atomic: Create function to insert private obj " Maxime Ripard
2026-09-09  6:46   ` Thomas Zimmermann
2026-09-08 14:35 ` [PATCH v3 06/11] drm/atomic: Create function to insert connector " Maxime Ripard
2026-09-09  6:52   ` Thomas Zimmermann
2026-09-08 14:35 ` [PATCH v3 07/11] drm/atomic: Add drm_atomic_can_create_state() helper Maxime Ripard
2026-09-09  6:58   ` Thomas Zimmermann
2026-09-08 14:35 ` [PATCH v3 08/11] drm/atomic: Allow filling a commit with pristine object states Maxime Ripard
2026-09-09  7:11   ` Thomas Zimmermann
2026-09-08 14:35 ` [PATCH v3 09/11] drm/atomic-uapi: Add DRM_MODE_ATOMIC_RESET flag Maxime Ripard
2026-09-09  7:13   ` Thomas Zimmermann [this message]
2026-09-09  7:24   ` Thomas Zimmermann
2026-09-09  8:22     ` Maxime Ripard
2026-09-08 14:35 ` [PATCH v3 10/11] drm/vkms: Switch container_of helpers to container_of_const Maxime Ripard
2026-09-08 14:35 ` [PATCH v3 11/11] drm/vkms: Add driver-specific plane property for testing Maxime Ripard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=70b689d2-5876-4bb6-a784-3c0bff2e4b4e@suse.de \
    --to=tzimmermann@suse.de \
    --cc=airlied@gmail.com \
    --cc=contact@emersion.fr \
    --cc=daniels@collabora.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=harry.wentland@amd.com \
    --cc=jadahl@redhat.com \
    --cc=jfalempe@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mdaenzer@redhat.com \
    --cc=mripard@kernel.org \
    --cc=pekka.paalanen@collabora.com \
    --cc=sebastian.wick@redhat.com \
    --cc=simona@ffwll.ch \
    --cc=victoria@system76.com \
    --cc=xaver.hugl@kde.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®