drm/vc4: Make sure that the v3d ident debugfs has vc4's power on.
authorEric Anholt <eric@anholt.net>
Wed, 20 Feb 2019 21:03:43 +0000 (13:03 -0800)
committerEric Anholt <eric@anholt.net>
Mon, 1 Apr 2019 17:44:34 +0000 (10:44 -0700)
Otherwise, you sometimes decode the ident fields based on 0xdeadbeef
register reads.

Signed-off-by: Eric Anholt <eric@anholt.net>
Link: https://patchwork.freedesktop.org/patch/msgid/20190220210343.28157-7-eric@anholt.net
Reviewed-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
drivers/gpu/drm/vc4/vc4_v3d.c

index b2b974f..27c70eb 100644 (file)
@@ -121,18 +121,23 @@ int vc4_v3d_debugfs_ident(struct seq_file *m, void *unused)
        struct drm_info_node *node = (struct drm_info_node *)m->private;
        struct drm_device *dev = node->minor->dev;
        struct vc4_dev *vc4 = to_vc4_dev(dev);
-       uint32_t ident1 = V3D_READ(V3D_IDENT1);
-       uint32_t nslc = VC4_GET_FIELD(ident1, V3D_IDENT1_NSLC);
-       uint32_t tups = VC4_GET_FIELD(ident1, V3D_IDENT1_TUPS);
-       uint32_t qups = VC4_GET_FIELD(ident1, V3D_IDENT1_QUPS);
-
-       seq_printf(m, "Revision:   %d\n",
-                  VC4_GET_FIELD(ident1, V3D_IDENT1_REV));
-       seq_printf(m, "Slices:     %d\n", nslc);
-       seq_printf(m, "TMUs:       %d\n", nslc * tups);
-       seq_printf(m, "QPUs:       %d\n", nslc * qups);
-       seq_printf(m, "Semaphores: %d\n",
-                  VC4_GET_FIELD(ident1, V3D_IDENT1_NSEM));
+       int ret = vc4_v3d_pm_get(vc4);
+
+       if (ret == 0) {
+               uint32_t ident1 = V3D_READ(V3D_IDENT1);
+               uint32_t nslc = VC4_GET_FIELD(ident1, V3D_IDENT1_NSLC);
+               uint32_t tups = VC4_GET_FIELD(ident1, V3D_IDENT1_TUPS);
+               uint32_t qups = VC4_GET_FIELD(ident1, V3D_IDENT1_QUPS);
+
+               seq_printf(m, "Revision:   %d\n",
+                          VC4_GET_FIELD(ident1, V3D_IDENT1_REV));
+               seq_printf(m, "Slices:     %d\n", nslc);
+               seq_printf(m, "TMUs:       %d\n", nslc * tups);
+               seq_printf(m, "QPUs:       %d\n", nslc * qups);
+               seq_printf(m, "Semaphores: %d\n",
+                          VC4_GET_FIELD(ident1, V3D_IDENT1_NSEM));
+               vc4_v3d_pm_put(vc4);
+       }
 
        return 0;
 }