radeonsi: use proper GRBM_GFX_INDEX offset for CI+
authorAlex Deucher <alexander.deucher@amd.com>
Fri, 13 Nov 2015 21:21:09 +0000 (16:21 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 16 Nov 2015 15:09:34 +0000 (10:09 -0500)
The offset is different on CI and newer.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
src/gallium/drivers/radeonsi/si_state.c

index 93847d5ec2f76314a46a4f90af7ea86776cf076e..f0f87da46ea58cef7482f3d4b6055b66cf92ccf3 100644 (file)
@@ -3256,21 +3256,29 @@ si_write_harvested_raster_configs(struct si_context *sctx,
                        }
                }
 
-               /* GRBM_GFX_INDEX is privileged on VI */
-               if (sctx->b.chip_class <= CIK)
+               /* GRBM_GFX_INDEX has a different offset on SI and CI+ */
+               if (sctx->b.chip_class < CIK)
                        si_pm4_set_reg(pm4, GRBM_GFX_INDEX,
                                       SE_INDEX(se) | SH_BROADCAST_WRITES |
                                       INSTANCE_BROADCAST_WRITES);
+               else
+                       si_pm4_set_reg(pm4, R_030800_GRBM_GFX_INDEX,
+                                      S_030800_SE_INDEX(se) | S_030800_SH_BROADCAST_WRITES(1) |
+                                      S_030800_INSTANCE_BROADCAST_WRITES(1));
                si_pm4_set_reg(pm4, R_028350_PA_SC_RASTER_CONFIG, raster_config_se);
                if (sctx->b.chip_class >= CIK)
                        si_pm4_set_reg(pm4, R_028354_PA_SC_RASTER_CONFIG_1, raster_config_1);
        }
 
-       /* GRBM_GFX_INDEX is privileged on VI */
-       if (sctx->b.chip_class <= CIK)
+       /* GRBM_GFX_INDEX has a different offset on SI and CI+ */
+       if (sctx->b.chip_class < CIK)
                si_pm4_set_reg(pm4, GRBM_GFX_INDEX,
                               SE_BROADCAST_WRITES | SH_BROADCAST_WRITES |
                               INSTANCE_BROADCAST_WRITES);
+       else
+               si_pm4_set_reg(pm4, R_030800_GRBM_GFX_INDEX,
+                              S_030800_SE_BROADCAST_WRITES(1) | S_030800_SH_BROADCAST_WRITES(1) |
+                              S_030800_INSTANCE_BROADCAST_WRITES(1));
 }
 
 static void si_init_config(struct si_context *sctx)