Re: [PATCH v4 2/3] drm/nouveau/gsp/r570: Set GcOff = 1 in fbsr
[email protected] Mon, 27 Jul 2026 13:54:43 -0400
| Newsgroups | org.freedesktop.lists.nouveau,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
aaaaand I completely forgot to change this from a 1 to 0 in the patch title ._. Reviewers - I will make sure this gets fixed before pushing it upstream On Mon, 2026-07-27 at 13:47 -0400, Lyude Paul wrote: > Previously, it looked as if we were able to fix suspend/resume on > some > desktops by setting Gcoff based on whether or not we were entering > runtime > PM. This was a mistake though - the only time suspend/resume would > end up > actually working was if Gcoff =3D 0. >=20 > It seems like it's likely the main reason for this is the FBSR GcOff > argument actually controls GSP's behavior with regards to which > buffers it > decides to save across suspend/resume. When GcOff =3D 1, RM reserved > regions > are saved unless they are marked as LOST_ON_SUSPEND, and RM channel- > context > and kernel-client buffers are also saved -including- when they are > LOST_ON_SUSPEND. This means with GcOff =3D 1, we end up having GSP save > and > restore buffers that actually need to be reinitialized on resume - > causing > the failures we're setting. >=20 > In the long term, we do want to have GcOff =3D 1 as there are still a > handful > of edge cases around broken runtime PM that I've seen on laptops - > and I > have a strong guess that actually properly implementing the required > bits > for enabling GcOff will probably address a number of those issues. > For now > though, disabling GcOff results in runtime PM being dramatically more > stable then it was before. >=20 > Thanks to John Hubbard from Nvidia for providing some background on > what > these options do in the GSP firmware do! >=20 > Signed-off-by: Lyude Paul <[email protected]> > Fixes: 53dac0623853 ("drm/nouveau/gsp: add support for 570.144") > Cc: <[email protected]> # v6.16+ > --- > =C2=A0drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fbsr.c | 2 +- > =C2=A01 file changed, 1 insertion(+), 1 deletion(-) >=20 > 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) > =C2=A0=09ctrl->hClient =3D gsp->internal.client.object.handle; > =C2=A0=09ctrl->hSysMem =3D memlist.handle; > =C2=A0=09ctrl->sysmemAddrOfSuspendResumeData =3D gsp->sr.meta.addr; > -=09ctrl->bEnteringGcoffState =3D 1; > +=09ctrl->bEnteringGcoffState =3D 0; > =C2=A0 > =C2=A0=09ret =3D nvkm_gsp_rm_ctrl_wr(&gsp->internal.device.subdevice, > ctrl); > =C2=A0=09if (ret)