aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2013-12-19 14:03:36 -0500
committerAlex Deucher <alexander.deucher@amd.com>2013-12-24 17:56:34 -0500
commitd8852c3446ddeab300c4ae397d658b8715535102 (patch)
tree1bf0d6b336fd5ac99a83d3988c2627be16285d41 /drivers
parent902084278b96a8ac6b541152130f5d7a4cd307b5 (diff)
drm/radeon/dpm: add late_enable for KB/KV
Make sure interrupts are enabled before we enable thermal interrupts. Also, don't powergate uvd, etc. until after the ring tests. Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/radeon/kv_dpm.c24
-rw-r--r--drivers/gpu/drm/radeon/radeon_asic.c1
-rw-r--r--drivers/gpu/drm/radeon/radeon_asic.h1
3 files changed, 26 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/kv_dpm.c b/drivers/gpu/drm/radeon/kv_dpm.c
index a0e20eb963db..eced97975952 100644
--- a/drivers/gpu/drm/radeon/kv_dpm.c
+++ b/drivers/gpu/drm/radeon/kv_dpm.c
@@ -1238,6 +1238,30 @@ int kv_dpm_enable(struct radeon_device *rdev)
1238 return ret; 1238 return ret;
1239} 1239}
1240 1240
1241int kv_dpm_late_enable(struct radeon_device *rdev)
1242{
1243 int ret;
1244
1245 if (rdev->irq.installed &&
1246 r600_is_internal_thermal_sensor(rdev->pm.int_thermal_type)) {
1247 ret = kv_set_thermal_temperature_range(rdev, R600_TEMP_RANGE_MIN, R600_TEMP_RANGE_MAX);
1248 if (ret) {
1249 DRM_ERROR("kv_set_thermal_temperature_range failed\n");
1250 return ret;
1251 }
1252 rdev->irq.dpm_thermal = true;
1253 radeon_irq_set(rdev);
1254 }
1255
1256 /* powerdown unused blocks for now */
1257 kv_dpm_powergate_acp(rdev, true);
1258 kv_dpm_powergate_samu(rdev, true);
1259 kv_dpm_powergate_vce(rdev, true);
1260 kv_dpm_powergate_uvd(rdev, true);
1261
1262 return ret;
1263}
1264
1241void kv_dpm_disable(struct radeon_device *rdev) 1265void kv_dpm_disable(struct radeon_device *rdev)
1242{ 1266{
1243 kv_smc_bapm_enable(rdev, false); 1267 kv_smc_bapm_enable(rdev, false);
diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c
index d96dfa314a37..5b14b9e8f0ab 100644
--- a/drivers/gpu/drm/radeon/radeon_asic.c
+++ b/drivers/gpu/drm/radeon/radeon_asic.c
@@ -2169,6 +2169,7 @@ static struct radeon_asic kv_asic = {
2169 .init = &kv_dpm_init, 2169 .init = &kv_dpm_init,
2170 .setup_asic = &kv_dpm_setup_asic, 2170 .setup_asic = &kv_dpm_setup_asic,
2171 .enable = &kv_dpm_enable, 2171 .enable = &kv_dpm_enable,
2172 .late_enable = &kv_dpm_late_enable,
2172 .disable = &kv_dpm_disable, 2173 .disable = &kv_dpm_disable,
2173 .pre_set_power_state = &kv_dpm_pre_set_power_state, 2174 .pre_set_power_state = &kv_dpm_pre_set_power_state,
2174 .set_power_state = &kv_dpm_set_power_state, 2175 .set_power_state = &kv_dpm_set_power_state,
diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h
index 095a4faf6d23..cb5ca215b11c 100644
--- a/drivers/gpu/drm/radeon/radeon_asic.h
+++ b/drivers/gpu/drm/radeon/radeon_asic.h
@@ -776,6 +776,7 @@ void ci_dpm_powergate_uvd(struct radeon_device *rdev, bool gate);
776 776
777int kv_dpm_init(struct radeon_device *rdev); 777int kv_dpm_init(struct radeon_device *rdev);
778int kv_dpm_enable(struct radeon_device *rdev); 778int kv_dpm_enable(struct radeon_device *rdev);
779int kv_dpm_late_enable(struct radeon_device *rdev);
779void kv_dpm_disable(struct radeon_device *rdev); 780void kv_dpm_disable(struct radeon_device *rdev);
780int kv_dpm_pre_set_power_state(struct radeon_device *rdev); 781int kv_dpm_pre_set_power_state(struct radeon_device *rdev);
781int kv_dpm_set_power_state(struct radeon_device *rdev); 782int kv_dpm_set_power_state(struct radeon_device *rdev);