[Public] > -----Original Message----- > From: amd-gfx <[email protected]> On Behalf Of Mario > Limonciello (AMD) > Sent: Wednesday, September 24, 2025 4:52 PM > To: Deucher, Alexander <[email protected]>; Rafael J . Wysocki > <[email protected]> > Cc: Zhang, GuoQing (Sam) <[email protected]>; open list:RADEON and > AMDGPU DRM DRIVERS <[email protected]>; open > list:HIBERNATION (aka Software Suspend, aka swsusp) <linux- > [email protected]>; Mario Limonciello <[email protected]>; Ionut Nechita > <[email protected]> > Subject: [PATCH 3/3] drm/amd: Fix hybrid sleep > > [Why] > commit 530694f54dd5e ("drm/amdgpu: do not resume device in thaw for normal > hibernation") optimized the flow for systems that are going into S4 where the > power > would be turned off. Basically the thaw() callback wouldn't resume the > device if the > hibernation image was successfully created since the system would be powered > off. > > This however isn't the correct flow for a system entering into > s0i3 after the hibernation image is created. Some of the amdgpu callbacks > have > different behavior depending upon the intended state of the suspend. > > [How] > Use pm_hibernation_mode_is_suspend() as an input to decide whether to run > resume during thaw() callback. > > Reported-by: Ionut Nechita <[email protected]> > Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4573 > Tested-by: Ionut Nechita <[email protected]> > Fixes: 530694f54dd5e ("drm/amdgpu: do not resume device in thaw for normal > hibernation") > Signed-off-by: Mario Limonciello (AMD) <[email protected]>
Series is: Acked-by: Alex Deucher <[email protected]> Feel free to take it through the Linux pm tree. Alex > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > index 395c6be901ce..dcea66aadfa3 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c > @@ -2665,7 +2665,7 @@ static int amdgpu_pmops_thaw(struct device *dev) > struct drm_device *drm_dev = dev_get_drvdata(dev); > > /* do not resume device if it's normal hibernation */ > - if (!pm_hibernate_is_recovering()) > + if (!pm_hibernate_is_recovering() && > +!pm_hibernation_mode_is_suspend()) > return 0; > > return amdgpu_device_resume(drm_dev, true); > -- > 2.51.0
