drm/msm/adreno: Don't capture register values if target doesn't define them
authorJordan Crouse <jcrouse@codeaurora.org>
Fri, 2 Nov 2018 15:25:24 +0000 (09:25 -0600)
committerRob Clark <robdclark@gmail.com>
Tue, 11 Dec 2018 18:05:29 +0000 (13:05 -0500)
If the GPU target doesn't define a list of registers then gracefully skip
capturing and/or printing them. This is used by more complex targets like
6xx that have other means of capturing register values.

Signed-off-by: Jordan Crouse <jcrouse@codeaurora.org>
Signed-off-by: Rob Clark <robdclark@gmail.com>
drivers/gpu/drm/msm/adreno/adreno_gpu.c

index cada3e6..789f7af 100644 (file)
@@ -414,6 +414,10 @@ int adreno_gpu_state_get(struct msm_gpu *gpu, struct msm_gpu_state *state)
                }
        }
 
+       /* Some targets prefer to collect their own registers */
+       if (!adreno_gpu->registers)
+               return 0;
+
        /* Count the number of registers */
        for (i = 0; adreno_gpu->registers[i] != ~0; i += 2)
                count += adreno_gpu->registers[i + 1] -
@@ -551,12 +555,14 @@ void adreno_show(struct msm_gpu *gpu, struct msm_gpu_state *state,
                }
        }
 
-       drm_puts(p, "registers:\n");
+       if (state->nr_registers) {
+               drm_puts(p, "registers:\n");
 
-       for (i = 0; i < state->nr_registers; i++) {
-               drm_printf(p, "  - { offset: 0x%04x, value: 0x%08x }\n",
-                       state->registers[i * 2] << 2,
-                       state->registers[(i * 2) + 1]);
+               for (i = 0; i < state->nr_registers; i++) {
+                       drm_printf(p, "  - { offset: 0x%04x, value: 0x%08x }\n",
+                               state->registers[i * 2] << 2,
+                               state->registers[(i * 2) + 1]);
+               }
        }
 }
 #endif
@@ -595,6 +601,9 @@ void adreno_dump(struct msm_gpu *gpu)
        struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
        int i;
 
+       if (!adreno_gpu->registers)
+               return;
+
        /* dump these out in a form that can be parsed by demsm: */
        printk("IO:region %s 00000000 00020000\n", gpu->name);
        for (i = 0; adreno_gpu->registers[i] != ~0; i += 2) {