Control: tags -1 + fixed-upstream patch On 2016-09-05 08:35 +0200, Sven Joachim wrote:
> Control: forwarded -1 > https://lists.freedesktop.org/archives/dri-devel/2016-September/117528.html > > On 2016-09-02 19:48 +0200, Sven Joachim wrote: > >> Package: src:linux >> Version: 4.7.2-1 >> Severity: important >> >> The other day I got myself a new (though not really shiny) laptop[1], >> and while I managed to get most things working, hibernation (via >> "systemctl hibernate") is broken in 4.7: the screen gets black, the fan >> keeps being noisy, and there is no other sign of activity, so I had to >> power-cycle the machine. >> >> With the 4.6 kernel from testing, hibernation and resume works fine. > > Found the culprit in the radeon driver and reported it upstream. And at last it has been fixed in 4.14-rc3 by commit 820608548737 ("drm/radeon: disable hard reset in hibernate for APUs"), although there is the problem that the screen is blank after resume from hibernation. But a suspend/resume cycle brings it back, I can live with that. Patch is attached for your convenience, it should appear in the stable kernels soon. Cheers, Sven
>From 820608548737e315c6f93e3099b4e65bde062334 Mon Sep 17 00:00:00 2001 From: Alex Deucher <alexander.deuc...@amd.com> Date: Fri, 15 Sep 2017 11:55:27 -0400 Subject: [PATCH] drm/radeon: disable hard reset in hibernate for APUs Fixes a hibernation regression on APUs. Bug: https://bugzilla.kernel.org/show_bug.cgi?id=191571 Fixes: 274ad65c9d02bdc (drm/radeon: hard reset r600 and newer GPU when hibernating.) Signed-off-by: Alex Deucher <alexander.deuc...@amd.com> Cc: sta...@vger.kernel.org --- drivers/gpu/drm/radeon/radeon_device.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index 997131d58c7f..ffc10cadcf34 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c @@ -1663,7 +1663,7 @@ int radeon_suspend_kms(struct drm_device *dev, bool suspend, radeon_agp_suspend(rdev); pci_save_state(dev->pdev); - if (freeze && rdev->family >= CHIP_CEDAR) { + if (freeze && rdev->family >= CHIP_CEDAR && !(rdev->flags & RADEON_IS_IGP)) { rdev->asic->asic_reset(rdev, true); pci_restore_state(dev->pdev); } else if (suspend) { -- 2.14.2