* [PATCH v2 1/4] Revert "nouveau/gsp: fix suspend/resume regression on r570 firmware"
2026-06-29 22:42 [PATCH v2 0/4] drm/nouveau/gsp/r570: Fix runtime PM Lyude Paul
@ 2026-06-29 22:42 ` Lyude Paul
2026-06-30 11:53 ` Andy Shevchenko
2026-06-29 22:42 ` [PATCH v2 2/4] drm/nouveau/gsp/r570: Never enter Gcoff state Lyude Paul
` (3 subsequent siblings)
4 siblings, 1 reply; 8+ messages in thread
From: Lyude Paul @ 2026-06-29 22:42 UTC (permalink / raw)
To: nouveau, dri-devel, linux-kernel
Cc: stable, Timur Tabi, Dave Airlie, Andy Shevchenko,
Maarten Lankhorst, Ben Skeggs, Kees Cook, Simona Vetter,
David Airlie, Thomas Zimmermann, Maxime Ripard, Mel Henning,
Danilo Krummrich, Lyude Paul
This reverts commit 8302d0afeaec0bc57d951dd085e0cffe997d4d18.
It turns out this looked like the right fix on some systems, but it's not -
as this causes runtime PM to actually fail on many a laptop.
[I have set the fixes to an older commit then the one that is reverted
here, because when applied with the other patches in this series, this
appears to /fully/ fix runtime PM in addition to the regression]
Fixes: 53dac0623853 ("drm/nouveau/gsp: add support for 570.144")
Cc: <stable@vger.kernel.org> # v6.16+
Signed-off-by: Lyude Paul <lyude@redhat.com>
---
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fbsr.c | 2 +-
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c | 2 +-
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fbsr.c | 8 ++++----
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h | 2 +-
4 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fbsr.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fbsr.c
index 700cea5def357..035b575722db7 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fbsr.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fbsr.c
@@ -208,7 +208,7 @@ r535_fbsr_resume(struct nvkm_gsp *gsp)
}
static int
-r535_fbsr_suspend(struct nvkm_gsp *gsp, bool runtime)
+r535_fbsr_suspend(struct nvkm_gsp *gsp)
{
struct nvkm_subdev *subdev = &gsp->subdev;
struct nvkm_device *device = subdev->device;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
index f544afa12b6bb..4a3b771ded255 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c
@@ -1749,7 +1749,7 @@ r535_gsp_fini(struct nvkm_gsp *gsp, enum nvkm_suspend_state suspend)
sr->sysmemAddrOfSuspendResumeData = gsp->sr.radix3.lvl0.addr;
sr->sizeOfSuspendResumeData = len;
- ret = rm->api->fbsr->suspend(gsp, suspend == NVKM_RUNTIME_SUSPEND);
+ ret = rm->api->fbsr->suspend(gsp);
if (ret) {
nvkm_gsp_mem_dtor(&gsp->sr.meta);
nvkm_gsp_radix3_dtor(gsp, &gsp->sr.radix3);
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fbsr.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fbsr.c
index 8ef8b4f655883..2945d5b4e5707 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fbsr.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fbsr.c
@@ -62,7 +62,7 @@ r570_fbsr_resume(struct nvkm_gsp *gsp)
}
static int
-r570_fbsr_init(struct nvkm_gsp *gsp, struct sg_table *sgt, u64 size, bool runtime)
+r570_fbsr_init(struct nvkm_gsp *gsp, struct sg_table *sgt, u64 size)
{
NV2080_CTRL_INTERNAL_FBSR_INIT_PARAMS *ctrl;
struct nvkm_gsp_object memlist;
@@ -81,7 +81,7 @@ r570_fbsr_init(struct nvkm_gsp *gsp, struct sg_table *sgt, u64 size, bool runtim
ctrl->hClient = gsp->internal.client.object.handle;
ctrl->hSysMem = memlist.handle;
ctrl->sysmemAddrOfSuspendResumeData = gsp->sr.meta.addr;
- ctrl->bEnteringGcoffState = runtime ? 1 : 0;
+ ctrl->bEnteringGcoffState = 1;
ret = nvkm_gsp_rm_ctrl_wr(&gsp->internal.device.subdevice, ctrl);
if (ret)
@@ -92,7 +92,7 @@ r570_fbsr_init(struct nvkm_gsp *gsp, struct sg_table *sgt, u64 size, bool runtim
}
static int
-r570_fbsr_suspend(struct nvkm_gsp *gsp, bool runtime)
+r570_fbsr_suspend(struct nvkm_gsp *gsp)
{
struct nvkm_subdev *subdev = &gsp->subdev;
struct nvkm_device *device = subdev->device;
@@ -133,7 +133,7 @@ r570_fbsr_suspend(struct nvkm_gsp *gsp, bool runtime)
return ret;
/* Initialise FBSR on RM. */
- ret = r570_fbsr_init(gsp, &gsp->sr.fbsr, size, runtime);
+ ret = r570_fbsr_init(gsp, &gsp->sr.fbsr, size);
if (ret) {
nvkm_gsp_sg_free(device, &gsp->sr.fbsr);
return ret;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h
index a9af94adf9efc..0fb0e67406c67 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h
@@ -78,7 +78,7 @@ struct nvkm_rm_api {
} *device;
const struct nvkm_rm_api_fbsr {
- int (*suspend)(struct nvkm_gsp *, bool runtime);
+ int (*suspend)(struct nvkm_gsp *);
void (*resume)(struct nvkm_gsp *);
} *fbsr;
--
2.54.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH v2 1/4] Revert "nouveau/gsp: fix suspend/resume regression on r570 firmware"
2026-06-29 22:42 ` [PATCH v2 1/4] Revert "nouveau/gsp: fix suspend/resume regression on r570 firmware" Lyude Paul
@ 2026-06-30 11:53 ` Andy Shevchenko
2026-06-30 16:05 ` Danilo Krummrich
0 siblings, 1 reply; 8+ messages in thread
From: Andy Shevchenko @ 2026-06-30 11:53 UTC (permalink / raw)
To: Lyude Paul
Cc: nouveau, dri-devel, linux-kernel, stable, Timur Tabi, Dave Airlie,
Maarten Lankhorst, Ben Skeggs, Kees Cook, Simona Vetter,
David Airlie, Thomas Zimmermann, Maxime Ripard, Mel Henning,
Danilo Krummrich
On Mon, Jun 29, 2026 at 06:42:33PM -0400, Lyude Paul wrote:
> This reverts commit 8302d0afeaec0bc57d951dd085e0cffe997d4d18.
>
> It turns out this looked like the right fix on some systems, but it's not -
> as this causes runtime PM to actually fail on many a laptop.
>
> [I have set the fixes to an older commit then the one that is reverted
> here, because when applied with the other patches in this series, this
> appears to /fully/ fix runtime PM in addition to the regression]
No need to have this in the commit message, move it to the comment block...
> Fixes: 53dac0623853 ("drm/nouveau/gsp: add support for 570.144")
I'm not sure, actually, that this is a correct approach. You can't revert
something that never appeared (in time range between 53dac0623853 and
8302d0afeaec). Have you consulted with the stable kernel process documentation
and/or respective maintainers?
> Cc: <stable@vger.kernel.org> # v6.16+
> Signed-off-by: Lyude Paul <lyude@redhat.com>
> ---
...somewhere here.
> drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fbsr.c | 2 +-
> drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c | 2 +-
> drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fbsr.c | 8 ++++----
> drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h | 2 +-
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: [PATCH v2 1/4] Revert "nouveau/gsp: fix suspend/resume regression on r570 firmware"
2026-06-30 11:53 ` Andy Shevchenko
@ 2026-06-30 16:05 ` Danilo Krummrich
0 siblings, 0 replies; 8+ messages in thread
From: Danilo Krummrich @ 2026-06-30 16:05 UTC (permalink / raw)
To: Andy Shevchenko, Lyude Paul
Cc: nouveau, dri-devel, linux-kernel, stable, Timur Tabi, Dave Airlie,
Maarten Lankhorst, Ben Skeggs, Kees Cook, Simona Vetter,
David Airlie, Thomas Zimmermann, Maxime Ripard, Mel Henning
On Tue Jun 30, 2026 at 1:53 PM CEST, Andy Shevchenko wrote:
> On Mon, Jun 29, 2026 at 06:42:33PM -0400, Lyude Paul wrote:
>> This reverts commit 8302d0afeaec0bc57d951dd085e0cffe997d4d18.
>>
>> It turns out this looked like the right fix on some systems, but it's not -
>> as this causes runtime PM to actually fail on many a laptop.
>>
>> [I have set the fixes to an older commit then the one that is reverted
>> here, because when applied with the other patches in this series, this
>> appears to /fully/ fix runtime PM in addition to the regression]
>
> No need to have this in the commit message, move it to the comment block...
>
>> Fixes: 53dac0623853 ("drm/nouveau/gsp: add support for 570.144")
>
> I'm not sure, actually, that this is a correct approach. You can't revert
> something that never appeared (in time range between 53dac0623853 and
> 8302d0afeaec). Have you consulted with the stable kernel process documentation
> and/or respective maintainers?
I think it should be as simple as picking
Fixes: 8302d0afeaec ("nouveau/gsp: fix suspend/resume regression on r570 firmware")
Cc: <stable@vger.kernel.org> # v6.19+
for this commit and keep patches 2, 3 and 4 as they are.
The commit message of this revert can then explain that the commit that was
attempted to fix with this revert, i.e. commit 53dac0623853 ("drm/nouveau/gsp:
add support for 570.144") is fixed with a different, subsequent approach.
This seems correct, as reverting a bad fix does not claim to solve the original
problem.
Thanks,
Danilo
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 2/4] drm/nouveau/gsp/r570: Never enter Gcoff state
2026-06-29 22:42 [PATCH v2 0/4] drm/nouveau/gsp/r570: Fix runtime PM Lyude Paul
2026-06-29 22:42 ` [PATCH v2 1/4] Revert "nouveau/gsp: fix suspend/resume regression on r570 firmware" Lyude Paul
@ 2026-06-29 22:42 ` Lyude Paul
2026-06-29 22:42 ` [PATCH v2 3/4] drm/nouveau/gsp/r570: Set oldLevel correctly in GSP resume arguments Lyude Paul
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Lyude Paul @ 2026-06-29 22:42 UTC (permalink / raw)
To: nouveau, dri-devel, linux-kernel
Cc: stable, Timur Tabi, Dave Airlie, Andy Shevchenko,
Maarten Lankhorst, Ben Skeggs, Kees Cook, Simona Vetter,
David Airlie, Thomas Zimmermann, Maxime Ripard, Mel Henning,
Danilo Krummrich, Lyude Paul
It turns out that the only reason our previous fixes looked like they
worked for this was because we would occasionally set the Gcoff state to 0
in the normal S3 path, which fixed suspend/resume on desktops - but not on
machines using runtime suspend.
The proper fix is to just never set this flag. Our current guess for the
reasoning behind this is that Gcoff likely coincides with GC6, and not
literally power off.
Signed-off-by: Lyude Paul <lyude@redhat.com>
Fixes: 53dac0623853 ("drm/nouveau/gsp: add support for 570.144")
Cc: <stable@vger.kernel.org> # v6.16+
---
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fbsr.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fbsr.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fbsr.c
index 2945d5b4e5707..af5aa5065c3dd 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fbsr.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fbsr.c
@@ -81,7 +81,7 @@ r570_fbsr_init(struct nvkm_gsp *gsp, struct sg_table *sgt, u64 size)
ctrl->hClient = gsp->internal.client.object.handle;
ctrl->hSysMem = memlist.handle;
ctrl->sysmemAddrOfSuspendResumeData = gsp->sr.meta.addr;
- ctrl->bEnteringGcoffState = 1;
+ ctrl->bEnteringGcoffState = 0;
ret = nvkm_gsp_rm_ctrl_wr(&gsp->internal.device.subdevice, ctrl);
if (ret)
--
2.54.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v2 3/4] drm/nouveau/gsp/r570: Set oldLevel correctly in GSP resume arguments
2026-06-29 22:42 [PATCH v2 0/4] drm/nouveau/gsp/r570: Fix runtime PM Lyude Paul
2026-06-29 22:42 ` [PATCH v2 1/4] Revert "nouveau/gsp: fix suspend/resume regression on r570 firmware" Lyude Paul
2026-06-29 22:42 ` [PATCH v2 2/4] drm/nouveau/gsp/r570: Never enter Gcoff state Lyude Paul
@ 2026-06-29 22:42 ` Lyude Paul
2026-06-29 22:42 ` [PATCH v2 4/4] drm/nouveau/gsp/r570: Add missing state flags to " Lyude Paul
2026-06-30 11:50 ` [PATCH v2 0/4] drm/nouveau/gsp/r570: Fix runtime PM Andy Shevchenko
4 siblings, 0 replies; 8+ messages in thread
From: Lyude Paul @ 2026-06-29 22:42 UTC (permalink / raw)
To: nouveau, dri-devel, linux-kernel
Cc: stable, Timur Tabi, Dave Airlie, Andy Shevchenko,
Maarten Lankhorst, Ben Skeggs, Kees Cook, Simona Vetter,
David Airlie, Thomas Zimmermann, Maxime Ripard, Mel Henning,
Danilo Krummrich, Lyude Paul
The way that OpenRM handles this is a bit funky. By default, OpenRM passes
through NV2080_CTRL_GPU_SET_POWER_STATE_GPU_LEVEL_3 as the supposed power
level that the GPU is entering. This is misleading though - because as far
as I can tell, that argument is never actually provided to GSP and appears
to be used mostly for internal state tracking by the driver.
What actually happens, is that on resume - OpenRM tells GSP that it's
resuming the GPU from LEVEL_4.
This is one part of getting runtime PM to be genuinely reliable with GSP
firmware.
Signed-off-by: Lyude Paul <lyude@redhat.com>
Fixes: 53dac0623853 ("drm/nouveau/gsp: add support for 570.144")
Cc: <stable@vger.kernel.org> # v6.16+
---
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c | 2 +-
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/nvrm/gsp.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c
index 996941c668ba9..00158697bd77a 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c
@@ -197,7 +197,7 @@ r570_gsp_set_rmargs(struct nvkm_gsp *gsp, bool resume)
args->srInitArguments.flags = 0;
args->srInitArguments.bInPMTransition = 0;
} else {
- args->srInitArguments.oldLevel = NV2080_CTRL_GPU_SET_POWER_STATE_GPU_LEVEL_3;
+ args->srInitArguments.oldLevel = NV2080_CTRL_GPU_SET_POWER_STATE_GPU_LEVEL_4;
args->srInitArguments.flags = 0;
args->srInitArguments.bInPMTransition = 1;
}
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/nvrm/gsp.h b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/nvrm/gsp.h
index b6075021e74f5..1904305b69624 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/nvrm/gsp.h
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/nvrm/gsp.h
@@ -521,7 +521,7 @@ typedef struct
} profilerArgs;
} GSP_ARGUMENTS_CACHED;
-#define NV2080_CTRL_GPU_SET_POWER_STATE_GPU_LEVEL_3 (0x00000003U)
+#define NV2080_CTRL_GPU_SET_POWER_STATE_GPU_LEVEL_4 (0x00000004U)
typedef struct
{
--
2.54.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v2 4/4] drm/nouveau/gsp/r570: Add missing state flags to GSP resume arguments
2026-06-29 22:42 [PATCH v2 0/4] drm/nouveau/gsp/r570: Fix runtime PM Lyude Paul
` (2 preceding siblings ...)
2026-06-29 22:42 ` [PATCH v2 3/4] drm/nouveau/gsp/r570: Set oldLevel correctly in GSP resume arguments Lyude Paul
@ 2026-06-29 22:42 ` Lyude Paul
2026-06-30 11:50 ` [PATCH v2 0/4] drm/nouveau/gsp/r570: Fix runtime PM Andy Shevchenko
4 siblings, 0 replies; 8+ messages in thread
From: Lyude Paul @ 2026-06-29 22:42 UTC (permalink / raw)
To: nouveau, dri-devel, linux-kernel
Cc: stable, Timur Tabi, Dave Airlie, Andy Shevchenko,
Maarten Lankhorst, Ben Skeggs, Kees Cook, Simona Vetter,
David Airlie, Thomas Zimmermann, Maxime Ripard, Mel Henning,
Danilo Krummrich, Lyude Paul
When resuming the GPU, we need to let GSP know that we need it to avoid
destructive state transitions when bringing the GPU back up. Otherwise, we
will end up with a plethora of strange behavior after coming out of resume
- such as push buffers randomly timing out.
Signed-off-by: Lyude Paul <lyude@redhat.com>
Fixes: 53dac0623853 ("drm/nouveau/gsp: add support for 570.144")
Cc: <stable@vger.kernel.org> # v6.16+
---
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c | 3 ++-
.../gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/nvrm/gsp.h | 8 ++++++++
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c
index 00158697bd77a..b7f396897e56c 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/gsp.c
@@ -198,7 +198,8 @@ r570_gsp_set_rmargs(struct nvkm_gsp *gsp, bool resume)
args->srInitArguments.bInPMTransition = 0;
} else {
args->srInitArguments.oldLevel = NV2080_CTRL_GPU_SET_POWER_STATE_GPU_LEVEL_4;
- args->srInitArguments.flags = 0;
+ args->srInitArguments.flags =
+ GPU_STATE_FLAGS_PRESERVING | GPU_STATE_FLAGS_PM_TRANSITION;
args->srInitArguments.bInPMTransition = 1;
}
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/nvrm/gsp.h b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/nvrm/gsp.h
index 1904305b69624..aa6c19965e0b4 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/nvrm/gsp.h
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/nvrm/gsp.h
@@ -523,6 +523,14 @@ typedef struct
#define NV2080_CTRL_GPU_SET_POWER_STATE_GPU_LEVEL_4 (0x00000004U)
+#define GPU_STATE_FLAGS_PRESERVING BIT(0) // GPU state is preserved
+#define GPU_STATE_FLAGS_VGA_TRANSITION BIT(1) // To be used with GPU_STATE_FLAGS_PRESERVING.
+#define GPU_STATE_FLAGS_PM_TRANSITION BIT(2) // To be used with GPU_STATE_FLAGS_PRESERVING.
+#define GPU_STATE_FLAGS_PM_SUSPEND BIT(3)
+#define GPU_STATE_FLAGS_PM_HIBERNATE BIT(4)
+#define GPU_STATE_FLAGS_GC6_TRANSITION BIT(5) // To be used with GPU_STATE_FLAGS_PRESERVING.
+#define GPU_STATE_FLAGS_FAST_UNLOAD BIT(6) // Used during windows restart, skips stateDestroy steps
+
typedef struct
{
// Magic for verification by secure ucode
--
2.54.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* Re: [PATCH v2 0/4] drm/nouveau/gsp/r570: Fix runtime PM
2026-06-29 22:42 [PATCH v2 0/4] drm/nouveau/gsp/r570: Fix runtime PM Lyude Paul
` (3 preceding siblings ...)
2026-06-29 22:42 ` [PATCH v2 4/4] drm/nouveau/gsp/r570: Add missing state flags to " Lyude Paul
@ 2026-06-30 11:50 ` Andy Shevchenko
4 siblings, 0 replies; 8+ messages in thread
From: Andy Shevchenko @ 2026-06-30 11:50 UTC (permalink / raw)
To: Lyude Paul
Cc: nouveau, dri-devel, linux-kernel, Timur Tabi, Dave Airlie,
Maarten Lankhorst, Ben Skeggs, Kees Cook, Simona Vetter,
David Airlie, Thomas Zimmermann, Maxime Ripard, Mel Henning,
Danilo Krummrich
On Mon, Jun 29, 2026 at 06:42:32PM -0400, Lyude Paul wrote:
> Runtime PM has been kind of unreliable with GSP for a while. It works
> well enough to shut the GPU off and turn it back on, but more often then
> not it ends up leaving the GPU in a broken state on resume - which makes
> it impossible to really do anything else with it.
>
> Recently however, I discovered that it's been failing much harder on
> some ampere systems. This lead me down a rabbit hole that lead me to
> figure out one of our previous fixes for runtime PM wasn't correct.
> After fixing that and combining it with some fixes we had tried in the
> past without success, I finally managed to get nouveau to handle runtime
> PM with the GSP perfectly. These are those fixes.
>
> Tested on a Lenovo P16 G1 (100 runtime PM cycles!), and RTX4000.
This is v2, and no changelog. What's going on?
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 8+ messages in thread