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

drm/radeon: fix freeze for laptop with Turks/Thames GPU.

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>
Cc: stable@vger.kernel.org
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Jérôme Glisse and committed by
Alex Deucher
6dfd1972 38d8571d

+15
+15
drivers/gpu/drm/radeon/radeon_device.c
··· 1463 1463 if (r) 1464 1464 DRM_ERROR("ib ring test failed (%d).\n", r); 1465 1465 1466 + /* 1467 + * Turks/Thames GPU will freeze whole laptop if DPM is not restarted 1468 + * after the CP ring have chew one packet at least. Hence here we stop 1469 + * and restart DPM after the radeon_ib_ring_tests(). 1470 + */ 1471 + if (rdev->pm.dpm_enabled && 1472 + (rdev->pm.pm_method == PM_METHOD_DPM) && 1473 + (rdev->family == CHIP_TURKS) && 1474 + (rdev->flags & RADEON_IS_MOBILITY)) { 1475 + mutex_lock(&rdev->pm.mutex); 1476 + radeon_dpm_disable(rdev); 1477 + radeon_dpm_enable(rdev); 1478 + mutex_unlock(&rdev->pm.mutex); 1479 + } 1480 + 1466 1481 if ((radeon_testing & 1)) { 1467 1482 if (rdev->accel_working) 1468 1483 radeon_test_moves(rdev);