drm/msm/a7xx: actually use a7xx state registers
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Thu, 12 Oct 2023 01:20:13 +0000 (04:20 +0300)
committerRob Clark <robdclark@chromium.org>
Mon, 16 Oct 2023 16:38:56 +0000 (09:38 -0700)
Make a6xx_get_registers() use a7xx registers instead of a6xx ones if the
detected Adreno is from the A7xx family.

Fixes: e997ae5f45ca ("drm/msm/a6xx: Mostly implement A7xx gpu_state")
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Patchwork: https://patchwork.freedesktop.org/patch/562233/
Signed-off-by: Rob Clark <robdclark@chromium.org>
drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c
drivers/gpu/drm/msm/adreno/a6xx_gpu_state.h

index 18be2d3bde0999ee8609184ad34675844872ab16..91a564a24dbecd3a29e223c2f71e0dcfb8b6e156 100644 (file)
@@ -882,12 +882,13 @@ static void a6xx_snapshot_gmu_hfi_history(struct msm_gpu *gpu,
        }
 }
 
+#define A6XX_REGLIST_SIZE        1
 #define A6XX_GBIF_REGLIST_SIZE   1
 static void a6xx_get_registers(struct msm_gpu *gpu,
                struct a6xx_gpu_state *a6xx_state,
                struct a6xx_crashdumper *dumper)
 {
-       int i, count = ARRAY_SIZE(a6xx_ahb_reglist) +
+       int i, count = A6XX_REGLIST_SIZE +
                ARRAY_SIZE(a6xx_reglist) +
                ARRAY_SIZE(a6xx_hlsq_reglist) + A6XX_GBIF_REGLIST_SIZE;
        int index = 0;
@@ -901,12 +902,20 @@ static void a6xx_get_registers(struct msm_gpu *gpu,
 
        a6xx_state->nr_registers = count;
 
-       for (i = 0; i < ARRAY_SIZE(a6xx_ahb_reglist); i++)
+       if (adreno_is_a7xx(adreno_gpu))
                a6xx_get_ahb_gpu_registers(gpu,
-                       a6xx_state, &a6xx_ahb_reglist[i],
+                       a6xx_state, &a7xx_ahb_reglist,
+                       &a6xx_state->registers[index++]);
+       else
+               a6xx_get_ahb_gpu_registers(gpu,
+                       a6xx_state, &a6xx_ahb_reglist,
                        &a6xx_state->registers[index++]);
 
-       if (a6xx_has_gbif(adreno_gpu))
+       if (adreno_is_a7xx(adreno_gpu))
+               a6xx_get_ahb_gpu_registers(gpu,
+                               a6xx_state, &a7xx_gbif_reglist,
+                               &a6xx_state->registers[index++]);
+       else if (a6xx_has_gbif(adreno_gpu))
                a6xx_get_ahb_gpu_registers(gpu,
                                a6xx_state, &a6xx_gbif_reglist,
                                &a6xx_state->registers[index++]);
index 8d7e6f26480aa0abfee2047af817c9b91d43f3ea..9560fc1b858a90da2169a853834ac536cfe1d4d7 100644 (file)
@@ -328,9 +328,8 @@ static const u32 a6xx_gbif_registers[] = {
        0x3C00, 0X3C0B, 0X3C40, 0X3C47, 0X3CC0, 0X3CD1, 0xE3A, 0xE3A,
 };
 
-static const struct a6xx_registers a6xx_ahb_reglist[] = {
-       REGS(a6xx_ahb_registers, 0, 0),
-};
+static const struct a6xx_registers a6xx_ahb_reglist =
+       REGS(a6xx_ahb_registers, 0, 0);
 
 static const struct a6xx_registers a6xx_vbif_reglist =
                        REGS(a6xx_vbif_registers, 0, 0);
@@ -353,9 +352,8 @@ static const u32 a7xx_gbif_registers[] = {
        0x3cc0, 0x3cd1,
 };
 
-static const struct a6xx_registers a7xx_ahb_reglist[] = {
-       REGS(a7xx_ahb_registers, 0, 0),
-};
+static const struct a6xx_registers a7xx_ahb_reglist=
+       REGS(a7xx_ahb_registers, 0, 0);
 
 static const struct a6xx_registers a7xx_gbif_reglist =
        REGS(a7xx_gbif_registers, 0, 0);