On Fri, Oct 14, 2016 at 7:55 PM, Rob Clark <robdclark@xxxxxxxxx> wrote: > We subclass drm_plane_state, so add mdp5_plane_atomic_print_state() to > dump out our own driver specific plane state. > Reviewed-by: Sean Paul <seanpaul@xxxxxxxxxxxx> > Signed-off-by: Rob Clark <robdclark@xxxxxxxxx> > --- > drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h | 12 ++++++++++++ > drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c | 18 +++++++++++++++++- > 2 files changed, 29 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h > index e4b3fb3..3502711 100644 > --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h > +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h > @@ -120,6 +120,18 @@ static inline u32 mdp5_read(struct mdp5_kms *mdp5_kms, u32 reg) > return msm_readl(mdp5_kms->mmio + reg); > } > > +static inline const char *stage2name(enum mdp_mixer_stage_id stage) > +{ > + static const char *names[] = { > +#define NAME(n) [n] = #n > + NAME(STAGE_UNUSED), NAME(STAGE_BASE), > + NAME(STAGE0), NAME(STAGE1), NAME(STAGE2), > + NAME(STAGE3), NAME(STAGE4), NAME(STAGE6), > +#undef NAME > + }; > + return names[stage]; > +} > + > static inline const char *pipe2name(enum mdp5_pipe pipe) > { > static const char *names[] = { > diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c > index b6f1fc66..9f99b4d 100644 > --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c > +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c > @@ -16,6 +16,7 @@ > * this program. If not, see <http://www.gnu.org/licenses/>. > */ > > +#include <drm/drm_print.h> > #include "mdp5_kms.h" > > struct mdp5_plane { > @@ -187,6 +188,20 @@ done: > #undef SET_PROPERTY > } > > +static void > +mdp5_plane_atomic_print_state(struct drm_print *p, > + const struct drm_plane_state *state) > +{ > + struct mdp5_plane_state *pstate = to_mdp5_plane_state(state); > + > + drm_printf(p, "\tpremultiplied=%u\n", pstate->premultiplied); > + drm_printf(p, "\tzpos=%u\n", pstate->zpos); > + drm_printf(p, "\talpha=%u\n", pstate->alpha); > + drm_printf(p, "\tstage=%s\n", stage2name(pstate->stage)); > + drm_printf(p, "\tmode_changed=%u\n", pstate->mode_changed); > + drm_printf(p, "\tpending=%u\n", pstate->pending); > +} > + > static void mdp5_plane_reset(struct drm_plane *plane) > { > struct mdp5_plane_state *mdp5_state; > @@ -250,6 +265,7 @@ static const struct drm_plane_funcs mdp5_plane_funcs = { > .reset = mdp5_plane_reset, > .atomic_duplicate_state = mdp5_plane_duplicate_state, > .atomic_destroy_state = mdp5_plane_destroy_state, > + .atomic_print_state = mdp5_plane_atomic_print_state, > }; > > static int mdp5_plane_prepare_fb(struct drm_plane *plane, > @@ -907,7 +923,7 @@ struct drm_plane *mdp5_plane_init(struct drm_device *dev, > type = private_plane ? DRM_PLANE_TYPE_PRIMARY : DRM_PLANE_TYPE_OVERLAY; > ret = drm_universal_plane_init(dev, plane, 0xff, &mdp5_plane_funcs, > mdp5_plane->formats, mdp5_plane->nformats, > - type, NULL); > + type, "%s", mdp5_plane->name); > if (ret) > goto fail; > > -- > 2.7.4 > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel