diff options
author | Rex Zhu <Rex.Zhu@amd.com> | 2016-09-18 04:55:00 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-09-22 10:24:19 -0400 |
commit | a8ca34136453b5a570b514e466f8b0b9efd71df2 (patch) | |
tree | 9d074e4465eedb4c30c61526943434ee12a04113 | |
parent | 1bb08f91b0f6b2dd24a1a5bf42875258647ee285 (diff) |
drm/amdgpu: set gfx clock gating for tonga/polaris.
Signed-off-by: Rex Zhu <Rex.Zhu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c index 6da7d94925eb..f490691d4b6c 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | |||
@@ -5979,6 +5979,76 @@ static int gfx_v8_0_update_gfx_clock_gating(struct amdgpu_device *adev, | |||
5979 | return 0; | 5979 | return 0; |
5980 | } | 5980 | } |
5981 | 5981 | ||
5982 | static int gfx_v8_0_tonga_update_gfx_clock_gating(struct amdgpu_device *adev, | ||
5983 | enum amd_clockgating_state state) | ||
5984 | { | ||
5985 | uint32_t msg_id, pp_state; | ||
5986 | void *pp_handle = adev->powerplay.pp_handle; | ||
5987 | |||
5988 | if (state == AMD_CG_STATE_UNGATE) | ||
5989 | pp_state = 0; | ||
5990 | else | ||
5991 | pp_state = PP_STATE_CG | PP_STATE_LS; | ||
5992 | |||
5993 | msg_id = PP_CG_MSG_ID(PP_GROUP_GFX, | ||
5994 | PP_BLOCK_GFX_CG, | ||
5995 | PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS, | ||
5996 | pp_state); | ||
5997 | amd_set_clockgating_by_smu(pp_handle, msg_id); | ||
5998 | |||
5999 | msg_id = PP_CG_MSG_ID(PP_GROUP_GFX, | ||
6000 | PP_BLOCK_GFX_MG, | ||
6001 | PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS, | ||
6002 | pp_state); | ||
6003 | amd_set_clockgating_by_smu(pp_handle, msg_id); | ||
6004 | |||
6005 | return 0; | ||
6006 | } | ||
6007 | |||
6008 | static int gfx_v8_0_polaris_update_gfx_clock_gating(struct amdgpu_device *adev, | ||
6009 | enum amd_clockgating_state state) | ||
6010 | { | ||
6011 | uint32_t msg_id, pp_state; | ||
6012 | void *pp_handle = adev->powerplay.pp_handle; | ||
6013 | |||
6014 | if (state == AMD_CG_STATE_UNGATE) | ||
6015 | pp_state = 0; | ||
6016 | else | ||
6017 | pp_state = PP_STATE_CG | PP_STATE_LS; | ||
6018 | |||
6019 | msg_id = PP_CG_MSG_ID(PP_GROUP_GFX, | ||
6020 | PP_BLOCK_GFX_CG, | ||
6021 | PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS, | ||
6022 | pp_state); | ||
6023 | amd_set_clockgating_by_smu(pp_handle, msg_id); | ||
6024 | |||
6025 | msg_id = PP_CG_MSG_ID(PP_GROUP_GFX, | ||
6026 | PP_BLOCK_GFX_3D, | ||
6027 | PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS, | ||
6028 | pp_state); | ||
6029 | amd_set_clockgating_by_smu(pp_handle, msg_id); | ||
6030 | |||
6031 | msg_id = PP_CG_MSG_ID(PP_GROUP_GFX, | ||
6032 | PP_BLOCK_GFX_MG, | ||
6033 | PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS, | ||
6034 | pp_state); | ||
6035 | amd_set_clockgating_by_smu(pp_handle, msg_id); | ||
6036 | |||
6037 | msg_id = PP_CG_MSG_ID(PP_GROUP_GFX, | ||
6038 | PP_BLOCK_GFX_RLC, | ||
6039 | PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS, | ||
6040 | pp_state); | ||
6041 | amd_set_clockgating_by_smu(pp_handle, msg_id); | ||
6042 | |||
6043 | msg_id = PP_CG_MSG_ID(PP_GROUP_GFX, | ||
6044 | PP_BLOCK_GFX_CP, | ||
6045 | PP_STATE_SUPPORT_CG | PP_STATE_SUPPORT_LS, | ||
6046 | pp_state); | ||
6047 | amd_set_clockgating_by_smu(pp_handle, msg_id); | ||
6048 | |||
6049 | return 0; | ||
6050 | } | ||
6051 | |||
5982 | static int gfx_v8_0_set_clockgating_state(void *handle, | 6052 | static int gfx_v8_0_set_clockgating_state(void *handle, |
5983 | enum amd_clockgating_state state) | 6053 | enum amd_clockgating_state state) |
5984 | { | 6054 | { |
@@ -5991,6 +6061,13 @@ static int gfx_v8_0_set_clockgating_state(void *handle, | |||
5991 | gfx_v8_0_update_gfx_clock_gating(adev, | 6061 | gfx_v8_0_update_gfx_clock_gating(adev, |
5992 | state == AMD_CG_STATE_GATE ? true : false); | 6062 | state == AMD_CG_STATE_GATE ? true : false); |
5993 | break; | 6063 | break; |
6064 | case CHIP_TONGA: | ||
6065 | gfx_v8_0_tonga_update_gfx_clock_gating(adev, state); | ||
6066 | break; | ||
6067 | case CHIP_POLARIS10: | ||
6068 | case CHIP_POLARIS11: | ||
6069 | gfx_v8_0_polaris_update_gfx_clock_gating(adev, state); | ||
6070 | break; | ||
5994 | default: | 6071 | default: |
5995 | break; | 6072 | break; |
5996 | } | 6073 | } |