Lines Matching refs:dmac
119 nv50_dmac_destroy(struct nv50_dmac *dmac)
121 nvif_object_dtor(&dmac->vram);
122 nvif_object_dtor(&dmac->sync);
124 nv50_chan_destroy(&dmac->base);
126 nvif_mem_dtor(&dmac->_push.mem);
132 struct nv50_dmac *dmac = container_of(push, typeof(*dmac), _push);
134 dmac->cur = push->cur - (u32 __iomem *)dmac->_push.mem.object.map.ptr;
135 if (dmac->put != dmac->cur) {
139 if (dmac->push->mem.type & NVIF_MEM_VRAM) {
140 struct nvif_device *device = dmac->base.device;
148 NVIF_WV32(&dmac->base.user, NV507C, PUT, PTR, dmac->cur);
149 dmac->put = dmac->cur;
156 nv50_dmac_free(struct nv50_dmac *dmac)
158 u32 get = NVIF_RV32(&dmac->base.user, NV507C, GET, PTR);
159 if (get > dmac->cur) /* NVIDIA stay 5 away from GET, do the same. */
160 return get - dmac->cur - 5;
161 return dmac->max - dmac->cur;
165 nv50_dmac_wind(struct nv50_dmac *dmac)
170 u32 get = NVIF_RV32(&dmac->base.user, NV507C, GET, PTR);
173 if (dmac->put == 0)
174 nv50_dmac_kick(dmac->push);
176 if (nvif_msec(dmac->base.device, 2000,
177 if (NVIF_TV32(&dmac->base.user, NV507C, GET, PTR, >, 0))
183 PUSH_RSVD(dmac->push, PUSH_JUMP(dmac->push, 0));
184 dmac->cur = 0;
191 struct nv50_dmac *dmac = container_of(push, typeof(*dmac), _push);
194 if (WARN_ON(size > dmac->max))
197 dmac->cur = push->cur - (u32 __iomem *)dmac->_push.mem.object.map.ptr;
198 if (dmac->cur + size >= dmac->max) {
199 int ret = nv50_dmac_wind(dmac);
203 push->cur = dmac->_push.mem.object.map.ptr;
204 push->cur = push->cur + dmac->cur;
208 if (nvif_msec(dmac->base.device, 2000,
209 if ((free = nv50_dmac_free(dmac)) >= size)
216 push->bgn = dmac->_push.mem.object.map.ptr;
217 push->bgn = push->bgn + dmac->cur;
230 struct nv50_dmac *dmac)
237 mutex_init(&dmac->lock);
253 &dmac->_push.mem);
257 dmac->ptr = dmac->_push.mem.object.map.ptr;
258 dmac->_push.wait = nv50_dmac_wait;
259 dmac->_push.kick = nv50_dmac_kick;
260 dmac->push = &dmac->_push;
261 dmac->push->bgn = dmac->_push.mem.object.map.ptr;
262 dmac->push->cur = dmac->push->bgn;
263 dmac->push->end = dmac->push->bgn;
264 dmac->max = 0x1000/4 - 1;
270 dmac->max -= 12;
272 args->pushbuf = nvif_handle(&dmac->_push.mem.object);
275 &dmac->base);
282 ret = nvif_object_ctor(&dmac->base.user, "kmsSyncCtxDma", NV50_DISP_HANDLE_SYNCBUF,
290 &dmac->sync);
294 ret = nvif_object_ctor(&dmac->base.user, "kmsVramCtxDma", NV50_DISP_HANDLE_VRAM,
302 &dmac->vram);