Lines Matching refs:head
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_()
182 nv50_disp_super_iedt(struct nvkm_head *head, struct nvkm_outp *outp, in nv50_disp_super_iedt() argument
186 struct nvkm_bios *bios = head->disp->engine.subdev.device->bios; in nv50_disp_super_iedt()
189 const u16 m = (0x0100 << head->id) | (l << 6) | outp->info.or; in nv50_disp_super_iedt()
197 nv50_disp_super_ied_on(struct nvkm_head *head, in nv50_disp_super_ied_on() argument
200 struct nvkm_subdev *subdev = &head->disp->engine.subdev; in nv50_disp_super_ied_on()
214 data = nv50_disp_super_iedt(head, outp, &ver, &hdr, &cnt, &len, &iedt); in nv50_disp_super_ied_on()
221 if (head->asy.or.depth == 24) in nv50_disp_super_ied_on()
248 init.head = head->id; in nv50_disp_super_ied_on()
253 nv50_disp_super_ied_off(struct nvkm_head *head, struct nvkm_ior *ior, int id) in nv50_disp_super_ied_off() argument
265 data = nv50_disp_super_iedt(head, outp, &ver, &hdr, &cnt, &len, &iedt); in nv50_disp_super_ied_off()
269 nvbios_init(&head->disp->engine.subdev, iedt.script[id], in nv50_disp_super_ied_off()
273 init.head = head->id; in nv50_disp_super_ied_off()
278 nv50_disp_super_ior_asy(struct nvkm_head *head) in nv50_disp_super_ior_asy() argument
281 list_for_each_entry(ior, &head->disp->ior, head) { in nv50_disp_super_ior_asy()
282 if (ior->asy.head & (1 << head->id)) { in nv50_disp_super_ior_asy()
283 HEAD_DBG(head, "to %s", ior->name); in nv50_disp_super_ior_asy()
287 HEAD_DBG(head, "nothing to attach"); in nv50_disp_super_ior_asy()
292 nv50_disp_super_ior_arm(struct nvkm_head *head) in nv50_disp_super_ior_arm() argument
295 list_for_each_entry(ior, &head->disp->ior, head) { in nv50_disp_super_ior_arm()
296 if (ior->arm.head & (1 << head->id)) { in nv50_disp_super_ior_arm()
297 HEAD_DBG(head, "on %s", ior->name); in nv50_disp_super_ior_arm()
301 HEAD_DBG(head, "nothing attached"); 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
311 HEAD_DBG(head, "supervisor 3.0"); in nv50_disp_super_3_0()
312 ior = nv50_disp_super_ior_asy(head); in nv50_disp_super_3_0()
317 nv50_disp_super_ied_on(head, ior, 1, head->asy.hz / 1000); in nv50_disp_super_3_0()
325 nv50_disp_super_2_2_dp(struct nvkm_head *head, struct nvkm_ior *ior) in nv50_disp_super_2_2_dp() argument
327 struct nvkm_subdev *subdev = &head->disp->engine.subdev; in nv50_disp_super_2_2_dp()
328 const u32 khz = head->asy.hz / 1000; in nv50_disp_super_2_2_dp()
338 h = head->asy.hblanke + head->asy.htotal - head->asy.hblanks - 7; in nv50_disp_super_2_2_dp()
344 v = head->asy.vblanks - head->asy.vblanke - 25; in nv50_disp_super_2_2_dp()
349 ior->func->dp.audio_sym(ior, head->id, h, v); in nv50_disp_super_2_2_dp()
352 link_data_rate = (khz * head->asy.or.depth / 8) / ior->dp.nr; in nv50_disp_super_2_2_dp()
414 ior->func->dp.activesym(ior, head->id, bestTU, in nv50_disp_super_2_2_dp()
427 ior->func->dp.watermark(ior, head->id, unk); 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
433 const u32 khz = head->asy.hz / 1000; in nv50_disp_super_2_2()
438 HEAD_DBG(head, "supervisor 2.2"); in nv50_disp_super_2_2()
439 ior = nv50_disp_super_ior_asy(head); in nv50_disp_super_2_2()
453 head->asy.or.depth = (disp->sor.lvdsconf & 0x0200) ? 24 : 18; in nv50_disp_super_2_2()
462 nv50_disp_super_ied_on(head, ior, 0, khz); in nv50_disp_super_2_2()
465 head->func->rgclk(head, ior->asy.rgdiv); in nv50_disp_super_2_2()
469 nv50_disp_super_2_2_dp(head, ior); 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
481 const u32 khz = head->asy.hz / 1000; in nv50_disp_super_2_1()
482 HEAD_DBG(head, "supervisor 2.1 - %d khz", khz); in nv50_disp_super_2_1()
484 nvkm_devinit_pll_set(devinit, PLL_VPLL0 + head->id, khz); 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
494 HEAD_DBG(head, "supervisor 2.0"); in nv50_disp_super_2_0()
495 ior = nv50_disp_super_ior_arm(head); in nv50_disp_super_2_0()
500 nv50_disp_super_ied_off(head, ior, 2); in nv50_disp_super_2_0()
505 if (ior->arm.head == (1 << head->id)) { in nv50_disp_super_2_0()
512 nv50_disp_super_1_0(struct nv50_disp *disp, struct nvkm_head *head) in nv50_disp_super_1_0() argument
517 HEAD_DBG(head, "supervisor 1.0"); in nv50_disp_super_1_0()
518 ior = nv50_disp_super_ior_arm(head); in nv50_disp_super_1_0()
523 nv50_disp_super_ied_off(head, ior, 1); in nv50_disp_super_1_0()
529 struct nvkm_head *head; in nv50_disp_super_1() local
532 list_for_each_entry(head, &disp->base.head, head) { in nv50_disp_super_1()
533 head->func->state(head, &head->arm); in nv50_disp_super_1()
534 head->func->state(head, &head->asy); in nv50_disp_super_1()
537 list_for_each_entry(ior, &disp->base.ior, head) { in nv50_disp_super_1()
550 struct nvkm_head *head; in nv50_disp_super() local
558 list_for_each_entry(head, &disp->base.head, head) { in nv50_disp_super()
559 if (!(super & (0x00000020 << head->id))) in nv50_disp_super()
561 if (!(super & (0x00000080 << head->id))) in nv50_disp_super()
563 nv50_disp_super_1_0(disp, head); in nv50_disp_super()
567 list_for_each_entry(head, &disp->base.head, head) { in nv50_disp_super()
568 if (!(super & (0x00000080 << head->id))) in nv50_disp_super()
570 nv50_disp_super_2_0(disp, head); in nv50_disp_super()
573 list_for_each_entry(head, &disp->base.head, head) { in nv50_disp_super()
574 if (!(super & (0x00000200 << head->id))) 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()
579 if (!(super & (0x00000080 << head->id))) in nv50_disp_super()
581 nv50_disp_super_2_2(disp, head); in nv50_disp_super()
585 list_for_each_entry(head, &disp->base.head, head) { in nv50_disp_super()
586 if (!(super & (0x00000080 << head->id))) in nv50_disp_super()
588 nv50_disp_super_3_0(disp, head); in nv50_disp_super()
696 struct nvkm_head *head; in nv50_disp_init() local
708 list_for_each_entry(head, &disp->base.head, head) { in nv50_disp_init()
709 tmp = nvkm_rd32(device, 0x616100 + (head->id * 0x800)); in nv50_disp_init()
710 nvkm_wr32(device, 0x610190 + (head->id * 0x10), tmp); in nv50_disp_init()
711 tmp = nvkm_rd32(device, 0x616104 + (head->id * 0x800)); in nv50_disp_init()
712 nvkm_wr32(device, 0x610194 + (head->id * 0x10), tmp); in nv50_disp_init()
713 tmp = nvkm_rd32(device, 0x616108 + (head->id * 0x800)); in nv50_disp_init()
714 nvkm_wr32(device, 0x610198 + (head->id * 0x10), tmp); in nv50_disp_init()
715 tmp = nvkm_rd32(device, 0x61610c + (head->id * 0x800)); in nv50_disp_init()
716 nvkm_wr32(device, 0x61019c + (head->id * 0x10), tmp); in nv50_disp_init()
765 .head = { .cnt = nv50_head_cnt, .new = nv50_head_new },