All of lore.kernel.org
 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:24:41 +0200	[thread overview]
Message-ID: <3c77a62c-13e2-44bd-a7e8-c2ea29dcf352@suse.de> (raw)
In-Reply-To: <20260908-drm-reset-state-flag-v3-9-905570f387a4@kernel.org>

Hi

Am 08.09.26 um 16:35 schrieb Maxime Ripard:
[...]
> 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;

Looking at this and the other places where _can_create_state is being 
used, I'd like to present a different design.

Scratch the helper entirely and introduce a dedicated callback in 
drm_mode_config_funcs that sets up the default state.  Your current 
helper drm_atomic_commit_fill_with_defaults would be the common 
implementation. The DRM core could test for the existence of this 
callback to see if default-reset is available. Sure, we'd have to modify 
all drivers, but it would be architecturally cleaner IMHO and give full 
control to the drivers. Best regards Thomas
>   	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)



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

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-08 14:35 [PATCH v3 00/11] drm: Add DRM_MODE_ATOMIC_RESET flag 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
2026-09-09  7:24   ` Thomas Zimmermann [this message]
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=3c77a62c-13e2-44bd-a7e8-c2ea29dcf352@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.