Lines Matching full:disp
33 #include <subdev/bios/disp.h>
48 struct nv50_disp *disp = nv50_disp(base); in nv50_disp_intr_() local
49 disp->func->intr(disp); in nv50_disp_intr_()
55 struct nv50_disp *disp = nv50_disp(base); in nv50_disp_fini_() local
56 disp->func->fini(disp); in nv50_disp_fini_()
62 struct nv50_disp *disp = nv50_disp(base); in nv50_disp_init_() local
63 return disp->func->init(disp); in nv50_disp_init_()
69 struct nv50_disp *disp = nv50_disp(base); in nv50_disp_dtor_() local
71 nvkm_ramht_del(&disp->ramht); in nv50_disp_dtor_()
72 nvkm_gpuobj_del(&disp->inst); in nv50_disp_dtor_()
74 nvkm_event_fini(&disp->uevent); in nv50_disp_dtor_()
75 if (disp->wq) in nv50_disp_dtor_()
76 destroy_workqueue(disp->wq); in nv50_disp_dtor_()
78 return disp; in nv50_disp_dtor_()
84 struct nv50_disp *disp = nv50_disp(base); in nv50_disp_oneinit_() local
85 const struct nv50_disp_func *func = disp->func; in nv50_disp_oneinit_()
86 struct nvkm_subdev *subdev = &disp->base.engine.subdev; in nv50_disp_oneinit_()
91 disp->wndw.nr = func->wndw.cnt(&disp->base, &disp->wndw.mask); in nv50_disp_oneinit_()
93 disp->wndw.nr, disp->wndw.mask); in nv50_disp_oneinit_()
96 disp->head.nr = func->head.cnt(&disp->base, &disp->head.mask); in nv50_disp_oneinit_()
98 disp->head.nr, disp->head.mask); in nv50_disp_oneinit_()
99 for_each_set_bit(i, &disp->head.mask, disp->head.nr) { in nv50_disp_oneinit_()
100 ret = func->head.new(&disp->base, i); in nv50_disp_oneinit_()
106 disp->dac.nr = func->dac.cnt(&disp->base, &disp->dac.mask); in nv50_disp_oneinit_()
108 disp->dac.nr, disp->dac.mask); in nv50_disp_oneinit_()
109 for_each_set_bit(i, &disp->dac.mask, disp->dac.nr) { in nv50_disp_oneinit_()
110 ret = func->dac.new(&disp->base, i); in nv50_disp_oneinit_()
117 disp->pior.nr = func->pior.cnt(&disp->base, &disp->pior.mask); in nv50_disp_oneinit_()
119 disp->pior.nr, disp->pior.mask); in nv50_disp_oneinit_()
120 for_each_set_bit(i, &disp->pior.mask, disp->pior.nr) { in nv50_disp_oneinit_()
121 ret = func->pior.new(&disp->base, i); in nv50_disp_oneinit_()
127 disp->sor.nr = func->sor.cnt(&disp->base, &disp->sor.mask); in nv50_disp_oneinit_()
129 disp->sor.nr, disp->sor.mask); in nv50_disp_oneinit_()
130 for_each_set_bit(i, &disp->sor.mask, disp->sor.nr) { in nv50_disp_oneinit_()
131 ret = func->sor.new(&disp->base, i); in nv50_disp_oneinit_()
137 &disp->inst); in nv50_disp_oneinit_()
142 0x1000, 0, disp->inst, &disp->ramht); in nv50_disp_oneinit_()
159 struct nv50_disp *disp; in nv50_disp_new_() local
162 if (!(disp = kzalloc(sizeof(*disp), GFP_KERNEL))) in nv50_disp_new_()
164 disp->func = func; in nv50_disp_new_()
165 *pdisp = &disp->base; in nv50_disp_new_()
167 ret = nvkm_disp_ctor(&nv50_disp_, device, index, &disp->base); in nv50_disp_new_()
171 disp->wq = create_singlethread_workqueue("nvkm-disp"); in nv50_disp_new_()
172 if (!disp->wq) in nv50_disp_new_()
175 INIT_WORK(&disp->supervisor, func->super); in nv50_disp_new_()
177 return nvkm_event_init(func->uevent, 1, ARRAY_SIZE(disp->chan), in nv50_disp_new_()
178 &disp->uevent); in nv50_disp_new_()
186 struct nvkm_bios *bios = head->disp->engine.subdev.device->bios; in nv50_disp_super_iedt()
200 struct nvkm_subdev *subdev = &head->disp->engine.subdev; in nv50_disp_super_ied_on()
269 nvbios_init(&head->disp->engine.subdev, iedt.script[id], in nv50_disp_super_ied_off()
281 list_for_each_entry(ior, &head->disp->ior, head) { in nv50_disp_super_ior_asy()
295 list_for_each_entry(ior, &head->disp->ior, head) { in nv50_disp_super_ior_arm()
306 nv50_disp_super_3_0(struct nv50_disp *disp, struct nvkm_head *head) in nv50_disp_super_3_0() argument
327 struct nvkm_subdev *subdev = &head->disp->engine.subdev; in nv50_disp_super_2_2_dp()
431 nv50_disp_super_2_2(struct nv50_disp *disp, struct nvkm_head *head) in nv50_disp_super_2_2() argument
453 head->asy.or.depth = (disp->sor.lvdsconf & 0x0200) ? 24 : 18; in nv50_disp_super_2_2()
454 ior->asy.link = (disp->sor.lvdsconf & 0x0100) ? 3 : 1; in nv50_disp_super_2_2()
478 nv50_disp_super_2_1(struct nv50_disp *disp, struct nvkm_head *head) in nv50_disp_super_2_1() argument
480 struct nvkm_devinit *devinit = disp->base.engine.subdev.device->devinit; in nv50_disp_super_2_1()
488 nv50_disp_super_2_0(struct nv50_disp *disp, struct nvkm_head *head) in nv50_disp_super_2_0() argument
512 nv50_disp_super_1_0(struct nv50_disp *disp, struct nvkm_head *head) in nv50_disp_super_1_0() argument
527 nv50_disp_super_1(struct nv50_disp *disp) in nv50_disp_super_1() argument
532 list_for_each_entry(head, &disp->base.head, head) { in nv50_disp_super_1()
537 list_for_each_entry(ior, &disp->base.ior, head) { in nv50_disp_super_1()
546 struct nv50_disp *disp = in nv50_disp_super() local
548 struct nvkm_subdev *subdev = &disp->base.engine.subdev; in nv50_disp_super()
553 nvkm_debug(subdev, "supervisor %08x %08x\n", disp->super, super); in nv50_disp_super()
555 if (disp->super & 0x00000010) { in nv50_disp_super()
556 nv50_disp_chan_mthd(disp->chan[0], NV_DBG_DEBUG); in nv50_disp_super()
557 nv50_disp_super_1(disp); in nv50_disp_super()
558 list_for_each_entry(head, &disp->base.head, head) { in nv50_disp_super()
563 nv50_disp_super_1_0(disp, head); in nv50_disp_super()
566 if (disp->super & 0x00000020) { in nv50_disp_super()
567 list_for_each_entry(head, &disp->base.head, head) { in nv50_disp_super()
570 nv50_disp_super_2_0(disp, head); in nv50_disp_super()
572 nvkm_outp_route(&disp->base); in nv50_disp_super()
573 list_for_each_entry(head, &disp->base.head, head) { in nv50_disp_super()
576 nv50_disp_super_2_1(disp, head); in nv50_disp_super()
578 list_for_each_entry(head, &disp->base.head, head) { in nv50_disp_super()
581 nv50_disp_super_2_2(disp, head); in nv50_disp_super()
584 if (disp->super & 0x00000040) { in nv50_disp_super()
585 list_for_each_entry(head, &disp->base.head, head) { in nv50_disp_super()
588 nv50_disp_super_3_0(disp, head); in nv50_disp_super()
614 nv50_disp_intr_error(struct nv50_disp *disp, int chid) in nv50_disp_intr_error() argument
616 struct nvkm_subdev *subdev = &disp->base.engine.subdev; in nv50_disp_intr_error()
633 if (chid < ARRAY_SIZE(disp->chan)) { in nv50_disp_intr_error()
636 nv50_disp_chan_mthd(disp->chan[chid], NV_DBG_ERROR); in nv50_disp_intr_error()
648 nv50_disp_intr(struct nv50_disp *disp) in nv50_disp_intr() argument
650 struct nvkm_device *device = disp->base.engine.subdev.device; in nv50_disp_intr()
656 nv50_disp_intr_error(disp, chid); in nv50_disp_intr()
662 nv50_disp_chan_uevent_send(disp, chid); in nv50_disp_intr()
667 nvkm_disp_vblank(&disp->base, 0); in nv50_disp_intr()
672 nvkm_disp_vblank(&disp->base, 1); in nv50_disp_intr()
677 disp->super = (intr1 & 0x00000070); in nv50_disp_intr()
678 queue_work(disp->wq, &disp->supervisor); in nv50_disp_intr()
679 nvkm_wr32(device, 0x610024, disp->super); in nv50_disp_intr()
684 nv50_disp_fini(struct nv50_disp *disp) in nv50_disp_fini() argument
686 struct nvkm_device *device = disp->base.engine.subdev.device; in nv50_disp_fini()
693 nv50_disp_init(struct nv50_disp *disp) in nv50_disp_init() argument
695 struct nvkm_device *device = disp->base.engine.subdev.device; in nv50_disp_init()
708 list_for_each_entry(head, &disp->base.head, head) { in nv50_disp_init()
720 for (i = 0; i < disp->dac.nr; i++) { in nv50_disp_init()
726 for (i = 0; i < disp->sor.nr; i++) { in nv50_disp_init()
732 for (i = 0; i < disp->pior.nr; i++) { in nv50_disp_init()
749 nvkm_wr32(device, 0x610010, (disp->inst->addr >> 8) | 9); in nv50_disp_init()