Skip to content

Commit dec7880

Browse files
Chengming Guialexdeucher
authored andcommitted
drm/amd/amdgpu: Correct gfx10's CG sequence
Incorrect CG sequence will cause gfx timedout, if we keep switching power profile mode (enter profile mod such as PEAK will disable CG, exit profile mode EXIT will enable CG) when run Vulkan test case(case used for test: vkexample). Signed-off-by: Chengming Gui <[email protected]> Reviewed-by: Kenneth Feng <[email protected]> Acked-by: Evan Quan <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent 5932d26 commit dec7880

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

drivers/gpu/drm/amd/amdgpu/gfx_v10_0.c

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4104,6 +4104,12 @@ static void gfx_v10_0_update_medium_grain_clock_gating(struct amdgpu_device *ade
41044104

41054105
/* It is disabled by HW by default */
41064106
if (enable && (adev->cg_flags & AMD_CG_SUPPORT_GFX_MGCG)) {
4107+
/* 0 - Disable some blocks' MGCG */
4108+
WREG32_SOC15(GC, 0, mmGRBM_GFX_INDEX, 0xe0000000);
4109+
WREG32_SOC15(GC, 0, mmCGTT_WD_CLK_CTRL, 0xff000000);
4110+
WREG32_SOC15(GC, 0, mmCGTT_VGT_CLK_CTRL, 0xff000000);
4111+
WREG32_SOC15(GC, 0, mmCGTT_IA_CLK_CTRL, 0xff000000);
4112+
41074113
/* 1 - RLC_CGTT_MGCG_OVERRIDE */
41084114
def = data = RREG32_SOC15(GC, 0, mmRLC_CGTT_MGCG_OVERRIDE);
41094115
data &= ~(RLC_CGTT_MGCG_OVERRIDE__GRBM_CGTT_SCLK_OVERRIDE_MASK |
@@ -4143,19 +4149,20 @@ static void gfx_v10_0_update_medium_grain_clock_gating(struct amdgpu_device *ade
41434149
if (def != data)
41444150
WREG32_SOC15(GC, 0, mmRLC_CGTT_MGCG_OVERRIDE, data);
41454151

4146-
/* 2 - disable MGLS in RLC */
4152+
/* 2 - disable MGLS in CP */
4153+
data = RREG32_SOC15(GC, 0, mmCP_MEM_SLP_CNTL);
4154+
if (data & CP_MEM_SLP_CNTL__CP_MEM_LS_EN_MASK) {
4155+
data &= ~CP_MEM_SLP_CNTL__CP_MEM_LS_EN_MASK;
4156+
WREG32_SOC15(GC, 0, mmCP_MEM_SLP_CNTL, data);
4157+
}
4158+
4159+
/* 3 - disable MGLS in RLC */
41474160
data = RREG32_SOC15(GC, 0, mmRLC_MEM_SLP_CNTL);
41484161
if (data & RLC_MEM_SLP_CNTL__RLC_MEM_LS_EN_MASK) {
41494162
data &= ~RLC_MEM_SLP_CNTL__RLC_MEM_LS_EN_MASK;
41504163
WREG32_SOC15(GC, 0, mmRLC_MEM_SLP_CNTL, data);
41514164
}
41524165

4153-
/* 3 - disable MGLS in CP */
4154-
data = RREG32_SOC15(GC, 0, mmCP_MEM_SLP_CNTL);
4155-
if (data & CP_MEM_SLP_CNTL__CP_MEM_LS_EN_MASK) {
4156-
data &= ~CP_MEM_SLP_CNTL__CP_MEM_LS_EN_MASK;
4157-
WREG32_SOC15(GC, 0, mmCP_MEM_SLP_CNTL, data);
4158-
}
41594166
}
41604167
}
41614168

@@ -4266,7 +4273,7 @@ static int gfx_v10_0_update_gfx_clock_gating(struct amdgpu_device *adev,
42664273
/* === CGCG /CGLS for GFX 3D Only === */
42674274
gfx_v10_0_update_3d_clock_gating(adev, enable);
42684275
/* === MGCG + MGLS === */
4269-
gfx_v10_0_update_medium_grain_clock_gating(adev, enable);
4276+
/* gfx_v10_0_update_medium_grain_clock_gating(adev, enable); */
42704277
}
42714278

42724279
if (adev->cg_flags &

0 commit comments

Comments
 (0)