|
@@ -32,8 +32,8 @@ gf119_disp_dmac_bind(struct nv50_disp_dmac *chan,
|
|
struct nvkm_object *object, u32 handle)
|
|
struct nvkm_object *object, u32 handle)
|
|
{
|
|
{
|
|
return nvkm_ramht_insert(chan->base.root->ramht, object,
|
|
return nvkm_ramht_insert(chan->base.root->ramht, object,
|
|
- chan->base.chid, -9, handle,
|
|
|
|
- chan->base.chid << 27 | 0x00000001);
|
|
|
|
|
|
+ chan->base.chid.user, -9, handle,
|
|
|
|
+ chan->base.chid.user << 27 | 0x00000001);
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
void
|
|
@@ -42,22 +42,23 @@ gf119_disp_dmac_fini(struct nv50_disp_dmac *chan)
|
|
struct nv50_disp *disp = chan->base.root->disp;
|
|
struct nv50_disp *disp = chan->base.root->disp;
|
|
struct nvkm_subdev *subdev = &disp->base.engine.subdev;
|
|
struct nvkm_subdev *subdev = &disp->base.engine.subdev;
|
|
struct nvkm_device *device = subdev->device;
|
|
struct nvkm_device *device = subdev->device;
|
|
- int chid = chan->base.chid;
|
|
|
|
|
|
+ int ctrl = chan->base.chid.ctrl;
|
|
|
|
+ int user = chan->base.chid.user;
|
|
|
|
|
|
/* deactivate channel */
|
|
/* deactivate channel */
|
|
- nvkm_mask(device, 0x610490 + (chid * 0x0010), 0x00001010, 0x00001000);
|
|
|
|
- nvkm_mask(device, 0x610490 + (chid * 0x0010), 0x00000003, 0x00000000);
|
|
|
|
|
|
+ nvkm_mask(device, 0x610490 + (ctrl * 0x0010), 0x00001010, 0x00001000);
|
|
|
|
+ nvkm_mask(device, 0x610490 + (ctrl * 0x0010), 0x00000003, 0x00000000);
|
|
if (nvkm_msec(device, 2000,
|
|
if (nvkm_msec(device, 2000,
|
|
- if (!(nvkm_rd32(device, 0x610490 + (chid * 0x10)) & 0x001e0000))
|
|
|
|
|
|
+ if (!(nvkm_rd32(device, 0x610490 + (ctrl * 0x10)) & 0x001e0000))
|
|
break;
|
|
break;
|
|
) < 0) {
|
|
) < 0) {
|
|
- nvkm_error(subdev, "ch %d fini: %08x\n", chid,
|
|
|
|
- nvkm_rd32(device, 0x610490 + (chid * 0x10)));
|
|
|
|
|
|
+ nvkm_error(subdev, "ch %d fini: %08x\n", user,
|
|
|
|
+ nvkm_rd32(device, 0x610490 + (ctrl * 0x10)));
|
|
}
|
|
}
|
|
|
|
|
|
/* disable error reporting and completion notification */
|
|
/* disable error reporting and completion notification */
|
|
- nvkm_mask(device, 0x610090, 0x00000001 << chid, 0x00000000);
|
|
|
|
- nvkm_mask(device, 0x6100a0, 0x00000001 << chid, 0x00000000);
|
|
|
|
|
|
+ nvkm_mask(device, 0x610090, 0x00000001 << user, 0x00000000);
|
|
|
|
+ nvkm_mask(device, 0x6100a0, 0x00000001 << user, 0x00000000);
|
|
}
|
|
}
|
|
|
|
|
|
static int
|
|
static int
|
|
@@ -66,26 +67,27 @@ gf119_disp_dmac_init(struct nv50_disp_dmac *chan)
|
|
struct nv50_disp *disp = chan->base.root->disp;
|
|
struct nv50_disp *disp = chan->base.root->disp;
|
|
struct nvkm_subdev *subdev = &disp->base.engine.subdev;
|
|
struct nvkm_subdev *subdev = &disp->base.engine.subdev;
|
|
struct nvkm_device *device = subdev->device;
|
|
struct nvkm_device *device = subdev->device;
|
|
- int chid = chan->base.chid;
|
|
|
|
|
|
+ int ctrl = chan->base.chid.ctrl;
|
|
|
|
+ int user = chan->base.chid.user;
|
|
|
|
|
|
/* enable error reporting */
|
|
/* enable error reporting */
|
|
- nvkm_mask(device, 0x6100a0, 0x00000001 << chid, 0x00000001 << chid);
|
|
|
|
|
|
+ nvkm_mask(device, 0x6100a0, 0x00000001 << user, 0x00000001 << user);
|
|
|
|
|
|
/* initialise channel for dma command submission */
|
|
/* initialise channel for dma command submission */
|
|
- nvkm_wr32(device, 0x610494 + (chid * 0x0010), chan->push);
|
|
|
|
- nvkm_wr32(device, 0x610498 + (chid * 0x0010), 0x00010000);
|
|
|
|
- nvkm_wr32(device, 0x61049c + (chid * 0x0010), 0x00000001);
|
|
|
|
- nvkm_mask(device, 0x610490 + (chid * 0x0010), 0x00000010, 0x00000010);
|
|
|
|
- nvkm_wr32(device, 0x640000 + (chid * 0x1000), 0x00000000);
|
|
|
|
- nvkm_wr32(device, 0x610490 + (chid * 0x0010), 0x00000013);
|
|
|
|
|
|
+ nvkm_wr32(device, 0x610494 + (ctrl * 0x0010), chan->push);
|
|
|
|
+ nvkm_wr32(device, 0x610498 + (ctrl * 0x0010), 0x00010000);
|
|
|
|
+ nvkm_wr32(device, 0x61049c + (ctrl * 0x0010), 0x00000001);
|
|
|
|
+ nvkm_mask(device, 0x610490 + (ctrl * 0x0010), 0x00000010, 0x00000010);
|
|
|
|
+ nvkm_wr32(device, 0x640000 + (ctrl * 0x1000), 0x00000000);
|
|
|
|
+ nvkm_wr32(device, 0x610490 + (ctrl * 0x0010), 0x00000013);
|
|
|
|
|
|
/* wait for it to go inactive */
|
|
/* wait for it to go inactive */
|
|
if (nvkm_msec(device, 2000,
|
|
if (nvkm_msec(device, 2000,
|
|
- if (!(nvkm_rd32(device, 0x610490 + (chid * 0x10)) & 0x80000000))
|
|
|
|
|
|
+ if (!(nvkm_rd32(device, 0x610490 + (ctrl * 0x10)) & 0x80000000))
|
|
break;
|
|
break;
|
|
) < 0) {
|
|
) < 0) {
|
|
- nvkm_error(subdev, "ch %d init: %08x\n", chid,
|
|
|
|
- nvkm_rd32(device, 0x610490 + (chid * 0x10)));
|
|
|
|
|
|
+ nvkm_error(subdev, "ch %d init: %08x\n", user,
|
|
|
|
+ nvkm_rd32(device, 0x610490 + (ctrl * 0x10)));
|
|
return -EBUSY;
|
|
return -EBUSY;
|
|
}
|
|
}
|
|
|
|
|