diff mbox series

[7/7] drm/vc4: Make sure that the v3d ident debugfs has vc4's power on.

Message ID 20190220210343.28157-7-eric@anholt.net (mailing list archive)
State New, archived
Headers show
Series [1/7] drm: Add a helper function for printing a debugfs_regset32. | expand

Commit Message

Eric Anholt Feb. 20, 2019, 9:03 p.m. UTC
Otherwise, you sometimes decode the ident fields based on 0xdeadbeef
register reads.

Signed-off-by: Eric Anholt <eric@anholt.net>
---
 drivers/gpu/drm/vc4/vc4_v3d.c | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

Comments

Paul Kocialkowski March 22, 2019, 10:43 a.m. UTC | #1
Hi,

Le mercredi 20 février 2019 à 13:03 -0800, Eric Anholt a écrit :
> Otherwise, you sometimes decode the ident fields based on 0xdeadbeef
> register reads.

Reviewed-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>

Cheers,

Paul

> Signed-off-by: Eric Anholt <eric@anholt.net>
> ---
>  drivers/gpu/drm/vc4/vc4_v3d.c | 29 +++++++++++++++++------------
>  1 file changed, 17 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/vc4/vc4_v3d.c b/drivers/gpu/drm/vc4/vc4_v3d.c
> index 7820b8eaaa98..36e6c7086ecf 100644
> --- a/drivers/gpu/drm/vc4/vc4_v3d.c
> +++ b/drivers/gpu/drm/vc4/vc4_v3d.c
> @@ -108,18 +108,23 @@ static 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;
>  }
diff mbox series

Patch

diff --git a/drivers/gpu/drm/vc4/vc4_v3d.c b/drivers/gpu/drm/vc4/vc4_v3d.c
index 7820b8eaaa98..36e6c7086ecf 100644
--- a/drivers/gpu/drm/vc4/vc4_v3d.c
+++ b/drivers/gpu/drm/vc4/vc4_v3d.c
@@ -108,18 +108,23 @@  static 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;
 }