Lines Matching refs:fifo

36 gk104_fifo_uevent_fini(struct nvkm_fifo *fifo)  in gk104_fifo_uevent_fini()  argument
38 struct nvkm_device *device = fifo->engine.subdev.device; in gk104_fifo_uevent_fini()
43 gk104_fifo_uevent_init(struct nvkm_fifo *fifo) in gk104_fifo_uevent_init() argument
45 struct nvkm_device *device = fifo->engine.subdev.device; in gk104_fifo_uevent_init()
50 gk104_fifo_runlist_update(struct gk104_fifo *fifo, u32 engine) in gk104_fifo_runlist_update() argument
52 struct gk104_fifo_engn *engn = &fifo->engine[engine]; in gk104_fifo_runlist_update()
54 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gk104_fifo_runlist_update()
82 gk104_fifo_engine(struct gk104_fifo *fifo, u32 engn) in gk104_fifo_engine() argument
84 struct nvkm_device *device = fifo->base.engine.subdev.device; in gk104_fifo_engine()
94 struct gk104_fifo *fifo = container_of(work, typeof(*fifo), fault); in gk104_fifo_recover_work() local
95 struct nvkm_device *device = fifo->base.engine.subdev.device; in gk104_fifo_recover_work()
101 spin_lock_irqsave(&fifo->base.lock, flags); in gk104_fifo_recover_work()
102 mask = fifo->mask; in gk104_fifo_recover_work()
103 fifo->mask = 0ULL; in gk104_fifo_recover_work()
104 spin_unlock_irqrestore(&fifo->base.lock, flags); in gk104_fifo_recover_work()
115 gk104_fifo_runlist_update(fifo, gk104_fifo_subdev_engine(engn)); in gk104_fifo_recover_work()
123 gk104_fifo_recover(struct gk104_fifo *fifo, struct nvkm_engine *engine, in gk104_fifo_recover() argument
126 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gk104_fifo_recover()
132 assert_spin_locked(&fifo->base.lock); in gk104_fifo_recover()
138 fifo->mask |= 1ULL << engine->subdev.index; in gk104_fifo_recover()
139 schedule_work(&fifo->fault); in gk104_fifo_recover()
154 gk104_fifo_intr_bind(struct gk104_fifo *fifo) in gk104_fifo_intr_bind() argument
156 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gk104_fifo_intr_bind()
173 gk104_fifo_intr_sched_ctxsw(struct gk104_fifo *fifo) in gk104_fifo_intr_sched_ctxsw() argument
175 struct nvkm_device *device = fifo->base.engine.subdev.device; in gk104_fifo_intr_sched_ctxsw()
181 spin_lock_irqsave(&fifo->base.lock, flags); in gk104_fifo_intr_sched_ctxsw()
182 for (engn = 0; engn < ARRAY_SIZE(fifo->engine); engn++) { in gk104_fifo_intr_sched_ctxsw()
194 list_for_each_entry(chan, &fifo->engine[engn].chan, head) { in gk104_fifo_intr_sched_ctxsw()
196 engine = gk104_fifo_engine(fifo, engn); in gk104_fifo_intr_sched_ctxsw()
199 gk104_fifo_recover(fifo, engine, chan); in gk104_fifo_intr_sched_ctxsw()
205 spin_unlock_irqrestore(&fifo->base.lock, flags); in gk104_fifo_intr_sched_ctxsw()
209 gk104_fifo_intr_sched(struct gk104_fifo *fifo) in gk104_fifo_intr_sched() argument
211 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gk104_fifo_intr_sched()
222 gk104_fifo_intr_sched_ctxsw(fifo); in gk104_fifo_intr_sched()
230 gk104_fifo_intr_chsw(struct gk104_fifo *fifo) in gk104_fifo_intr_chsw() argument
232 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gk104_fifo_intr_chsw()
240 gk104_fifo_intr_dropped_fault(struct gk104_fifo *fifo) in gk104_fifo_intr_dropped_fault() argument
242 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gk104_fifo_intr_dropped_fault()
354 gk104_fifo_intr_fault(struct gk104_fifo *fifo, int unit) in gk104_fifo_intr_fault() argument
356 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gk104_fifo_intr_fault()
399 chan = nvkm_fifo_chan_inst(&fifo->base, (u64)inst << 12, &flags); in gk104_fifo_intr_fault()
411 gk104_fifo_recover(fifo, engine, (void *)chan); in gk104_fifo_intr_fault()
412 nvkm_fifo_chan_put(&fifo->base, flags, &chan); in gk104_fifo_intr_fault()
450 gk104_fifo_intr_pbdma_0(struct gk104_fifo *fifo, int unit) in gk104_fifo_intr_pbdma_0() argument
452 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gk104_fifo_intr_pbdma_0()
476 chan = nvkm_fifo_chan_chid(&fifo->base, chid, &flags); in gk104_fifo_intr_pbdma_0()
482 nvkm_fifo_chan_put(&fifo->base, flags, &chan); in gk104_fifo_intr_pbdma_0()
498 gk104_fifo_intr_pbdma_1(struct gk104_fifo *fifo, int unit) in gk104_fifo_intr_pbdma_1() argument
500 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gk104_fifo_intr_pbdma_1()
519 gk104_fifo_intr_runlist(struct gk104_fifo *fifo) in gk104_fifo_intr_runlist() argument
521 struct nvkm_device *device = fifo->base.engine.subdev.device; in gk104_fifo_intr_runlist()
525 wake_up(&fifo->engine[engn].wait); in gk104_fifo_intr_runlist()
532 gk104_fifo_intr_engine(struct gk104_fifo *fifo) in gk104_fifo_intr_engine() argument
534 nvkm_fifo_uevent(&fifo->base); in gk104_fifo_intr_engine()
540 struct gk104_fifo *fifo = gk104_fifo(base); in gk104_fifo_intr() local
541 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gk104_fifo_intr()
547 gk104_fifo_intr_bind(fifo); in gk104_fifo_intr()
559 gk104_fifo_intr_sched(fifo); in gk104_fifo_intr()
565 gk104_fifo_intr_chsw(fifo); in gk104_fifo_intr()
583 gk104_fifo_intr_dropped_fault(fifo); in gk104_fifo_intr()
592 gk104_fifo_intr_fault(fifo, unit); in gk104_fifo_intr()
603 gk104_fifo_intr_pbdma_0(fifo, unit); in gk104_fifo_intr()
604 gk104_fifo_intr_pbdma_1(fifo, unit); in gk104_fifo_intr()
612 gk104_fifo_intr_runlist(fifo); in gk104_fifo_intr()
618 gk104_fifo_intr_engine(fifo); in gk104_fifo_intr()
632 struct gk104_fifo *fifo = gk104_fifo(base); in gk104_fifo_fini() local
633 struct nvkm_device *device = fifo->base.engine.subdev.device; in gk104_fifo_fini()
634 flush_work(&fifo->fault); in gk104_fifo_fini()
642 struct gk104_fifo *fifo = gk104_fifo(base); in gk104_fifo_oneinit() local
643 struct nvkm_device *device = fifo->base.engine.subdev.device; in gk104_fifo_oneinit()
646 for (i = 0; i < ARRAY_SIZE(fifo->engine); i++) { in gk104_fifo_oneinit()
649 &fifo->engine[i].runlist[0]); in gk104_fifo_oneinit()
655 &fifo->engine[i].runlist[1]); in gk104_fifo_oneinit()
659 init_waitqueue_head(&fifo->engine[i].wait); in gk104_fifo_oneinit()
660 INIT_LIST_HEAD(&fifo->engine[i].chan); in gk104_fifo_oneinit()
664 fifo->base.nr * 0x200, 0x1000, true, in gk104_fifo_oneinit()
665 &fifo->user.mem); in gk104_fifo_oneinit()
669 ret = nvkm_bar_umap(device->bar, fifo->base.nr * 0x200, 12, in gk104_fifo_oneinit()
670 &fifo->user.bar); in gk104_fifo_oneinit()
674 nvkm_memory_map(fifo->user.mem, &fifo->user.bar, 0); in gk104_fifo_oneinit()
681 struct gk104_fifo *fifo = gk104_fifo(base); in gk104_fifo_init() local
682 struct nvkm_subdev *subdev = &fifo->base.engine.subdev; in gk104_fifo_init()
688 fifo->spoon_nr = hweight32(nvkm_rd32(device, 0x000204)); in gk104_fifo_init()
689 nvkm_debug(subdev, "%d PBDMA unit(s)\n", fifo->spoon_nr); in gk104_fifo_init()
692 for (i = 0; i < fifo->spoon_nr; i++) { in gk104_fifo_init()
699 for (i = 0; i < fifo->spoon_nr; i++) { in gk104_fifo_init()
704 nvkm_wr32(device, 0x002254, 0x10000000 | fifo->user.bar.offset >> 12); in gk104_fifo_init()
713 struct gk104_fifo *fifo = gk104_fifo(base); in gk104_fifo_dtor() local
716 nvkm_vm_put(&fifo->user.bar); in gk104_fifo_dtor()
717 nvkm_memory_del(&fifo->user.mem); in gk104_fifo_dtor()
719 for (i = 0; i < ARRAY_SIZE(fifo->engine); i++) { in gk104_fifo_dtor()
720 nvkm_memory_del(&fifo->engine[i].runlist[1]); in gk104_fifo_dtor()
721 nvkm_memory_del(&fifo->engine[i].runlist[0]); in gk104_fifo_dtor()
724 return fifo; in gk104_fifo_dtor()
731 struct gk104_fifo *fifo; in gk104_fifo_new_() local
733 if (!(fifo = kzalloc(sizeof(*fifo), GFP_KERNEL))) in gk104_fifo_new_()
735 INIT_WORK(&fifo->fault, gk104_fifo_recover_work); in gk104_fifo_new_()
736 *pfifo = &fifo->base; in gk104_fifo_new_()
738 return nvkm_fifo_ctor(func, device, index, nr, &fifo->base); in gk104_fifo_new_()