drm/radeon: fix runtime suspend breaking secondary GPUs
Subsystems (2)
Dave Airlie
maintainerPATCH 1/2 drm/radeon: fix runtime suspend breaking secondary GPUs
From: Dave Airlie <[email protected]>
Same fix as for nouveau, when we fail with EINVAL, subsequent gets fail hard, causing the device not to open.
Signed-off-by Dave Airlie <[email protected]>
--- drivers/gpu/drm/radeon/radeon_drv.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-)
drivers/gpu/drm/radeon/radeon_drv.c +12 -5
@@ -403,11 +403,15 @@ static int radeon_pmops_runtime_suspend(struct device *dev)struct drm_device *drm_dev =pci_get_drvdata (pdev);int ret; -if (radeon_runtime_pm ==0 ) -return -EINVAL ; +if (radeon_runtime_pm ==0 ) { +pm_runtime_forbid (dev); +return -EBUSY ; + } -if (radeon_runtime_pm ==-1 && !radeon_is_px ()) -return -EINVAL ; +if (radeon_runtime_pm ==-1 && !radeon_is_px ()) { +pm_runtime_forbid (dev); +return -EBUSY ; + } drm_dev->switch_power_state =DRM_SWITCH_POWER_CHANGING ;drm_kms_helper_poll_disable (drm_dev);
@@ -456,12 +460,15 @@ static int radeon_pmops_runtime_idle(struct device *dev)struct drm_device *drm_dev =pci_get_drvdata (pdev);struct drm_crtc *crtc; -if (radeon_runtime_pm ==0 ) +if (radeon_runtime_pm ==0 ) { +pm_runtime_forbid (dev);return -EBUSY ; + }/* are we PX enabled? */ if (radeon_runtime_pm ==-1 && !radeon_is_px ()) {DRM_DEBUG_DRIVER ("failing to power off - not px\n" ); +pm_runtime_forbid (dev);return -EBUSY ; }
Signature · 1 line
1.8.5.3
Dave Airlie
maintainerPATCH 2/2 drm/radeon: fix resuming mode in pm runtime resume path
From: Dave Airlie <[email protected]>
For runtime pm we'd never suspend with the modesetting hw turned on, so don't try and resume the modesetting hw, as that path will take locks that the interface that is causing us to wake up might also take.
Signed-off-by Dave Airlie <[email protected]>
--- drivers/gpu/drm/radeon/radeon_device.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
drivers/gpu/drm/radeon/radeon_device.c +6 -4
@@ -1555,10 +1555,12 @@ int radeon_resume_kms(struct drm_device *dev, bool resume, bool fbcon)/* reset hpd state */ radeon_hpd_init (rdev);/* blat the mode back in */ -drm_helper_resume_force_mode (dev); -/* turn on display hw */ -list_for_each_entry (connector, &dev->mode_config.connector_list, head) { -drm_helper_connector_dpms (connector,DRM_MODE_DPMS_ON ); +if (fbcon) { +drm_helper_resume_force_mode (dev); +/* turn on display hw */ +list_for_each_entry (connector, &dev->mode_config.connector_list, head) { +drm_helper_connector_dpms (connector,DRM_MODE_DPMS_ON ); + } }drm_kms_helper_poll_enable (dev);
Signature · 1 line
1.8.5.3