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 <[email protected]> Fixes: 53dac0623853 ("drm/nouveau/gsp: add support for 570.144") Cc: <[email protected]> # 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
