39 void __iomem *iomem =
object->oclass->ofuncs->rd08;
46 void __iomem *iomem =
object->oclass->ofuncs->rd08;
60 nouveau_bo_ref(
NULL, &evo->
push.buffer);
79 if (nv_device(drm->
device)->chipset < 0xc0) {
81 if (nv_device(drm->
device)->chipset == 0x50)
85 if (memtype & 0x80000000)
91 nv_wo32(disp->
ramin, dmao + 0x00, 0x0019003d | (memtype << 22));
96 nv_wo32(disp->
ramin, dmao + 0x10, 0x00000000);
97 nv_wo32(disp->
ramin, dmao + 0x14, flags5);
99 nv_wo32(disp->
ramin, hash + 0x00, handle);
100 nv_wo32(disp->
ramin, hash + 0x04, (evo->
handle << 28) | (dmao << 10) |
133 NV_ERROR(drm,
"Error creating EVO DMA push buffer: %d\n", ret);
134 nv50_evo_channel_del(pevo);
140 NV_ERROR(drm,
"Error mapping EVO DMA push buffer: %d\n", ret);
141 nv50_evo_channel_del(pevo);
146 #ifdef NOUVEAU_OBJECT_MAGIC
149 evo->
object->parent = nv_object(disp->
ramin)->parent;
150 evo->
object->engine = nv_object(disp->
ramin)->engine;
153 evo->
object->oclass->ofuncs =
155 evo->
object->oclass->ofuncs->rd32 = nv50_evo_rd32;
156 evo->
object->oclass->ofuncs->wr32 = nv50_evo_wr32;
157 evo->
object->oclass->ofuncs->rd08 =
169 u64 pushbuf = evo->
push.buffer->bo.offset;
173 if ((tmp & 0x009f0000) == 0x00020000)
177 if ((tmp & 0x003f0000) == 0x00030000)
193 NV_ERROR(drm,
"EvoCh %d init timeout: 0x%08x\n",
id,
199 nv_mask(device, 0x610028, 0x00000000, 0x00010001 <<
id);
201 evo->
dma.max = (4096/4) - 2;
204 evo->
dma.cur = evo->
dma.put;
205 evo->
dma.free = evo->
dma.max - evo->
dma.cur;
224 nv_mask(device, 0x610028, 0x00010001 <<
id, 0x00000000);
229 NV_ERROR(drm,
"EvoCh %d takedown timeout: 0x%08x\n",
id,
240 for (i = 0; i < 2; i++) {
241 if (disp->
crtc[i].sem.bo) {
243 nouveau_bo_ref(
NULL, &disp->
crtc[i].sem.bo);
245 nv50_evo_channel_del(&disp->
crtc[i].sync);
247 nv50_evo_channel_del(&disp->
master);
267 NV_ERROR(drm,
"Error allocating EVO channel memory: %d\n", ret);
277 ret = nv50_evo_channel_new(dev, 0, &disp->
master);
283 disp->
ramin->addr + 0x2000, 0x1000,
NULL);
299 (nv_device(drm->
device)->chipset < 0xc0 ? 0x7a : 0xfe),
305 (nv_device(drm->
device)->chipset < 0xc0 ? 0x70 : 0xfe),
313 for (i = 0; i < 2; i++) {
317 ret = nv50_evo_channel_new(dev, 1 + i, &dispc->
sync);
322 0, 0x0000,
NULL, &dispc->
sem.bo);
328 nouveau_bo_ref(
NULL, &dispc->
sem.bo);
329 offset = dispc->
sem.bo->bo.offset;
346 (nv_device(drm->
device)->chipset < 0xc0 ?
353 (nv_device(drm->
device)->chipset < 0xc0 ?
359 for (j = 0; j < 4096; j += 4)
361 dispc->
sem.offset = 0;
377 ret = nv50_evo_channel_init(disp->
master);
381 for (i = 0; i < 2; i++) {
382 ret = nv50_evo_channel_init(disp->
crtc[i].sync);
396 for (i = 0; i < 2; i++) {
397 if (disp->
crtc[i].sync)
398 nv50_evo_channel_fini(disp->
crtc[i].sync);
402 nv50_evo_channel_fini(disp->
master);