| From 6dfd197283bffc23a2b046a7f065588de7e1fc1e Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= <jglisse@redhat.com> |
| Date: Fri, 5 Jun 2015 13:33:57 -0400 |
| Subject: drm/radeon: fix freeze for laptop with Turks/Thames GPU. |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= <jglisse@redhat.com> |
| |
| commit 6dfd197283bffc23a2b046a7f065588de7e1fc1e upstream. |
| |
| Laptop with Turks/Thames GPU will freeze if dpm is enabled. It seems |
| the SMC engine is relying on some state inside the CP engine. CP needs |
| to chew at least one packet for it to get in good state for dynamic |
| power management. |
| |
| This patch simply disabled and re-enable DPM after the ring test which |
| is enough to avoid the freeze. |
| |
| Signed-off-by: Jérôme Glisse <jglisse@redhat.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/radeon/radeon_device.c | 15 +++++++++++++++ |
| 1 file changed, 15 insertions(+) |
| |
| --- a/drivers/gpu/drm/radeon/radeon_device.c |
| +++ b/drivers/gpu/drm/radeon/radeon_device.c |
| @@ -1458,6 +1458,21 @@ int radeon_device_init(struct radeon_dev |
| if (r) |
| DRM_ERROR("ib ring test failed (%d).\n", r); |
| |
| + /* |
| + * Turks/Thames GPU will freeze whole laptop if DPM is not restarted |
| + * after the CP ring have chew one packet at least. Hence here we stop |
| + * and restart DPM after the radeon_ib_ring_tests(). |
| + */ |
| + if (rdev->pm.dpm_enabled && |
| + (rdev->pm.pm_method == PM_METHOD_DPM) && |
| + (rdev->family == CHIP_TURKS) && |
| + (rdev->flags & RADEON_IS_MOBILITY)) { |
| + mutex_lock(&rdev->pm.mutex); |
| + radeon_dpm_disable(rdev); |
| + radeon_dpm_enable(rdev); |
| + mutex_unlock(&rdev->pm.mutex); |
| + } |
| + |
| if ((radeon_testing & 1)) { |
| if (rdev->accel_working) |
| radeon_test_moves(rdev); |