diff mbox

drm/atomic-helper: Pimp docs with recommendations for rpm drivers

Message ID 1441713165-24465-1-git-send-email-daniel.vetter@ffwll.ch (mailing list archive)
State New, archived
Headers show

Commit Message

Daniel Vetter Sept. 8, 2015, 11:52 a.m. UTC
Requested by Laurent.

Note that this uses the new markdown support which will only land in
kernel 4.4 (for the code snippet).

v2: A few spelling fixes I spotted myself.

Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Thierry Reding <treding@nvidia.com> (v1 on irc)
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 drivers/gpu/drm/drm_atomic_helper.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

Comments

Laurent Pinchart Sept. 8, 2015, 1 p.m. UTC | #1
Hi Daniel,

Thank you for the patch.

On Tuesday 08 September 2015 13:52:45 Daniel Vetter wrote:
> Requested by Laurent.
> 
> Note that this uses the new markdown support which will only land in
> kernel 4.4 (for the code snippet).
> 
> v2: A few spelling fixes I spotted myself.
> 
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Reviewed-by: Thierry Reding <treding@nvidia.com> (v1 on irc)
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> ---
>  drivers/gpu/drm/drm_atomic_helper.c | 22 ++++++++++++++++++++++
>  1 file changed, 22 insertions(+)
> 
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c
> b/drivers/gpu/drm/drm_atomic_helper.c index 12c25c54309f..bd23b4dc7f43
> 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -993,6 +993,22 @@ EXPORT_SYMBOL(drm_atomic_helper_wait_for_vblanks);
>   * object. This can still fail when e.g. the framebuffer reservation fails.
>   * For now this doesn't implement asynchronous commits.
>   *
> + * Note that right now this function does not support async commits, and
> + * hence driver writers must implement their own version for now. Also note
> + * that the default ordering of how the various stages are called is to
> + * match the legacy modeset helper library closest. One peculiarity of that
> + * is that it doesn't mesh well with runtime pm at all.
> + *
> + * For drivers supporting runtime PM the recommended sequence is
> + *
> + *     drm_atomic_helper_commit_modeset_disables(dev, state);
> + *
> + *     drm_atomic_helper_commit_modeset_enables(dev, state);
> + *
> + *     drm_atomic_helper_commit_planes(dev, state, true);
> + *
> + * See the kerneldoc entries for these three functions for more details.
> + *
>   * RETURNS
>   * Zero for success or -errno.
>   */
> @@ -1168,6 +1184,12 @@ bool plane_crtc_active(struct drm_plane_state *state)
>   * Note that this function does all plane updates across all CRTCs in one
>   * step. If the hardware can't support this approach look at
>   * drm_atomic_helper_commit_planes_on_crtc() instead.
> + *
> + * Note that for drivers supporting runtime PM, or which are otherwise
> + * unhappy if their plane update hooks get called on CRTCs which are off,
> + * it is highly recommended to set @active_only to true. Setting
> + * @active_only to false as the default implementation in
> + * drm_atomic_helper_commit() does is just done to most closely match
> + * the behaviour of the legacy helpers.

How about

"Plane parameters can be updated by applications while the associated CRTC is 
disabled. The DRM/KMS core will store the parameters in the plane state, which 
will be available to the driver when the CRTC is turned on. As a result most 
drivers don't need to be immediately notified of plane updates for a disabled 
CRTC. Unless otherwise needed, drivers are advised to set the @active_only 
parameters to true in order not to receive plane update notifications related 
to a disabled CRTC."

>   */
>  void drm_atomic_helper_commit_planes(struct drm_device *dev,
>  				     struct drm_atomic_state *old_state,
diff mbox

Patch

diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 12c25c54309f..bd23b4dc7f43 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -993,6 +993,22 @@  EXPORT_SYMBOL(drm_atomic_helper_wait_for_vblanks);
  * object. This can still fail when e.g. the framebuffer reservation fails. For
  * now this doesn't implement asynchronous commits.
  *
+ * Note that right now this function does not support async commits, and hence
+ * driver writers must implement their own version for now. Also note that the
+ * default ordering of how the various stages are called is to match the legacy
+ * modeset helper library closest. One peculiarity of that is that it doesn't
+ * mesh well with runtime pm at all.
+ *
+ * For drivers supporting runtime PM the recommended sequence is
+ *
+ *     drm_atomic_helper_commit_modeset_disables(dev, state);
+ *
+ *     drm_atomic_helper_commit_modeset_enables(dev, state);
+ *
+ *     drm_atomic_helper_commit_planes(dev, state, true);
+ *
+ * See the kerneldoc entries for these three functions for more details.
+ *
  * RETURNS
  * Zero for success or -errno.
  */
@@ -1168,6 +1184,12 @@  bool plane_crtc_active(struct drm_plane_state *state)
  * Note that this function does all plane updates across all CRTCs in one step.
  * If the hardware can't support this approach look at
  * drm_atomic_helper_commit_planes_on_crtc() instead.
+ *
+ * Note that for drivers supporting runtime PM, or which are otherwise unhappy if
+ * their plane update hooks get called on CRTCs which are off, it is highly
+ * recommended to set @active_only to true. Setting @active_only to false as the
+ * default implementation in drm_atomic_helper_commit() does is just done to
+ * most closely match the behaviour of the legacy helpers.
  */
 void drm_atomic_helper_commit_planes(struct drm_device *dev,
 				     struct drm_atomic_state *old_state,