diff options
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c index 61534a8a33d7..abce1ecfd4d4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c @@ -124,6 +124,7 @@ nvkm_fifo_init(struct nvkm_engine *engine) { struct nvkm_fifo *fifo = nvkm_fifo(engine); struct nvkm_runq *runq; + struct nvkm_runl *runl; u32 mask = 0; if (fifo->func->init_pbdmas) { @@ -136,7 +137,13 @@ nvkm_fifo_init(struct nvkm_engine *engine) runq->func->init(runq); } - fifo->func->init(fifo); + nvkm_runl_foreach(runl, fifo) { + if (runl->func->init) + runl->func->init(runl); + } + + if (fifo->func->init) + fifo->func->init(fifo); nvkm_inth_allow(&fifo->engine.subdev.inth); return 0; @@ -243,7 +250,7 @@ nvkm_fifo_oneinit(struct nvkm_engine *engine) return ret; nvkm_runl_foreach(runl, fifo) { - RUNL_DEBUG(runl, ""); + RUNL_DEBUG(runl, "chan:%06x", runl->chan); nvkm_runl_foreach_engn(engn, runl) { ENGN_DEBUG(engn, ""); } @@ -259,6 +266,14 @@ nvkm_fifo_oneinit(struct nvkm_engine *engine) } } + /* Initialise non-stall intr handling. */ + if (fifo->func->nonstall_ctor) { + ret = fifo->func->nonstall_ctor(fifo); + if (ret) { + nvkm_error(subdev, "nonstall %d\n", ret); + } + } + /* Allocate USERD + BAR1 polling area. */ if (fifo->func->chan.func->userd->bar == 1) { struct nvkm_vmm *bar1 = nvkm_bar_bar1_vmm(device); |