diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2022-06-01 13:48:02 +0300 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2022-11-09 03:45:10 +0300 |
commit | 1ed02c3f2db00f3c29e88a3d880d64a7e1b7a047 (patch) | |
tree | bdd60fc2b369fbe801cbdec849ad93801f465cd6 /drivers/gpu/drm/nouveau/nvkm | |
parent | d2922879116ca753e454fecde531d509eb0af69f (diff) | |
download | linux-1ed02c3f2db00f3c29e88a3d880d64a7e1b7a047.tar.xz |
drm/nouveau/engine: add HAL for engine-specific rc reset procedure
Will be used to improve gr reset on GF100 and newer.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Reviewed-by: Lyude Paul <lyude@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm')
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/core/engine.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.c | 4 |
2 files changed, 12 insertions, 2 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/core/engine.c b/drivers/gpu/drm/nouveau/nvkm/core/engine.c index 964615a60997..36a31e9eea22 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/engine.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/engine.c @@ -35,6 +35,16 @@ nvkm_engine_chsw_load(struct nvkm_engine *engine) return false; } +int +nvkm_engine_reset(struct nvkm_engine *engine) +{ + if (engine->func->reset) + return engine->func->reset(engine); + + nvkm_subdev_fini(&engine->subdev, false); + return nvkm_subdev_init(&engine->subdev); +} + void nvkm_engine_unref(struct nvkm_engine **pengine) { diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.c index fe51c075d6c4..b5836cbc29aa 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.c @@ -113,8 +113,8 @@ nvkm_runl_rc(struct nvkm_runl *runl) } ENGN_DEBUG(engn, "resetting..."); - nvkm_subdev_fini(&engn->engine->subdev, false); - WARN_ON(nvkm_subdev_init(&engn->engine->subdev)); + /*TODO: can we do something less of a potential catastrophe on failure? */ + WARN_ON(nvkm_engine_reset(engn->engine)); } /* Submit runlist update, and clear any remaining exception state. */ |