[PATCH] drm/radeon: fix freeze for laptop with Turks/Thames GPU.
Alex Deucher
alexdeucher at gmail.com
Tue Jun 9 08:31:43 PDT 2015
On Fri, Jun 5, 2015 at 1:33 PM, <j.glisse at gmail.com> wrote:
> From: Jérôme Glisse <jglisse at redhat.com>
>
> 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 at redhat.com>
> Cc: stable at vger.kernel.org
Applied. thanks!
Alex
> ---
> drivers/gpu/drm/radeon/radeon_device.c | 15 +++++++++++++++
> 1 files changed, 15 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
> index b7ca4c5..a7fdfa4 100644
> --- a/drivers/gpu/drm/radeon/radeon_device.c
> +++ b/drivers/gpu/drm/radeon/radeon_device.c
> @@ -1463,6 +1463,21 @@ int radeon_device_init(struct radeon_device *rdev,
> 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);
> --
> 1.7.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
More information about the dri-devel
mailing list