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

drm/radeon: fix pm handling in radeon_gpu_reset

pm_suspend is handled in the radeon_suspend callbacks.
pm_resume has special handling depending on whether
dpm or legacy pm is enabled. Change radeon_gpu_reset
to mirror the behavior in the suspend and resume
pathes.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Cc: stable@vger.kernel.org

+16 -2
+16 -2
drivers/gpu/drm/radeon/radeon_device.c
··· 1680 1680 radeon_save_bios_scratch_regs(rdev); 1681 1681 /* block TTM */ 1682 1682 resched = ttm_bo_lock_delayed_workqueue(&rdev->mman.bdev); 1683 - radeon_pm_suspend(rdev); 1684 1683 radeon_suspend(rdev); 1685 1684 1686 1685 for (i = 0; i < RADEON_NUM_RINGS; ++i) { ··· 1725 1726 } 1726 1727 } 1727 1728 1728 - radeon_pm_resume(rdev); 1729 + if ((rdev->pm.pm_method == PM_METHOD_DPM) && rdev->pm.dpm_enabled) { 1730 + /* do dpm late init */ 1731 + r = radeon_pm_late_init(rdev); 1732 + if (r) { 1733 + rdev->pm.dpm_enabled = false; 1734 + DRM_ERROR("radeon_pm_late_init failed, disabling dpm\n"); 1735 + } 1736 + } else { 1737 + /* resume old pm late */ 1738 + radeon_pm_resume(rdev); 1739 + } 1740 + 1729 1741 drm_helper_resume_force_mode(rdev->ddev); 1742 + 1743 + /* set the power state here in case we are a PX system or headless */ 1744 + if ((rdev->pm.pm_method == PM_METHOD_DPM) && rdev->pm.dpm_enabled) 1745 + radeon_pm_compute_clocks(rdev); 1730 1746 1731 1747 ttm_bo_unlock_delayed_workqueue(&rdev->mman.bdev, resched); 1732 1748 if (r) {