nouveau/gsp: handle engines in runl without nonstall interrupts.
Subsystems (3)
Dave Airlie
maintainerPATCH 1/1 nouveau/gsp: handle engines in runl without nonstall interrupts.
From: Dave Airlie <[email protected]>
It appears on TU106 GPUs (2070), that some of the nvdec engines are in the runlist but have no valid nonstall interrupt, nouveau didn't handle that too well.
This should let nouveau/gsp work on those.
Cc [email protected] # v6.7+
--- drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga100.c | 4 ++++ drivers/gpu/drm/nouveau/nvkm/engine/fifo/r535.c | 2 +- drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c | 8 ++------ 3 files changed, 7 insertions(+), 7 deletions(-)
drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga100.c +4 -0
@@ -550,6 +550,10 @@ ga100_fifo_nonstall_ctor(struct nvkm_fifo *fifo)struct nvkm_engn *engn =list_first_entry (&runl->engns,typeof (*engn), head); runl->nonstall.vector = engn->func->nonstall (engn); + +/* if no nonstall vector just keep going */ +if (runl->nonstall.vector ==-1 ) +continue ;if (runl->nonstall.vector <0 ) {RUNL_ERROR (runl,"nonstall %d" , runl->nonstall.vector);return runl->nonstall.vector;
drivers/gpu/drm/nouveau/nvkm/engine/fifo/r535.c +1 -1
@@ -351,7 +351,7 @@ r535_engn_nonstall(struct nvkm_engn *engn)int ret; ret =nvkm_gsp_intr_nonstall (subdev->device->gsp, subdev->type, subdev->inst); -WARN_ON (ret <0 ); +WARN_ON (ret == -ENOENT );return ret; }
drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.c +2 -6
@@ -25,12 +25,8 @@ int nvkm_gsp_intr_nonstall(struct nvkm_gsp *gsp, enum nvkm_subdev_type type, int inst) { for (int i = 0; i < gsp->intr_nr; i++) { -if (gsp->intr[i].type == type && gsp->intr[i].inst == inst) { -if (gsp->intr[i].nonstall != ~0 ) -return gsp->intr[i].nonstall; - -return -EINVAL ; - } +if (gsp->intr[i].type == type && gsp->intr[i].inst == inst) +return gsp->intr[i].nonstall; }return -ENOENT ;
Signature · 1 line
2.43.0