--- a/sys/dev/drm/radeon/btc_dpm.c +++ b/sys/dev/drm/radeon/btc_dpm.c @@ -2574,6 +2574,11 @@ ret = rv7xx_parse_power_table(rdev); if (ret) return ret; + + if (rdev->pm.dpm.boot_ps == NULL) { + DRM_ERROR("Missing BOOT state in VBIOS power table\n"); + return -EINVAL; + } ret = r600_parse_extended_power_table(rdev); if (ret) return ret; --- 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);