1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#include "channv50.h"
25
26static void
27gf119_disp_chan_uevent_fini(struct nvkm_event *event, int type, int index)
28{
29 struct nv50_disp *disp = container_of(event, typeof(*disp), uevent);
30 struct nvkm_device *device = disp->base.engine.subdev.device;
31 nvkm_mask(device, 0x610090, 0x00000001 << index, 0x00000000 << index);
32 nvkm_wr32(device, 0x61008c, 0x00000001 << index);
33}
34
35static void
36gf119_disp_chan_uevent_init(struct nvkm_event *event, int types, int index)
37{
38 struct nv50_disp *disp = container_of(event, typeof(*disp), uevent);
39 struct nvkm_device *device = disp->base.engine.subdev.device;
40 nvkm_wr32(device, 0x61008c, 0x00000001 << index);
41 nvkm_mask(device, 0x610090, 0x00000001 << index, 0x00000001 << index);
42}
43
44const struct nvkm_event_func
45gf119_disp_chan_uevent = {
46 .ctor = nv50_disp_chan_uevent_ctor,
47 .init = gf119_disp_chan_uevent_init,
48 .fini = gf119_disp_chan_uevent_fini,
49};
50
51void
52gf119_disp_chan_intr(struct nv50_disp_chan *chan, bool en)
53{
54 struct nvkm_device *device = chan->disp->base.engine.subdev.device;
55 const u32 mask = 0x00000001 << chan->chid.user;
56 if (!en) {
57 nvkm_mask(device, 0x610090, mask, 0x00000000);
58 nvkm_mask(device, 0x6100a0, mask, 0x00000000);
59 } else {
60 nvkm_mask(device, 0x6100a0, mask, mask);
61 }
62}
63