@@ -131,6 +131,8 @@ static void gfx_v11_0_ring_invalidate_tlbs(struct amdgpu_ring *ring,
131131 bool all_hub , uint8_t dst_sel );
132132static void gfx_v11_0_set_safe_mode (struct amdgpu_device * adev );
133133static void gfx_v11_0_unset_safe_mode (struct amdgpu_device * adev );
134+ static void gfx_v11_0_update_perf_clk (struct amdgpu_device * adev ,
135+ bool enable );
134136
135137static void gfx11_kiq_set_resources (struct amdgpu_ring * kiq_ring , uint64_t queue_mask )
136138{
@@ -1139,6 +1141,7 @@ static const struct amdgpu_gfx_funcs gfx_v11_0_gfx_funcs = {
11391141 .read_wave_vgprs = & gfx_v11_0_read_wave_vgprs ,
11401142 .select_me_pipe_q = & gfx_v11_0_select_me_pipe_q ,
11411143 .init_spm_golden = & gfx_v11_0_init_spm_golden_registers ,
1144+ .update_perfmon_mgcg = & gfx_v11_0_update_perf_clk ,
11421145};
11431146
11441147static int gfx_v11_0_gpu_early_init (struct amdgpu_device * adev )
@@ -5182,9 +5185,12 @@ static void gfx_v11_0_update_coarse_grain_clock_gating(struct amdgpu_device *ade
51825185 data = REG_SET_FIELD (data , SDMA0_RLC_CGCG_CTRL , CGCG_INT_ENABLE , 1 );
51835186 WREG32_SOC15 (GC , 0 , regSDMA0_RLC_CGCG_CTRL , data );
51845187
5185- data = RREG32_SOC15 (GC , 0 , regSDMA1_RLC_CGCG_CTRL );
5186- data = REG_SET_FIELD (data , SDMA1_RLC_CGCG_CTRL , CGCG_INT_ENABLE , 1 );
5187- WREG32_SOC15 (GC , 0 , regSDMA1_RLC_CGCG_CTRL , data );
5188+ /* Some ASICs only have one SDMA instance, not need to configure SDMA1 */
5189+ if (adev -> sdma .num_instances > 1 ) {
5190+ data = RREG32_SOC15 (GC , 0 , regSDMA1_RLC_CGCG_CTRL );
5191+ data = REG_SET_FIELD (data , SDMA1_RLC_CGCG_CTRL , CGCG_INT_ENABLE , 1 );
5192+ WREG32_SOC15 (GC , 0 , regSDMA1_RLC_CGCG_CTRL , data );
5193+ }
51885194 } else {
51895195 /* Program RLC_CGCG_CGLS_CTRL */
51905196 def = data = RREG32_SOC15 (GC , 0 , regRLC_CGCG_CGLS_CTRL );
@@ -5213,9 +5219,12 @@ static void gfx_v11_0_update_coarse_grain_clock_gating(struct amdgpu_device *ade
52135219 data &= ~SDMA0_RLC_CGCG_CTRL__CGCG_INT_ENABLE_MASK ;
52145220 WREG32_SOC15 (GC , 0 , regSDMA0_RLC_CGCG_CTRL , data );
52155221
5216- data = RREG32_SOC15 (GC , 0 , regSDMA1_RLC_CGCG_CTRL );
5217- data &= ~SDMA1_RLC_CGCG_CTRL__CGCG_INT_ENABLE_MASK ;
5218- WREG32_SOC15 (GC , 0 , regSDMA1_RLC_CGCG_CTRL , data );
5222+ /* Some ASICs only have one SDMA instance, not need to configure SDMA1 */
5223+ if (adev -> sdma .num_instances > 1 ) {
5224+ data = RREG32_SOC15 (GC , 0 , regSDMA1_RLC_CGCG_CTRL );
5225+ data &= ~SDMA1_RLC_CGCG_CTRL__CGCG_INT_ENABLE_MASK ;
5226+ WREG32_SOC15 (GC , 0 , regSDMA1_RLC_CGCG_CTRL , data );
5227+ }
52195228 }
52205229}
52215230
@@ -5328,8 +5337,7 @@ static int gfx_v11_0_set_powergating_state(void *handle,
53285337 break ;
53295338 case IP_VERSION (11 , 0 , 1 ):
53305339 gfx_v11_cntl_pg (adev , enable );
5331- /* TODO: Enable this when GFXOFF is ready */
5332- // amdgpu_gfx_off_ctrl(adev, enable);
5340+ amdgpu_gfx_off_ctrl (adev , enable );
53335341 break ;
53345342 default :
53355343 break ;
0 commit comments