Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+26
+24
drivers/gpu/drm/radeon/kv_dpm.c
··· 1238 1238 return ret; 1239 1239 } 1240 1240 1241 + int 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 + 1241 1265 void kv_dpm_disable(struct radeon_device *rdev) 1242 1266 { 1243 1267 kv_smc_bapm_enable(rdev, false);
+1
drivers/gpu/drm/radeon/radeon_asic.c
··· 2169 2169 .init = &kv_dpm_init, 2170 2170 .setup_asic = &kv_dpm_setup_asic, 2171 2171 .enable = &kv_dpm_enable, 2172 + .late_enable = &kv_dpm_late_enable, 2172 2173 .disable = &kv_dpm_disable, 2173 2174 .pre_set_power_state = &kv_dpm_pre_set_power_state, 2174 2175 .set_power_state = &kv_dpm_set_power_state,
+1
drivers/gpu/drm/radeon/radeon_asic.h
··· 776 776 777 777 int kv_dpm_init(struct radeon_device *rdev); 778 778 int kv_dpm_enable(struct radeon_device *rdev); 779 + int kv_dpm_late_enable(struct radeon_device *rdev); 779 780 void kv_dpm_disable(struct radeon_device *rdev); 780 781 int kv_dpm_pre_set_power_state(struct radeon_device *rdev); 781 782 int kv_dpm_set_power_state(struct radeon_device *rdev);