Message ID | 1433525637-10174-1-git-send-email-j.glisse@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Jun 5, 2015 at 1:33 PM, <j.glisse@gmail.com> wrote: > From: Jérôme Glisse <jglisse@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@redhat.com> > Cc: stable@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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel
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);