Lines Matching refs:fifo

36 gf100_fifo_uevent_init(struct nvkm_fifo *fifo)  in gf100_fifo_uevent_init()  argument
38 struct nvkm_device *device = fifo->engine.subdev.device; in gf100_fifo_uevent_init()
43 gf100_fifo_uevent_fini(struct nvkm_fifo *fifo) in gf100_fifo_uevent_fini() argument
45 struct nvkm_device *device = fifo->engine.subdev.device; in gf100_fifo_uevent_fini()
50 gf100_fifo_runlist_update(struct gf100_fifo *fifo) in gf100_fifo_runlist_update() argument
53 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gf100_fifo_runlist_update()
59 cur = fifo->runlist.mem[fifo->runlist.active]; in gf100_fifo_runlist_update()
60 fifo->runlist.active = !fifo->runlist.active; in gf100_fifo_runlist_update()
63 list_for_each_entry(chan, &fifo->chan, head) { in gf100_fifo_runlist_update()
73 if (wait_event_timeout(fifo->runlist.wait, in gf100_fifo_runlist_update()
81 gf100_fifo_engidx(struct gf100_fifo *fifo, u32 engn) in gf100_fifo_engidx() argument
98 gf100_fifo_engine(struct gf100_fifo *fifo, u32 engn) in gf100_fifo_engine() argument
100 struct nvkm_device *device = fifo->base.engine.subdev.device; in gf100_fifo_engine()
119 struct gf100_fifo *fifo = container_of(work, typeof(*fifo), fault); in gf100_fifo_recover_work() local
120 struct nvkm_device *device = fifo->base.engine.subdev.device; in gf100_fifo_recover_work()
126 spin_lock_irqsave(&fifo->base.lock, flags); in gf100_fifo_recover_work()
127 mask = fifo->mask; in gf100_fifo_recover_work()
128 fifo->mask = 0ULL; in gf100_fifo_recover_work()
129 spin_unlock_irqrestore(&fifo->base.lock, flags); in gf100_fifo_recover_work()
132 engm |= 1 << gf100_fifo_engidx(fifo, engn); in gf100_fifo_recover_work()
142 gf100_fifo_runlist_update(fifo); in gf100_fifo_recover_work()
148 gf100_fifo_recover(struct gf100_fifo *fifo, struct nvkm_engine *engine, in gf100_fifo_recover() argument
151 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gf100_fifo_recover()
157 assert_spin_locked(&fifo->base.lock); in gf100_fifo_recover()
163 fifo->mask |= 1ULL << engine->subdev.index; in gf100_fifo_recover()
164 schedule_work(&fifo->fault); in gf100_fifo_recover()
174 gf100_fifo_intr_sched_ctxsw(struct gf100_fifo *fifo) in gf100_fifo_intr_sched_ctxsw() argument
176 struct nvkm_device *device = fifo->base.engine.subdev.device; in gf100_fifo_intr_sched_ctxsw()
182 spin_lock_irqsave(&fifo->base.lock, flags); in gf100_fifo_intr_sched_ctxsw()
193 list_for_each_entry(chan, &fifo->chan, head) { in gf100_fifo_intr_sched_ctxsw()
195 engine = gf100_fifo_engine(fifo, engn); in gf100_fifo_intr_sched_ctxsw()
198 gf100_fifo_recover(fifo, engine, chan); in gf100_fifo_intr_sched_ctxsw()
204 spin_unlock_irqrestore(&fifo->base.lock, flags); in gf100_fifo_intr_sched_ctxsw()
208 gf100_fifo_intr_sched(struct gf100_fifo *fifo) in gf100_fifo_intr_sched() argument
210 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gf100_fifo_intr_sched()
222 gf100_fifo_intr_sched_ctxsw(fifo); in gf100_fifo_intr_sched()
289 gf100_fifo_intr_fault(struct gf100_fifo *fifo, int unit) in gf100_fifo_intr_fault() argument
291 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gf100_fifo_intr_fault()
334 chan = nvkm_fifo_chan_inst(&fifo->base, (u64)inst << 12, &flags); in gf100_fifo_intr_fault()
346 gf100_fifo_recover(fifo, engine, (void *)chan); in gf100_fifo_intr_fault()
347 nvkm_fifo_chan_put(&fifo->base, flags, &chan); in gf100_fifo_intr_fault()
359 gf100_fifo_intr_pbdma(struct gf100_fifo *fifo, int unit) in gf100_fifo_intr_pbdma() argument
361 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gf100_fifo_intr_pbdma()
383 chan = nvkm_fifo_chan_chid(&fifo->base, chid, &flags); in gf100_fifo_intr_pbdma()
389 nvkm_fifo_chan_put(&fifo->base, flags, &chan); in gf100_fifo_intr_pbdma()
397 gf100_fifo_intr_runlist(struct gf100_fifo *fifo) in gf100_fifo_intr_runlist() argument
399 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gf100_fifo_intr_runlist()
404 wake_up(&fifo->runlist.wait); in gf100_fifo_intr_runlist()
416 gf100_fifo_intr_engine_unit(struct gf100_fifo *fifo, int engn) in gf100_fifo_intr_engine_unit() argument
418 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gf100_fifo_intr_engine_unit()
429 nvkm_fifo_uevent(&fifo->base); in gf100_fifo_intr_engine_unit()
441 gf100_fifo_intr_engine(struct gf100_fifo *fifo) in gf100_fifo_intr_engine() argument
443 struct nvkm_device *device = fifo->base.engine.subdev.device; in gf100_fifo_intr_engine()
447 gf100_fifo_intr_engine_unit(fifo, unit); in gf100_fifo_intr_engine()
455 struct gf100_fifo *fifo = gf100_fifo(base); in gf100_fifo_intr() local
456 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gf100_fifo_intr()
469 gf100_fifo_intr_sched(fifo); in gf100_fifo_intr()
492 gf100_fifo_intr_fault(fifo, unit); in gf100_fifo_intr()
503 gf100_fifo_intr_pbdma(fifo, unit); in gf100_fifo_intr()
511 gf100_fifo_intr_runlist(fifo); in gf100_fifo_intr()
516 gf100_fifo_intr_engine(fifo); in gf100_fifo_intr()
530 struct gf100_fifo *fifo = gf100_fifo(base); in gf100_fifo_oneinit() local
531 struct nvkm_device *device = fifo->base.engine.subdev.device; in gf100_fifo_oneinit()
535 false, &fifo->runlist.mem[0]); in gf100_fifo_oneinit()
540 false, &fifo->runlist.mem[1]); in gf100_fifo_oneinit()
544 init_waitqueue_head(&fifo->runlist.wait); in gf100_fifo_oneinit()
547 0x1000, false, &fifo->user.mem); in gf100_fifo_oneinit()
551 ret = nvkm_bar_umap(device->bar, 128 * 0x1000, 12, &fifo->user.bar); in gf100_fifo_oneinit()
555 nvkm_memory_map(fifo->user.mem, &fifo->user.bar, 0); in gf100_fifo_oneinit()
562 struct gf100_fifo *fifo = gf100_fifo(base); in gf100_fifo_fini() local
563 flush_work(&fifo->fault); in gf100_fifo_fini()
569 struct gf100_fifo *fifo = gf100_fifo(base); in gf100_fifo_init() local
570 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gf100_fifo_init()
577 fifo->spoon_nr = hweight32(nvkm_rd32(device, 0x002204)); in gf100_fifo_init()
578 nvkm_debug(subdev, "%d PBDMA unit(s)\n", fifo->spoon_nr); in gf100_fifo_init()
581 if (fifo->spoon_nr >= 3) { in gf100_fifo_init()
591 for (i = 0; i < fifo->spoon_nr; i++) { in gf100_fifo_init()
598 nvkm_wr32(device, 0x002254, 0x10000000 | fifo->user.bar.offset >> 12); in gf100_fifo_init()
608 struct gf100_fifo *fifo = gf100_fifo(base); in gf100_fifo_dtor() local
609 nvkm_vm_put(&fifo->user.bar); in gf100_fifo_dtor()
610 nvkm_memory_del(&fifo->user.mem); in gf100_fifo_dtor()
611 nvkm_memory_del(&fifo->runlist.mem[0]); in gf100_fifo_dtor()
612 nvkm_memory_del(&fifo->runlist.mem[1]); in gf100_fifo_dtor()
613 return fifo; in gf100_fifo_dtor()
634 struct gf100_fifo *fifo; in gf100_fifo_new() local
636 if (!(fifo = kzalloc(sizeof(*fifo), GFP_KERNEL))) in gf100_fifo_new()
638 INIT_LIST_HEAD(&fifo->chan); in gf100_fifo_new()
639 INIT_WORK(&fifo->fault, gf100_fifo_recover_work); in gf100_fifo_new()
640 *pfifo = &fifo->base; in gf100_fifo_new()
642 return nvkm_fifo_ctor(&gf100_fifo, device, index, 128, &fifo->base); in gf100_fifo_new()