aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRex Zhu <Rex.Zhu@amd.com>2016-12-07 04:54:57 -0500
committerAlex Deucher <alexander.deucher@amd.com>2016-12-15 15:16:24 -0500
commitc4d17b81244d23e7727f0bf68f0f63905e871a73 (patch)
tree8f84a3efef0db8f24f3b8af4bf11269c3adf6a98
parent98fccc78bc29e35f7204f5f6cf7f0a923e335222 (diff)
drm/amdgpu: always initialize gfx pg for gfx_v8.0.
v2: always init gfx pg for asics that can support. 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.c71
1 files changed, 32 insertions, 39 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index 2e65ccbb91be..48ee40dce60e 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -3970,20 +3970,17 @@ static void gfx_v8_0_init_power_gating(struct amdgpu_device *adev)
3970{ 3970{
3971 uint32_t data; 3971 uint32_t data;
3972 3972
3973 if (adev->pg_flags & (AMD_PG_SUPPORT_GFX_PG | 3973 WREG32_FIELD(CP_RB_WPTR_POLL_CNTL, IDLE_POLL_COUNT, 0x60);
3974 AMD_PG_SUPPORT_GFX_SMG | 3974
3975 AMD_PG_SUPPORT_GFX_DMG)) { 3975 data = REG_SET_FIELD(0, RLC_PG_DELAY, POWER_UP_DELAY, 0x10);
3976 WREG32_FIELD(CP_RB_WPTR_POLL_CNTL, IDLE_POLL_COUNT, 0x60); 3976 data = REG_SET_FIELD(data, RLC_PG_DELAY, POWER_DOWN_DELAY, 0x10);
3977 3977 data = REG_SET_FIELD(data, RLC_PG_DELAY, CMD_PROPAGATE_DELAY, 0x10);
3978 data = REG_SET_FIELD(0, RLC_PG_DELAY, POWER_UP_DELAY, 0x10); 3978 data = REG_SET_FIELD(data, RLC_PG_DELAY, MEM_SLEEP_DELAY, 0x10);
3979 data = REG_SET_FIELD(data, RLC_PG_DELAY, POWER_DOWN_DELAY, 0x10); 3979 WREG32(mmRLC_PG_DELAY, data);
3980 data = REG_SET_FIELD(data, RLC_PG_DELAY, CMD_PROPAGATE_DELAY, 0x10); 3980
3981 data = REG_SET_FIELD(data, RLC_PG_DELAY, MEM_SLEEP_DELAY, 0x10); 3981 WREG32_FIELD(RLC_PG_DELAY_2, SERDES_CMD_DELAY, 0x3);
3982 WREG32(mmRLC_PG_DELAY, data); 3982 WREG32_FIELD(RLC_AUTO_PG_CTRL, GRBM_REG_SAVE_GFX_IDLE_THRESHOLD, 0x55f0);
3983 3983
3984 WREG32_FIELD(RLC_PG_DELAY_2, SERDES_CMD_DELAY, 0x3);
3985 WREG32_FIELD(RLC_AUTO_PG_CTRL, GRBM_REG_SAVE_GFX_IDLE_THRESHOLD, 0x55f0);
3986 }
3987} 3984}
3988 3985
3989static void cz_enable_sck_slow_down_on_power_up(struct amdgpu_device *adev, 3986static void cz_enable_sck_slow_down_on_power_up(struct amdgpu_device *adev,
@@ -4005,36 +4002,32 @@ static void cz_enable_cp_power_gating(struct amdgpu_device *adev, bool enable)
4005 4002
4006static void gfx_v8_0_init_pg(struct amdgpu_device *adev) 4003static void gfx_v8_0_init_pg(struct amdgpu_device *adev)
4007{ 4004{
4008 if (adev->pg_flags & (AMD_PG_SUPPORT_GFX_PG | 4005 if ((adev->asic_type == CHIP_CARRIZO) ||
4009 AMD_PG_SUPPORT_GFX_SMG | 4006 (adev->asic_type == CHIP_STONEY)) {
4010 AMD_PG_SUPPORT_GFX_DMG |
4011 AMD_PG_SUPPORT_CP |
4012 AMD_PG_SUPPORT_GDS |
4013 AMD_PG_SUPPORT_RLC_SMU_HS)) {
4014 gfx_v8_0_init_csb(adev); 4007 gfx_v8_0_init_csb(adev);
4015 gfx_v8_0_init_save_restore_list(adev); 4008 gfx_v8_0_init_save_restore_list(adev);
4016 gfx_v8_0_enable_save_restore_machine(adev); 4009 gfx_v8_0_enable_save_restore_machine(adev);
4017 4010 WREG32(mmRLC_JUMP_TABLE_RESTORE, adev->gfx.rlc.cp_table_gpu_addr >> 8);
4018 if ((adev->asic_type == CHIP_CARRIZO) || 4011 gfx_v8_0_init_power_gating(adev);
4019 (adev->asic_type == CHIP_STONEY)) { 4012 WREG32(mmRLC_PG_ALWAYS_ON_CU_MASK, adev->gfx.cu_info.ao_cu_mask);
4020 WREG32(mmRLC_JUMP_TABLE_RESTORE, adev->gfx.rlc.cp_table_gpu_addr >> 8); 4013 if (adev->pg_flags & AMD_PG_SUPPORT_RLC_SMU_HS) {
4021 gfx_v8_0_init_power_gating(adev); 4014 cz_enable_sck_slow_down_on_power_up(adev, true);
4022 WREG32(mmRLC_PG_ALWAYS_ON_CU_MASK, adev->gfx.cu_info.ao_cu_mask); 4015 cz_enable_sck_slow_down_on_power_down(adev, true);
4023 if (adev->pg_flags & AMD_PG_SUPPORT_RLC_SMU_HS) { 4016 } else {
4024 cz_enable_sck_slow_down_on_power_up(adev, true); 4017 cz_enable_sck_slow_down_on_power_up(adev, false);
4025 cz_enable_sck_slow_down_on_power_down(adev, true); 4018 cz_enable_sck_slow_down_on_power_down(adev, false);
4026 } else {
4027 cz_enable_sck_slow_down_on_power_up(adev, false);
4028 cz_enable_sck_slow_down_on_power_down(adev, false);
4029 }
4030 if (adev->pg_flags & AMD_PG_SUPPORT_CP)
4031 cz_enable_cp_power_gating(adev, true);
4032 else
4033 cz_enable_cp_power_gating(adev, false);
4034 } else if (adev->asic_type == CHIP_POLARIS11) {
4035 gfx_v8_0_init_power_gating(adev);
4036 } 4019 }
4020 if (adev->pg_flags & AMD_PG_SUPPORT_CP)
4021 cz_enable_cp_power_gating(adev, true);
4022 else
4023 cz_enable_cp_power_gating(adev, false);
4024 } else if (adev->asic_type == CHIP_POLARIS11) {
4025 gfx_v8_0_init_csb(adev);
4026 gfx_v8_0_init_save_restore_list(adev);
4027 gfx_v8_0_enable_save_restore_machine(adev);
4028 gfx_v8_0_init_power_gating(adev);
4037 } 4029 }
4030
4038} 4031}
4039 4032
4040static void gfx_v8_0_rlc_stop(struct amdgpu_device *adev) 4033static void gfx_v8_0_rlc_stop(struct amdgpu_device *adev)