Lines Matching refs:chan
38 gk104_fifo_gpfifo_kick_locked(struct gk104_fifo_chan *chan) in gk104_fifo_gpfifo_kick_locked() argument
40 struct gk104_fifo *fifo = chan->fifo; in gk104_fifo_gpfifo_kick_locked()
43 struct nvkm_client *client = chan->base.object.client; in gk104_fifo_gpfifo_kick_locked()
44 struct nvkm_fifo_cgrp *cgrp = chan->cgrp; in gk104_fifo_gpfifo_kick_locked()
50 nvkm_wr32(device, 0x002634, chan->base.chid); in gk104_fifo_gpfifo_kick_locked()
57 cgrp ? cgrp->id : chan->base.chid, client->name); in gk104_fifo_gpfifo_kick_locked()
58 nvkm_fifo_recover_chan(&fifo->base, chan->base.chid); in gk104_fifo_gpfifo_kick_locked()
65 gk104_fifo_gpfifo_kick(struct gk104_fifo_chan *chan) in gk104_fifo_gpfifo_kick() argument
68 mutex_lock(&chan->base.fifo->mutex); in gk104_fifo_gpfifo_kick()
69 ret = gk104_fifo_gpfifo_kick_locked(chan); in gk104_fifo_gpfifo_kick()
70 mutex_unlock(&chan->base.fifo->mutex); in gk104_fifo_gpfifo_kick()
99 gk104_fifo_gpfifo_engine(struct gk104_fifo_chan *chan, struct nvkm_engine *engine) in gk104_fifo_gpfifo_engine() argument
101 int engi = chan->base.fifo->func->engine_id(chan->base.fifo, engine); in gk104_fifo_gpfifo_engine()
103 return &chan->engn[engi]; in gk104_fifo_gpfifo_engine()
111 struct gk104_fifo_chan *chan = gk104_fifo_chan(base); in gk104_fifo_gpfifo_engine_fini() local
112 struct nvkm_gpuobj *inst = chan->base.inst; in gk104_fifo_gpfifo_engine_fini()
116 ret = gk104_fifo_gpfifo_kick(chan); in gk104_fifo_gpfifo_engine_fini()
138 struct gk104_fifo_chan *chan = gk104_fifo_chan(base); in gk104_fifo_gpfifo_engine_init() local
139 struct gk104_fifo_engn *engn = gk104_fifo_gpfifo_engine(chan, engine); in gk104_fifo_gpfifo_engine_init()
140 struct nvkm_gpuobj *inst = chan->base.inst; in gk104_fifo_gpfifo_engine_init()
163 struct gk104_fifo_chan *chan = gk104_fifo_chan(base); in gk104_fifo_gpfifo_engine_dtor() local
164 struct gk104_fifo_engn *engn = gk104_fifo_gpfifo_engine(chan, engine); in gk104_fifo_gpfifo_engine_dtor()
165 nvkm_vmm_put(chan->base.vmm, &engn->vma); in gk104_fifo_gpfifo_engine_dtor()
174 struct gk104_fifo_chan *chan = gk104_fifo_chan(base); in gk104_fifo_gpfifo_engine_ctor() local
175 struct gk104_fifo_engn *engn = gk104_fifo_gpfifo_engine(chan, engine); in gk104_fifo_gpfifo_engine_ctor()
185 ret = nvkm_vmm_get(chan->base.vmm, 12, engn->inst->size, &engn->vma); in gk104_fifo_gpfifo_engine_ctor()
189 return nvkm_memory_map(engn->inst, 0, chan->base.vmm, engn->vma, NULL, 0); in gk104_fifo_gpfifo_engine_ctor()
195 struct gk104_fifo_chan *chan = gk104_fifo_chan(base); in gk104_fifo_gpfifo_fini() local
196 struct gk104_fifo *fifo = chan->fifo; in gk104_fifo_gpfifo_fini()
198 u32 coff = chan->base.chid * 8; in gk104_fifo_gpfifo_fini()
200 if (!list_empty(&chan->head)) { in gk104_fifo_gpfifo_fini()
201 gk104_fifo_runlist_remove(fifo, chan); in gk104_fifo_gpfifo_fini()
203 gk104_fifo_gpfifo_kick(chan); in gk104_fifo_gpfifo_fini()
204 gk104_fifo_runlist_update(fifo, chan->runl); in gk104_fifo_gpfifo_fini()
213 struct gk104_fifo_chan *chan = gk104_fifo_chan(base); in gk104_fifo_gpfifo_init() local
214 struct gk104_fifo *fifo = chan->fifo; in gk104_fifo_gpfifo_init()
216 u32 addr = chan->base.inst->addr >> 12; in gk104_fifo_gpfifo_init()
217 u32 coff = chan->base.chid * 8; in gk104_fifo_gpfifo_init()
219 nvkm_mask(device, 0x800004 + coff, 0x000f0000, chan->runl << 16); in gk104_fifo_gpfifo_init()
222 if (list_empty(&chan->head) && !chan->killed) { in gk104_fifo_gpfifo_init()
223 gk104_fifo_runlist_insert(fifo, chan); in gk104_fifo_gpfifo_init()
225 gk104_fifo_runlist_update(fifo, chan->runl); in gk104_fifo_gpfifo_init()
233 struct gk104_fifo_chan *chan = gk104_fifo_chan(base); in gk104_fifo_gpfifo_dtor() local
234 nvkm_memory_unref(&chan->mthd); in gk104_fifo_gpfifo_dtor()
235 kfree(chan->cgrp); in gk104_fifo_gpfifo_dtor()
236 return chan; in gk104_fifo_gpfifo_dtor()
257 struct gk104_fifo_chan *chan; in gk104_fifo_gpfifo_new_() local
266 if (!(chan = kzalloc(sizeof(*chan), GFP_KERNEL))) in gk104_fifo_gpfifo_new_()
268 *pobject = &chan->base.object; in gk104_fifo_gpfifo_new_()
269 chan->fifo = fifo; in gk104_fifo_gpfifo_new_()
270 chan->runl = runlist; in gk104_fifo_gpfifo_new_()
271 INIT_LIST_HEAD(&chan->head); in gk104_fifo_gpfifo_new_()
276 oclass, &chan->base); in gk104_fifo_gpfifo_new_()
280 *chid = chan->base.chid; in gk104_fifo_gpfifo_new_()
281 *inst = chan->base.inst->addr; in gk104_fifo_gpfifo_new_()
287 if (!(chan->cgrp = kmalloc(sizeof(*chan->cgrp), GFP_KERNEL))) in gk104_fifo_gpfifo_new_()
289 chan->cgrp->id = chan->base.chid; in gk104_fifo_gpfifo_new_()
290 INIT_LIST_HEAD(&chan->cgrp->head); in gk104_fifo_gpfifo_new_()
291 INIT_LIST_HEAD(&chan->cgrp->chan); in gk104_fifo_gpfifo_new_()
292 chan->cgrp->chan_nr = 0; in gk104_fifo_gpfifo_new_()
296 usermem = chan->base.chid * 0x200; in gk104_fifo_gpfifo_new_()
306 nvkm_kmap(chan->base.inst); in gk104_fifo_gpfifo_new_()
307 nvkm_wo32(chan->base.inst, 0x08, lower_32_bits(usermem)); in gk104_fifo_gpfifo_new_()
308 nvkm_wo32(chan->base.inst, 0x0c, upper_32_bits(usermem)); in gk104_fifo_gpfifo_new_()
309 nvkm_wo32(chan->base.inst, 0x10, 0x0000face); in gk104_fifo_gpfifo_new_()
310 nvkm_wo32(chan->base.inst, 0x30, 0xfffff902); in gk104_fifo_gpfifo_new_()
311 nvkm_wo32(chan->base.inst, 0x48, lower_32_bits(ioffset)); in gk104_fifo_gpfifo_new_()
312 nvkm_wo32(chan->base.inst, 0x4c, upper_32_bits(ioffset) | in gk104_fifo_gpfifo_new_()
314 nvkm_wo32(chan->base.inst, 0x84, 0x20400000); in gk104_fifo_gpfifo_new_()
315 nvkm_wo32(chan->base.inst, 0x94, 0x30000001); in gk104_fifo_gpfifo_new_()
316 nvkm_wo32(chan->base.inst, 0x9c, 0x00000100); in gk104_fifo_gpfifo_new_()
317 nvkm_wo32(chan->base.inst, 0xac, 0x0000001f); in gk104_fifo_gpfifo_new_()
318 nvkm_wo32(chan->base.inst, 0xe4, priv ? 0x00000020 : 0x00000000); in gk104_fifo_gpfifo_new_()
319 nvkm_wo32(chan->base.inst, 0xe8, chan->base.chid); in gk104_fifo_gpfifo_new_()
320 nvkm_wo32(chan->base.inst, 0xb8, 0xf8000000); in gk104_fifo_gpfifo_new_()
321 nvkm_wo32(chan->base.inst, 0xf8, 0x10003080); /* 0x002310 */ in gk104_fifo_gpfifo_new_()
322 nvkm_wo32(chan->base.inst, 0xfc, 0x10000010); /* 0x002350 */ in gk104_fifo_gpfifo_new_()
323 nvkm_done(chan->base.inst); in gk104_fifo_gpfifo_new_()