drm/msm/mdp5: add atomic_print_state support
authorRob Clark <robdclark@gmail.com>
Sat, 5 Nov 2016 15:08:11 +0000 (11:08 -0400)
committerSean Paul <seanpaul@chromium.org>
Tue, 8 Nov 2016 21:38:03 +0000 (16:38 -0500)
We subclass drm_plane_state, so add mdp5_plane_atomic_print_state() to
dump out our own driver specific plane state.

Signed-off-by: Rob Clark <robdclark@gmail.com>
Reviewed-by: Sean Paul <seanpaul@chromium.org>
Signed-off-by: Sean Paul <seanpaul@chromium.org>
Link: http://patchwork.freedesktop.org/patch/msgid/1478358492-30738-7-git-send-email-robdclark@gmail.com
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h
drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c

index 03738927be1010501f1275b5286712c92e1a23ed..c6fbcfad2d599b62d6c8447a7f0fcf63ecdafe69 100644 (file)
@@ -114,6 +114,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[] = {
index cf50d3ec8d1b64787170df814179ce7a18faec3e..8bf55e3450c58d9d5b4a19786f186dd4565ded77 100644 (file)
@@ -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 {
@@ -181,6 +182,20 @@ done:
 #undef SET_PROPERTY
 }
 
+static void
+mdp5_plane_atomic_print_state(struct drm_printer *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;
@@ -244,6 +259,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,
@@ -913,7 +929,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;