Skip to content

Commit 8302d0a

Browse files
committed
nouveau/gsp: fix suspend/resume regression on r570 firmware
The r570 firmware with certain GPUs (at least RTX6000) needs this flag to reflect the suspend vs runtime PM state of the driver. This uses that info to set the correct flags to the firmware. This fixes a regression on RTX6000 and other GPUs since r570 firmware was enabled. Fixes: 53dac06 ("drm/nouveau/gsp: add support for 570.144") Cc: <[email protected]> Reviewed-by: Lyude Paul <[email protected]> Tested-by: Lyude Paul <[email protected]> Signed-off-by: Dave Airlie <[email protected]> Link: https://patch.msgid.link/[email protected]
1 parent 8f8a4dc commit 8302d0a

4 files changed

Lines changed: 7 additions & 7 deletions

File tree

drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/fbsr.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ r535_fbsr_resume(struct nvkm_gsp *gsp)
208208
}
209209

210210
static int
211-
r535_fbsr_suspend(struct nvkm_gsp *gsp)
211+
r535_fbsr_suspend(struct nvkm_gsp *gsp, bool runtime)
212212
{
213213
struct nvkm_subdev *subdev = &gsp->subdev;
214214
struct nvkm_device *device = subdev->device;

drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/gsp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1748,7 +1748,7 @@ r535_gsp_fini(struct nvkm_gsp *gsp, enum nvkm_suspend_state suspend)
17481748
sr->sysmemAddrOfSuspendResumeData = gsp->sr.radix3.lvl0.addr;
17491749
sr->sizeOfSuspendResumeData = len;
17501750

1751-
ret = rm->api->fbsr->suspend(gsp);
1751+
ret = rm->api->fbsr->suspend(gsp, suspend == NVKM_RUNTIME_SUSPEND);
17521752
if (ret) {
17531753
nvkm_gsp_mem_dtor(&gsp->sr.meta);
17541754
nvkm_gsp_radix3_dtor(gsp, &gsp->sr.radix3);

drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r570/fbsr.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ r570_fbsr_resume(struct nvkm_gsp *gsp)
6262
}
6363

6464
static int
65-
r570_fbsr_init(struct nvkm_gsp *gsp, struct sg_table *sgt, u64 size)
65+
r570_fbsr_init(struct nvkm_gsp *gsp, struct sg_table *sgt, u64 size, bool runtime)
6666
{
6767
NV2080_CTRL_INTERNAL_FBSR_INIT_PARAMS *ctrl;
6868
struct nvkm_gsp_object memlist;
@@ -81,7 +81,7 @@ r570_fbsr_init(struct nvkm_gsp *gsp, struct sg_table *sgt, u64 size)
8181
ctrl->hClient = gsp->internal.client.object.handle;
8282
ctrl->hSysMem = memlist.handle;
8383
ctrl->sysmemAddrOfSuspendResumeData = gsp->sr.meta.addr;
84-
ctrl->bEnteringGcoffState = 1;
84+
ctrl->bEnteringGcoffState = runtime ? 1 : 0;
8585

8686
ret = nvkm_gsp_rm_ctrl_wr(&gsp->internal.device.subdevice, ctrl);
8787
if (ret)
@@ -92,7 +92,7 @@ r570_fbsr_init(struct nvkm_gsp *gsp, struct sg_table *sgt, u64 size)
9292
}
9393

9494
static int
95-
r570_fbsr_suspend(struct nvkm_gsp *gsp)
95+
r570_fbsr_suspend(struct nvkm_gsp *gsp, bool runtime)
9696
{
9797
struct nvkm_subdev *subdev = &gsp->subdev;
9898
struct nvkm_device *device = subdev->device;
@@ -133,7 +133,7 @@ r570_fbsr_suspend(struct nvkm_gsp *gsp)
133133
return ret;
134134

135135
/* Initialise FBSR on RM. */
136-
ret = r570_fbsr_init(gsp, &gsp->sr.fbsr, size);
136+
ret = r570_fbsr_init(gsp, &gsp->sr.fbsr, size, runtime);
137137
if (ret) {
138138
nvkm_gsp_sg_free(device, &gsp->sr.fbsr);
139139
return ret;

drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/rm.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ struct nvkm_rm_api {
7878
} *device;
7979

8080
const struct nvkm_rm_api_fbsr {
81-
int (*suspend)(struct nvkm_gsp *);
81+
int (*suspend)(struct nvkm_gsp *, bool runtime);
8282
void (*resume)(struct nvkm_gsp *);
8383
} *fbsr;
8484

0 commit comments

Comments
 (0)