提交 ec5c6bda 编写于 作者: B Ben Skeggs

drm/nouveau/fifo/gk104-: better detection of chid when parsing engine status

The previous commit simply changes the interface, but should result in
the same behaviour as previously.  This commit has been split out from
it as it can result in a different channel being selected.
Signed-off-by: NBen Skeggs <bskeggs@redhat.com>
上级 b88917fe
...@@ -48,6 +48,7 @@ static void ...@@ -48,6 +48,7 @@ static void
gk104_fifo_engine_status(struct gk104_fifo *fifo, int engn, gk104_fifo_engine_status(struct gk104_fifo *fifo, int engn,
struct gk104_fifo_engine_status *status) struct gk104_fifo_engine_status *status)
{ {
struct nvkm_engine *engine = fifo->engine[engn].engine;
struct nvkm_subdev *subdev = &fifo->base.engine.subdev; struct nvkm_subdev *subdev = &fifo->base.engine.subdev;
struct nvkm_device *device = subdev->device; struct nvkm_device *device = subdev->device;
u32 stat = nvkm_rd32(device, 0x002640 + (engn * 0x08)); u32 stat = nvkm_rd32(device, 0x002640 + (engn * 0x08));
...@@ -61,7 +62,24 @@ gk104_fifo_engine_status(struct gk104_fifo *fifo, int engn, ...@@ -61,7 +62,24 @@ gk104_fifo_engine_status(struct gk104_fifo *fifo, int engn,
status->load = !!(stat & 0x00002000); status->load = !!(stat & 0x00002000);
status->prev.tsg = !!(stat & 0x00001000); status->prev.tsg = !!(stat & 0x00001000);
status->prev.id = (stat & 0x00000fff); status->prev.id = (stat & 0x00000fff);
status->chan = status->load ? &status->next : &status->prev; status->chan = NULL;
if (status->busy && status->chsw) {
if (status->load && status->save) {
if (engine && nvkm_engine_chsw_load(engine))
status->chan = &status->next;
else
status->chan = &status->prev;
} else
if (status->load) {
status->chan = &status->next;
} else {
status->chan = &status->prev;
}
} else
if (status->load) {
status->chan = &status->prev;
}
nvkm_debug(subdev, "engine %02d: busy %d faulted %d chsw %d " nvkm_debug(subdev, "engine %02d: busy %d faulted %d chsw %d "
"save %d load %d %sid %d%s-> %sid %d%s\n", "save %d load %d %sid %d%s-> %sid %d%s\n",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册