--- a/sys/dev/drm/radeon/rv770_dpm.c +++ b/sys/dev/drm/radeon/rv770_dpm.c @@ -1901,6 +1901,11 @@ struct radeon_ps *boot_ps = rdev->pm.dpm.boot_ps; int ret; + if (boot_ps == NULL || boot_ps->ps_priv == NULL) { + DRM_ERROR("no usable boot power state in power table\n"); + return -EINVAL; + } + if (pi->gfx_clock_gating) rv770_restore_cgcg(rdev); --- a/sys/dev/drm/radeon/radeon_pm.c +++ b/sys/dev/drm/radeon/radeon_pm.c @@ -1445,7 +1445,11 @@ INIT_WORK(&rdev->pm.dpm.thermal.work, radeon_dpm_thermal_work_handler); mutex_lock(&rdev->pm.mutex); - radeon_dpm_init(rdev); + ret = radeon_dpm_init(rdev); + if (ret) { + mutex_unlock(&rdev->pm.mutex); + goto dpm_failed; + } rdev->pm.dpm.current_ps = rdev->pm.dpm.requested_ps = rdev->pm.dpm.boot_ps; if (radeon_dpm == 1) radeon_dpm_print_power_states(rdev);