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
next prev 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox