diff options
author | Rex Zhu <Rex.Zhu@amd.com> | 2016-12-07 04:54:57 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-12-15 15:16:24 -0500 |
commit | c4d17b81244d23e7727f0bf68f0f63905e871a73 (patch) | |
tree | 8f84a3efef0db8f24f3b8af4bf11269c3adf6a98 | |
parent | 98fccc78bc29e35f7204f5f6cf7f0a923e335222 (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.c | 71 |
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 | ||
3989 | static void cz_enable_sck_slow_down_on_power_up(struct amdgpu_device *adev, | 3986 | static 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 | ||
4006 | static void gfx_v8_0_init_pg(struct amdgpu_device *adev) | 4003 | static 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 | ||
4040 | static void gfx_v8_0_rlc_stop(struct amdgpu_device *adev) | 4033 | static void gfx_v8_0_rlc_stop(struct amdgpu_device *adev) |