All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thierry Reding <thierry.reding@gmail.com>
To: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Intel Graphics Development <intel-gfx@lists.freedesktop.org>,
	DRI Development <dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH 27/28] drm: Document drm_encoder/crtc_helper_funcs
Date: Mon, 7 Dec 2015 16:21:43 +0100	[thread overview]
Message-ID: <20151207152143.GH13177@ulmo> (raw)
In-Reply-To: <1449218769-16577-28-git-send-email-daniel.vetter@ffwll.ch>


[-- Attachment #1.1: Type: text/plain, Size: 9850 bytes --]

On Fri, Dec 04, 2015 at 09:46:08AM +0100, Daniel Vetter wrote:
> Mostly this is about all the callbacks used to modesets by both legacy

"used for modesets"?

> CRTC helpers and atomic helpers and I figured it doesn't make all that
> much sense to split this up.
> 
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> ---
>  include/drm/drm_modeset_helper_vtables.h | 447 +++++++++++++++++++++++++++----
>  1 file changed, 400 insertions(+), 47 deletions(-)
> 
> diff --git a/include/drm/drm_modeset_helper_vtables.h b/include/drm/drm_modeset_helper_vtables.h
> index 22cc51b278fb..d776ef6dd00e 100644
> --- a/include/drm/drm_modeset_helper_vtables.h
> +++ b/include/drm/drm_modeset_helper_vtables.h
> @@ -46,58 +46,236 @@ enum mode_set_atomic;
>  
>  /**
>   * struct drm_crtc_helper_funcs - helper operations for CRTCs
> - * @dpms: set power state
> - * @prepare: prepare the CRTC, called before @mode_set
> - * @commit: commit changes to CRTC, called after @mode_set
> - * @mode_fixup: try to fixup proposed mode for this CRTC
> - * @mode_set: set this mode
> - * @mode_set_nofb: set mode only (no scanout buffer attached)
> - * @mode_set_base: update the scanout buffer
> - * @mode_set_base_atomic: non-blocking mode set (used for kgdb support)
> - * @load_lut: load color palette
> - * @disable: disable CRTC when no longer in use
> - * @enable: enable CRTC
>   *
> - * The helper operations are called by the mid-layer CRTC helper.
> - *
> - * Note that with atomic helpers @dpms, @prepare and @commit hooks are
> - * deprecated. Used @enable and @disable instead exclusively.
> - *
> - * With legacy crtc helpers there's a big semantic difference between @disable
> - * and the other hooks: @disable also needs to release any resources acquired in
> - * @mode_set (like shared PLLs).
> + * These hooks are used by the legacy CRTC helpers, the transitional plane
> + * helpers and the new atomic modesetting helpers.
>   */
>  struct drm_crtc_helper_funcs {
> -	/*
> -	 * Control power levels on the CRTC.  If the mode passed in is
> -	 * unsupported, the provider must use the next lowest power level.
> +	/**
> +	 * @dpms:
> +	 *
> +	 * Callback to control power levels on the CRTC.  If the mode passed in
> +	 * is unsupported, the provider must use the next lowest power level.
> +	 * This is used by the legacy CRTC helpers to implement DPMS
> +	 * functionality in drm_helper_connector_dpms().
> +	 *
> +	 * This callback is also used to disable a CRTC by calling it with
> +	 * DRM_MODE_DPMS_OFF if the @disable hook isn't used.
> +	 *
> +	 * This callback is used by the legacy CRTC helpers.  Atomic helpers
> +	 * also support using this hook for enabling and disabling a CRTC to
> +	 * facilitate transitions to atomic, but it is deprecated. Instead
> +	 * @enable and @disable should be used.
>  	 */
>  	void (*dpms)(struct drm_crtc *crtc, int mode);
> +
> +	/**
> +	 * @prepare:
> +	 *
> +	 * This callback should prepare the CRTC for a subsequent modeset, which
> +	 * in practice means the driver should disable the CRTC if it is
> +	 * running. Most drivers ended up implementing this by calling their
> +	 * @dpms hook with DRM_MODE_DPMS_OFF.
> +	 *
> +	 * This callback is used by the legacy CRTC helpers.  Atomic helpers
> +	 * also support using this hook for disabling a CRTC to facilitate
> +	 * transitions to atomic, but it is deprecated. Instead @disable should
> +	 * be used.
> +	 */
>  	void (*prepare)(struct drm_crtc *crtc);
> +
> +	/**
> +	 * @commit:
> +	 *
> +	 * This callback should commit the new mode on the CRTC after a modeset,
> +	 * which in practice means the driver should enable the CRTC.  Most
> +	 * drivers ended up implementing this by calling their @dpms hook with
> +	 * DRM_MODE_DPMS_ON.
> +	 *
> +	 * This callback is used by the legacy CRTC helpers.  Atomic helpers
> +	 * also support using this hook for enabling a CRTC to facilitate
> +	 * transitions to atomic, but it is deprecated. Instead @enable should
> +	 * be used.
> +	 */
>  	void (*commit)(struct drm_crtc *crtc);
>  
> -	/* Provider can fixup or change mode timings before modeset occurs */
> +	/**
> +	 * @mode_fixup:
> +	 *
> +	 * This callback is used to validate a mode. The paramater mode is the

"parameter"

[...]
> +	/**
> +	 * @disable:
> +	 *
> +	 * This callback should be used to disable the CRTC. With the atomic
> +	 * drivers it is called after all encoders connected to this CRTC have
> +	 * been shut off already using their own ->disable hook. If that
> +	 * sequence is too simple drivers can just add their own hooks and call
> +	 * it from this CRTC callback here by looping over all encoders
> +	 * connected to it using for_each_encoder_on_crtc().
> +	 *
> +	 * This hook is used both by legacy CRTC helpers and atomic helpers.
> +	 * Atomic drivers don't need to implement it if there's no need to
> +	 * disable anything at the CRTC level. To ensure that runtime PM
> +	 * handling (using either DPMS or the new "ACTIVE" property) works
> +	 * @disable must be the inversve of @enable for atomic drivers.

"inverse"

> +	 *
> +	 * NOTE:
> +	 *
> +	 * With legacy CRTC helpers there's a big semantic difference between
> +	 * @disable other hooks (like @prepare or @dpms) used to shut down a

"and other hooks"

> +	 * CRTC: @disable is only called when also logically disabling the
> +	 * display pipeline and needs to release any resources acquired in
> +	 * @mode_set (like shared PLLs, or again release pinned framebuffers).
> +	 *
> +	 * Therefore @disable must be the inverse of @mode_set plus @commit for
> +	 * drivers still using legacy CRTC helpers, which is different from the
> +	 * rules under atomic.
> +	 */
>  	void (*disable)(struct drm_crtc *crtc);
[...]
>  struct drm_encoder_helper_funcs {
> +	/**
> +	 * @dpms:
> +	 *
> +	 * Callback to control power levels on the encoder.  If the mode passed in
> +	 * is unsupported, the provider must use the next lowest power level.
> +	 * This is used by the legacy encoder helpers to implement DPMS
> +	 * functionality in drm_helper_connector_dpms().
> +	 *
> +	 * This callback is also used to disable a encoder by calling it with

"disable an encoder"

> +	 * DRM_MODE_DPMS_OFF if the @disable hook isn't used.
> +	 *
> +	 * This callback is used by the legacy CRTC helpers.  Atomic helpers
> +	 * also support using this hook for enabling and disabling a encoder to
> +	 * facilitate transitions to atomic, but it is deprecated. Instead
> +	 * @enable and @disable should be used.
> +	 */
>  	void (*dpms)(struct drm_encoder *encoder, int mode);
>  
> +	/**
> +	 * @mode_fixup:
> +	 *
> +	 * This callback is used to validate and adjust a mode. The paramater

"parameter"

> +	/**
> +	 * @disable:
> +	 *
> +	 * This callback should be used to disable the encoder. With the atomic
> +	 * drivers it is called before this encoder's CRTC has been shut off
> +	 * using the CRTC's own ->disable hook.  If that sequence is too simple
> +	 * drivers can just add their own driver private encoder hooks and call
> +	 * them from CRTC's callback by looping over all encoders connected to
> +	 * it using for_each_encoder_on_crtc().
> +	 *
> +	 * This hook is used both by legacy CRTC helpers and atomic helpers.
> +	 * Atomic drivers don't need to implement it if there's no need to
> +	 * disable anything at the encoder level. To ensure that runtime PM
> +	 * handling (using either DPMS or the new "ACTIVE" property) works
> +	 * @disable must be the inversve of @enable for atomic drivers.

"inverse"

> +	 *
> +	 * NOTE:
> +	 *
> +	 * With legacy CRTC helpers there's a big semantic difference between
> +	 * @disable other hooks (like @prepare or @dpms) used to shut down a

"and other hooks", "an encoder"

> +	/**
> +	 * @enable:
> +	 *
> +	 * This callback should be used to enable the encoder. With the atomic
> +	 * drivers it is called after this encoder's CRTC has been enabled using
> +	 * the CRTC's own ->enable hook.  If that sequence is too simple drivers
> +	 * can just add their own driver private encoder hooks and call them
> +	 * from CRTC's callback by looping over all encoders connected to it
> +	 * using for_each_encoder_on_crtc().
> +	 *
> +	 * This hook is used only by atomic helpers, for symmetry with @disable.
> +	 * Atomic drivers don't need to implement it if there's no need to
> +	 * enable anything at the encoder level. To ensure that runtime PM handling
> +	 * (using either DPMS or the new "ACTIVE" property) works
> +	 * @enable must be the inversve of @disable for atomic drivers.

"inverse"

> +	 */
>  	void (*enable)(struct drm_encoder *encoder);
>  
> -	/* atomic helpers */
> +	/**
> +	 * @atomic_check:
> +	 *
> +	 * This callback is used to validate encoder state for atomic drivers.
> +	 * Since the encoder is the object connecting the CRTC and connector it
> +	 * gets passed both states, to be able to validate interactions and
> +	 * update the CRTC to match what the encoder needs for the requested
> +	 * connector.
> +	 *
> +	 * This function is used by the atomic helpers, but it is optional.
> +	 *
> +	 * NOTE:
> +	 *
> +	 * This function is called in the check phase of an atomic update. The
> +	 * driver is not allowed to change anything outside of the free-standing
> +	 * state objects passed-in or assembled in the overall &drm_atomic_state
> +	 * update tracking structure.
> +	 *
> +	 * RETURNS:
> +	 *
> +	 * 0 on success, -EINVAL if the state or the transition can't be
> +	 * support, -ENOMEM on memory allocation failure and -EDEADLK if an

"supported"

Thanks for writing this up, it's great documentation.

Thierry

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

[-- Attachment #2: Type: text/plain, Size: 159 bytes --]

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2015-12-07 15:21 UTC|newest]

Thread overview: 81+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-04  8:45 [PATCH 00/28] kerneldoc for display vtables Daniel Vetter
2015-12-04  8:45 ` [PATCH 01/28] drm: Polish fbdev helper struct docs Daniel Vetter
2015-12-07 10:45   ` Thierry Reding
2015-12-07 11:50     ` Daniel Vetter
2015-12-07 11:53       ` Thierry Reding
2015-12-04  8:45 ` [PATCH 02/28] drm: Move LEAVE/ENTER_ATOMIC_MODESET to fbdev helpers Daniel Vetter
2015-12-07 11:00   ` Thierry Reding
2015-12-04  8:45 ` [PATCH 03/28] drm: Reorganize helper vtables and their docs Daniel Vetter
2015-12-07 11:00   ` Thierry Reding
2015-12-07 11:59     ` Daniel Vetter
2015-12-07 12:26       ` Thierry Reding
2015-12-04  8:45 ` [PATCH 04/28] drm: Make helper vtable pointers type-safe Daniel Vetter
2015-12-07 11:01   ` Thierry Reding
2015-12-04  8:45 ` [PATCH 05/28] drm: Merge helper docbook into kerneldoc comments Daniel Vetter
2015-12-07 11:15   ` Thierry Reding
2015-12-04  8:45 ` [PATCH 06/28] drm/bridge: Improve kerneldoc Daniel Vetter
2015-12-04 10:43   ` Archit Taneja
2015-12-07 11:31   ` Thierry Reding
2015-12-04  8:45 ` [PATCH 07/28] drm: Update drm_plane_funcs kerneldoc Daniel Vetter
2015-12-07 11:46   ` Thierry Reding
2015-12-07 12:34     ` Daniel Vetter
2015-12-07 12:43       ` Thierry Reding
2015-12-07 13:00         ` Daniel Vetter
2015-12-04  8:45 ` [PATCH 08/28] drm/noveau: Ditch NULL save/restore hook assignments Daniel Vetter
2015-12-07 11:47   ` Thierry Reding
2015-12-04  8:45 ` [PATCH 09/28] drm/qxl: Drop dummy save/restore hooks Daniel Vetter
2015-12-07 11:47   ` Thierry Reding
2015-12-04  8:45 ` [PATCH 10/28] drm/virtio: Drop dummy save/restore functions Daniel Vetter
2015-12-07 11:47   ` Thierry Reding
2015-12-04  8:45 ` [PATCH 11/28] drm/vmwgfx: Drop dummy save/restore hooks Daniel Vetter
2015-12-07 11:48   ` Thierry Reding
2015-12-08 11:55   ` Thomas Hellstrom
2015-12-04  8:45 ` [PATCH 12/28] drm/gma500: Move to private " Daniel Vetter
2015-12-07 11:51   ` Thierry Reding
2015-12-04  8:45 ` [PATCH 13/28] drm/nouveau: Use " Daniel Vetter
2015-12-04 14:31   ` Ilia Mirkin
2015-12-04 16:06     ` Daniel Vetter
2015-12-04 16:13   ` [PATCH] drm/nouveau: Use private save/restore hooks for CRTCs Daniel Vetter
2015-12-07 11:51     ` Thierry Reding
2015-12-04  8:45 ` [PATCH 14/28] drm: Remove crtc/connector->save/restore hooks Daniel Vetter
2015-12-07 11:55   ` Thierry Reding
2015-12-04  8:45 ` [PATCH 15/28] drm: Move encoder->save/restore into nouveau Daniel Vetter
2015-12-04 16:14   ` [PATCH] " Daniel Vetter
2015-12-07 11:59     ` Thierry Reding
2015-12-04  8:45 ` [PATCH 16/28] drm: Document drm_atomic_*_get_property Daniel Vetter
2015-12-07 12:01   ` Thierry Reding
2015-12-07 12:51     ` Daniel Vetter
2015-12-04  8:45 ` [PATCH 17/28] drm: Document drm_connector_funcs Daniel Vetter
2015-12-07 12:05   ` Thierry Reding
2015-12-04  8:45 ` [PATCH 18/28] drm: connector->dpms is not optional Daniel Vetter
2015-12-07 12:06   ` Thierry Reding
2015-12-04  8:46 ` [PATCH 19/28] drm: document drm_crtc_funcs Daniel Vetter
2015-12-07 12:25   ` Thierry Reding
2015-12-04  8:46 ` [PATCH 20/28] drm: Add kerneldoc for drm_framebuffer_funcs Daniel Vetter
2015-12-07 12:37   ` Thierry Reding
2015-12-04  8:46 ` [PATCH 21/28] drm: Kerneldoc for drm_mode_config_funcs Daniel Vetter
2015-12-07 13:14   ` Thierry Reding
2015-12-07 13:34     ` Daniel Vetter
2015-12-04  8:46 ` [PATCH 22/28] drm/atomic-helper: Reject attempts at re-stealing encoders Daniel Vetter
2015-12-07 13:26   ` Thierry Reding
2015-12-07 13:40     ` Daniel Vetter
2015-12-04  8:46 ` [PATCH 23/28] drm: Document drm_plane_helper_funcs Daniel Vetter
2015-12-07 14:27   ` Thierry Reding
2015-12-07 14:43     ` Daniel Vetter
2015-12-04  8:46 ` [PATCH 24/28] drm: Document drm_connector_helper_funcs Daniel Vetter
2015-12-07 14:42   ` Thierry Reding
2015-12-07 14:48     ` Daniel Vetter
2015-12-07 15:27       ` Thierry Reding
2015-12-04  8:46 ` [PATCH 25/28] drm/atomic-helper: Mention the new system/resume helpers the docs Daniel Vetter
2015-12-07 14:45   ` Thierry Reding
2015-12-04  8:46 ` [PATCH 26/28] drm: Move drm_display_mode an related docs into kerneldoc Daniel Vetter
2015-12-07 13:39   ` Ville Syrjälä
2015-12-07 15:02   ` Thierry Reding
2015-12-07 15:33     ` Daniel Vetter
2015-12-04  8:46 ` [PATCH 27/28] drm: Document drm_encoder/crtc_helper_funcs Daniel Vetter
2015-12-07 15:21   ` Thierry Reding [this message]
2015-12-04  8:46 ` [PATCH 28/28] drm/atomic-helper: Reject legacy flips on a disabled pipe Daniel Vetter
2015-12-07 13:42   ` Ville Syrjälä
2015-12-07 15:25   ` Thierry Reding
2015-12-07 15:33   ` Daniel Stone
2015-12-08  8:23     ` Daniel Vetter

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=20151207152143.GH13177@ulmo \
    --to=thierry.reding@gmail.com \
    --cc=daniel.vetter@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.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.