All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Daniel Vetter <daniel@ffwll.ch>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 12/17] drm: convert crtc to properties/state
Date: Mon, 26 May 2014 18:23:05 +0300	[thread overview]
Message-ID: <20140526152305.GJ27580@intel.com> (raw)
In-Reply-To: <20140526093110.GC14357@phenom.ffwll.local>

On Mon, May 26, 2014 at 11:31:10AM +0200, Daniel Vetter wrote:
> On Sat, May 24, 2014 at 02:30:21PM -0400, Rob Clark wrote:
> > Break the mutable state of a crtc out into a separate structure
> > and use atomic properties mechanism to set crtc attributes.  This
> > makes it easier to have some helpers for crtc->set_property()
> > and for checking for invalid params.  The idea is that individual
> > drivers can wrap the state struct in their own struct which adds
> > driver specific parameters, for easy build-up of state across
> > multiple set_property() calls and for easy atomic commit or roll-
> > back.
> > 
> > Signed-off-by: Rob Clark <robdclark@gmail.com>
> 
> Same comments about interface design as for the plane patch apply here.
> One additional comment below.
> 
> > ---
> >  drivers/gpu/drm/armada/armada_crtc.c       |  11 +-
> >  drivers/gpu/drm/ast/ast_mode.c             |   1 +
> >  drivers/gpu/drm/cirrus/cirrus_mode.c       |   1 +
> >  drivers/gpu/drm/drm_atomic.c               | 231 ++++++++++-
> >  drivers/gpu/drm/drm_crtc.c                 | 598 ++++++++++++++++++-----------
> >  drivers/gpu/drm/drm_fb_helper.c            |   2 +-
> >  drivers/gpu/drm/exynos/exynos_drm_crtc.c   |   7 +-
> >  drivers/gpu/drm/gma500/cdv_intel_display.c |   1 +
> >  drivers/gpu/drm/gma500/psb_intel_display.c |   1 +
> >  drivers/gpu/drm/i915/intel_display.c       |   1 +
> >  drivers/gpu/drm/mgag200/mgag200_mode.c     |   1 +
> >  drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c   |   6 +-
> >  drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c   |   6 +-
> >  drivers/gpu/drm/nouveau/dispnv04/crtc.c    |   1 +
> >  drivers/gpu/drm/nouveau/nv50_display.c     |   1 +
> >  drivers/gpu/drm/omapdrm/omap_crtc.c        |  12 +-
> >  drivers/gpu/drm/omapdrm/omap_drv.c         |   2 +-
> >  drivers/gpu/drm/qxl/qxl_display.c          |   2 +
> >  drivers/gpu/drm/radeon/radeon_display.c    |   2 +
> >  drivers/gpu/drm/rcar-du/rcar_du_crtc.c     |   2 +
> >  drivers/gpu/drm/shmobile/shmob_drm_crtc.c  |   2 +
> >  drivers/gpu/drm/tilcdc/tilcdc_crtc.c       |   1 +
> >  drivers/gpu/drm/udl/udl_modeset.c          |   2 +
> >  drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c        |   1 +
> >  drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c       |   1 +
> >  include/drm/drm_atomic.h                   |  29 ++
> >  include/drm/drm_crtc.h                     | 103 ++++-
> >  27 files changed, 785 insertions(+), 243 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c
> > index 7d3c649..6237af4 100644
> > --- a/drivers/gpu/drm/armada/armada_crtc.c
> > +++ b/drivers/gpu/drm/armada/armada_crtc.c
> > @@ -9,6 +9,7 @@
> >  #include <linux/clk.h>
> >  #include <drm/drmP.h>
> >  #include <drm/drm_crtc_helper.h>
> > +#include <drm/drm_atomic.h>
> >  #include "armada_crtc.h"
> >  #include "armada_drm.h"
> >  #include "armada_fb.h"
> > @@ -966,7 +967,12 @@ armada_drm_crtc_set_property(struct drm_crtc *crtc,
> >  {
> >  	struct armada_private *priv = crtc->dev->dev_private;
> >  	struct armada_crtc *dcrtc = drm_to_armada_crtc(crtc);
> > +	struct drm_crtc_state *cstate = drm_atomic_get_crtc_state(crtc, state);
> >  	bool update_csc = false;
> > +	int ret = 0;
> > +
> > +	if (IS_ERR(cstate))
> > +		return PTR_ERR(cstate);
> >  
> >  	if (property == priv->csc_yuv_prop) {
> >  		dcrtc->csc_yuv_mode = val;
> > @@ -974,6 +980,9 @@ armada_drm_crtc_set_property(struct drm_crtc *crtc,
> >  	} else if (property == priv->csc_rgb_prop) {
> >  		dcrtc->csc_rgb_mode = val;
> >  		update_csc = true;
> > +	} else {
> > +		ret = drm_crtc_set_property(crtc, cstate, property,
> > +				val, blob_data);
> >  	}
> >  
> >  	if (update_csc) {
> > @@ -984,7 +993,7 @@ armada_drm_crtc_set_property(struct drm_crtc *crtc,
> >  		writel_relaxed(val, dcrtc->base + LCD_SPU_IOPAD_CONTROL);
> >  	}
> >  
> > -	return 0;
> > +	return ret;
> >  }
> >  
> >  static struct drm_crtc_funcs armada_crtc_funcs = {
> > diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
> > index 114aee9..c08e0e1 100644
> > --- a/drivers/gpu/drm/ast/ast_mode.c
> > +++ b/drivers/gpu/drm/ast/ast_mode.c
> > @@ -632,6 +632,7 @@ static const struct drm_crtc_funcs ast_crtc_funcs = {
> >  	.cursor_move = ast_cursor_move,
> >  	.reset = ast_crtc_reset,
> >  	.set_config = drm_crtc_helper_set_config,
> > +	.set_property = drm_atomic_crtc_set_property,
> >  	.gamma_set = ast_crtc_gamma_set,
> >  	.destroy = ast_crtc_destroy,
> >  };
> > diff --git a/drivers/gpu/drm/cirrus/cirrus_mode.c b/drivers/gpu/drm/cirrus/cirrus_mode.c
> > index 49332c5..3c4428c 100644
> > --- a/drivers/gpu/drm/cirrus/cirrus_mode.c
> > +++ b/drivers/gpu/drm/cirrus/cirrus_mode.c
> > @@ -366,6 +366,7 @@ static void cirrus_crtc_destroy(struct drm_crtc *crtc)
> >  static const struct drm_crtc_funcs cirrus_crtc_funcs = {
> >  	.gamma_set = cirrus_crtc_gamma_set,
> >  	.set_config = drm_crtc_helper_set_config,
> > +	.set_property = drm_atomic_crtc_set_property,
> >  	.destroy = cirrus_crtc_destroy,
> >  };
> >  
> > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
> > index 403ffc5..863a0fe 100644
> > --- a/drivers/gpu/drm/drm_atomic.c
> > +++ b/drivers/gpu/drm/drm_atomic.c
> > @@ -48,11 +48,13 @@ struct drm_atomic_state *drm_atomic_begin(struct drm_device *dev,
> >  {
> >  	struct drm_atomic_state *state;
> >  	int nplanes = dev->mode_config.num_total_plane;
> > +	int ncrtcs  = dev->mode_config.num_crtc;
> >  	int sz;
> >  	void *ptr;
> >  
> >  	sz = sizeof(*state);
> >  	sz += (sizeof(state->planes) + sizeof(state->pstates)) * nplanes;
> > +	sz += (sizeof(state->crtcs) + sizeof(state->cstates)) * ncrtcs;
> >  
> >  	ptr = kzalloc(sz, GFP_KERNEL);
> >  
> > @@ -74,6 +76,12 @@ struct drm_atomic_state *drm_atomic_begin(struct drm_device *dev,
> >  	state->pstates = ptr;
> >  	ptr = &state->pstates[nplanes];
> >  
> > +	state->crtcs = ptr;
> > +	ptr = &state->crtcs[ncrtcs];
> > +
> > +	state->cstates = ptr;
> > +	ptr = &state->cstates[ncrtcs];
> > +
> >  	return state;
> >  }
> >  EXPORT_SYMBOL(drm_atomic_begin);
> > @@ -92,7 +100,18 @@ int drm_atomic_set_event(struct drm_device *dev,
> >  		struct drm_atomic_state *state, struct drm_mode_object *obj,
> >  		struct drm_pending_vblank_event *event)
> >  {
> > -	return -EINVAL;  /* for now */
> > +	switch (obj->type) {
> > +	case DRM_MODE_OBJECT_CRTC: {
> > +		struct drm_crtc_state *cstate =
> > +			drm_atomic_get_crtc_state(obj_to_crtc(obj), state);
> > +		if (IS_ERR(cstate))
> > +			return PTR_ERR(cstate);
> > +		cstate->event = event;
> > +		return 0;
> > +	}
> > +	default:
> > +		return -EINVAL;
> > +	}
> 
> Hm, I think if we only want completion events on crtcs (which I agree on)

I don't. Unless you have a nice way of passing some kind of "fbs now
available for rendering" list back to userland in the single crtc
event. Last time I looked making the drm event stuff deal with
variable length events looked more painful than just adding per
plane events. But I must admit that I didn't really try to do it.

-- 
Ville Syrjälä
Intel OTC

  parent reply	other threads:[~2014-05-26 15:23 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-24 18:30 [PATCH 00/17] prepare for atomic/nuclear modeset/pageflip Rob Clark
2014-05-24 18:30 ` [PATCH 01/17] drm: fix typo Rob Clark
2014-05-24 18:30 ` [PATCH 02/17] drm: add atomic fxns Rob Clark
2014-05-24 18:30 ` [PATCH 03/17] drm: convert crtc and mode_config to ww_mutex Rob Clark
2014-05-25 22:10   ` Daniel Vetter
2014-05-25 23:16     ` Rob Clark
2014-05-26  8:23       ` Daniel Vetter
2014-05-26 11:56         ` Rob Clark
2014-05-26 14:35           ` Daniel Vetter
2014-05-26 14:36             ` Daniel Vetter
2014-05-26 15:04             ` Rob Clark
2014-05-26 15:07               ` Daniel Vetter
2014-05-26 15:20                 ` Rob Clark
2014-05-26 15:35                   ` Daniel Vetter
2014-05-26 15:49                     ` Rob Clark
2014-05-26 16:09                       ` Daniel Vetter
2014-05-24 18:30 ` [PATCH 04/17] drm: add object property type Rob Clark
2014-05-26  8:29   ` Daniel Vetter
2014-05-26  8:33     ` Daniel Vetter
2014-05-26 11:06     ` Rob Clark
2014-05-24 18:30 ` [PATCH 05/17] drm: add signed-range " Rob Clark
2014-05-24 18:30 ` [PATCH 06/17] drm: helpers to find mode objects Rob Clark
2014-05-26  8:37   ` Daniel Vetter
2014-05-26  8:55     ` Daniel Vetter
2014-05-26 11:12     ` Rob Clark
2014-05-24 18:30 ` [PATCH 07/17] drm: split propvals out and blob property support Rob Clark
2014-05-24 18:30 ` [PATCH 08/17] drm: Allow drm_mode_object_find() to look up an object of any type Rob Clark
2014-05-24 18:30 ` [PATCH 09/17] drm: Refactor object property check code Rob Clark
2014-05-24 18:30 ` [PATCH 10/17] drm: allow FB's in drm_mode_object_find Rob Clark
2014-05-26  8:39   ` Daniel Vetter
2014-05-24 18:30 ` [PATCH 11/17] drm: convert plane to properties/state Rob Clark
2014-05-26  9:12   ` Daniel Vetter
2014-05-26 11:32     ` Rob Clark
2014-05-26 14:52       ` Daniel Vetter
2014-05-24 18:30 ` [PATCH 12/17] drm: convert crtc " Rob Clark
2014-05-26  9:31   ` Daniel Vetter
2014-05-26 11:35     ` Rob Clark
2014-05-26 14:56       ` Daniel Vetter
2014-05-26 15:15         ` Rob Clark
2014-05-26 15:23     ` Ville Syrjälä [this message]
2014-05-26 15:37       ` Daniel Vetter
2014-05-26 15:42         ` Rob Clark
2014-05-26 15:46         ` Ville Syrjälä
2014-05-26 16:12           ` Daniel Vetter
2014-05-24 18:30 ` [PATCH 13/17] drm: push locking down into restore_fbdev_mode Rob Clark
2014-05-26  9:34   ` Daniel Vetter
2014-05-24 18:30 ` [PATCH 14/17] drm/msm: add atomic support Rob Clark
2014-05-26 17:54   ` Daniel Vetter
2014-05-27 15:58     ` Rob Clark
2014-05-27 17:50       ` Daniel Vetter
2014-05-27 18:48         ` Rob Clark
2014-05-27 19:26           ` Daniel Vetter
2014-05-27 20:06             ` Rob Clark
2014-05-27 22:09               ` Daniel Vetter
2014-05-27 23:32                 ` Rob Clark
2014-05-28 13:21                   ` Daniel Vetter
2014-05-28 14:14                     ` Ville Syrjälä
2014-05-28 14:50                       ` Daniel Vetter
2014-05-28 15:19                     ` Rob Clark
2014-05-27 23:47                 ` Rob Clark
2014-05-28 13:32                   ` Daniel Vetter
2014-05-24 18:30 ` [PATCH 15/17] drm: spiff out FB refcnting traces Rob Clark
2014-05-24 18:30 ` [PATCH 16/17] drm: more conservative locking Rob Clark
2014-05-24 18:30 ` [PATCH 17/17] drm: Fix up the atomic legacy paths so they work Rob Clark
2014-05-26 10:40 ` [PATCH 00/17] prepare for atomic/nuclear modeset/pageflip Daniel Vetter
2014-05-26 12:48   ` Rob Clark
2014-05-26 15:24     ` Daniel Vetter
2014-05-26 16:12       ` Rob Clark
2014-05-26 17:36         ` 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=20140526152305.GJ27580@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@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.