On Thu, Jun 02, 2016 at 04:21:44PM +0200, Daniel Vetter wrote: > ... and use it in msm&vc4. Again just want to encapsulate > drm_atomic_state internals a bit. > > The const threading is a bit awkward in vc4 since C sucks, but I still > think it's worth to enforce this. Eventually I want to make all the > obj->state pointers const too, but that's a lot more work ... > > v2: Provide safe macro to wrap up the unsafe helper better, suggested > by Maarten. > > Cc: Eric Anholt <eric@xxxxxxxxxx> > Cc: Rob Clark <robdclark@xxxxxxxxx> > Cc: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> > Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxxx> > --- > drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 10 ++------- > drivers/gpu/drm/vc4/vc4_crtc.c | 13 ++---------- > drivers/gpu/drm/vc4/vc4_drv.h | 2 +- > drivers/gpu/drm/vc4/vc4_plane.c | 5 +++-- > include/drm/drm_atomic.h | 36 ++++++++++++++++++++++++++++++++ > include/drm/drm_atomic_helper.h | 24 +++++++++++++++++++-- > 6 files changed, 66 insertions(+), 24 deletions(-) [...] > diff --git a/include/drm/drm_atomic.h b/include/drm/drm_atomic.h > index 92c84e9ab09a..4e97186293be 100644 > --- a/include/drm/drm_atomic.h > +++ b/include/drm/drm_atomic.h > @@ -109,6 +109,42 @@ drm_atomic_get_existing_connector_state(struct drm_atomic_state *state, > return state->connector_states[index]; > } > > +/** > + * __drm_atomic_get_current_plane_state - get current plane state > + * @state: global atomic state object > + * @plane: plane to grab > + * > + * This function returns the plane state for the given plane, either from > + * @state, or if the plane isn't part of the atomic state update, from @plane. > + * This is useful in atomic check callbacks, when drivers need to peek at, but > + * not change, state of other planes, since it avoids threading an error code > + * back up the call chain. > + * > + * WARNING: > + * > + * Note that this function is in general unsafe since it doesn't check for the > + * required locking for access state structures. Drivers must ensure that it is > + * save to access the returned state structure through other means. One commone s/save/safe/ s/commone/common/ > + * example is when planes are fixed to a single CRTC, and the driver knows that > + * the CRTC locks is held already. In that case holding the CRTC locks gives a > + * read-lock on all planes connected to that CRTC. But if planes can be > + * reassigned things get more tricky. In that case it's better to use > + * drm_atomic_get_plane_state and wire up full error handling. > + * > + * Returns: > + * > + * Read-only pointer to the current plane state. > + */ > +static inline const struct drm_plane_state * > +__drm_atomic_get_current_plane_state(struct drm_atomic_state *state, > + struct drm_plane *plane) > +{ > + if (state->plane_states[drm_plane_index(plane)]) > + return state->plane_states[drm_plane_index(plane)]; > + > + return plane->state; > +} > + > int __must_check > drm_atomic_set_mode_for_crtc(struct drm_crtc_state *state, > struct drm_display_mode *mode); _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx