--- a/dev/drm/radeon/trinity_dpm.c +++ b/dev/drm/radeon/trinity_dpm.c @@ -1104,6 +1104,10 @@ int trinity_dpm_enable(struct radeon_device *rdev) { + if (!rdev->pm.dpm.boot_ps) { + DRM_ERROR("no boot state; dpm init did not succeed\n"); + return -EINVAL; + } struct trinity_power_info *pi = trinity_get_pi(rdev); trinity_acquire_mutex(rdev); @@ -1155,6 +1159,8 @@ void trinity_dpm_disable(struct radeon_device *rdev) { + if (!rdev->pm.dpm.boot_ps) + return; trinity_acquire_mutex(rdev); if (!trinity_dpm_enabled(rdev)) { trinity_release_mutex(rdev); @@ -1236,6 +1242,8 @@ int trinity_dpm_pre_set_power_state(struct radeon_device *rdev) { + if (!rdev->pm.dpm.requested_ps) + return -EINVAL; struct trinity_power_info *pi = trinity_get_pi(rdev); struct radeon_ps requested_ps = *rdev->pm.dpm.requested_ps; struct radeon_ps *new_ps = &requested_ps;