[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#836411: linux-image-4.7.0-1-amd64: hibernation fails, regression from 4.6



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.deucher@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.deucher@amd.com>
Cc: stable@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


Reply to: