return outp;
 }
 
-static void
-gf119_disp_intr_unk2_1(struct nv50_disp *disp, int head)
-{
-       struct nvkm_device *device = disp->base.engine.subdev.device;
-       struct nvkm_devinit *devinit = device->devinit;
-       u32 pclk = nvkm_rd32(device, 0x660450 + (head * 0x300)) / 1000;
-       if (pclk)
-               nvkm_devinit_pll_set(devinit, PLL_VPLL0 + head, pclk);
-       nvkm_wr32(device, 0x612200 + (head * 0x800), 0x00000000);
-}
-
 static void
 gf119_disp_intr_unk2_2_tu(struct nv50_disp *disp, int head,
                          struct dcb_output *outp)
        }
 
        nvkm_mask(device, addr, 0x00000707, data);
+       nvkm_wr32(device, 0x612200 + (head * 0x800), 0x00000000);
 }
 
 static void
                list_for_each_entry(head, &disp->base.head, head) {
                        if (!(mask[head->id] & 0x00010000))
                                continue;
-                       nvkm_debug(subdev, "supervisor 2.1 - head %d\n", head->id);
-                       gf119_disp_intr_unk2_1(disp, head->id);
+                       nv50_disp_super_2_1(disp, head);
                }
                list_for_each_entry(head, &disp->base.head, head) {
                        if (!(mask[head->id] & 0x00001000))
 
        nv50_disp_dptmds_war_2(disp, &outp->info);
 }
 
-static void
-nv50_disp_intr_unk20_1(struct nv50_disp *disp, int head)
+void
+nv50_disp_super_2_1(struct nv50_disp *disp, struct nvkm_head *head)
 {
-       struct nvkm_device *device = disp->base.engine.subdev.device;
-       struct nvkm_devinit *devinit = device->devinit;
-       u32 pclk = nvkm_rd32(device, 0x610ad0 + (head * 0x540)) & 0x3fffff;
-       if (pclk)
-               nvkm_devinit_pll_set(devinit, PLL_VPLL0 + head, pclk);
+       struct nvkm_devinit *devinit = disp->base.engine.subdev.device->devinit;
+       u32 khz = head->asy.hz / 1000;
+       HEAD_DBG(head, "supervisor 2.1 - %d khz", khz);
+       if (khz)
+               nvkm_devinit_pll_set(devinit, PLL_VPLL0 + head->id, khz);
 }
 
 void
                list_for_each_entry(head, &disp->base.head, head) {
                        if (!(super & (0x00000200 << head->id)))
                                continue;
-                       nv50_disp_intr_unk20_1(disp, head->id);
+                       nv50_disp_super_2_1(disp, head);
                }
                list_for_each_entry(head, &disp->base.head, head) {
                        if (!(super & (0x00000080 << head->id)))
 
 void nv50_disp_super_1(struct nv50_disp *);
 void nv50_disp_super_1_0(struct nv50_disp *, struct nvkm_head *);
 void nv50_disp_super_2_0(struct nv50_disp *, struct nvkm_head *);
+void nv50_disp_super_2_1(struct nv50_disp *, struct nvkm_head *);
 
 int nv50_disp_new_(const struct nv50_disp_func *, struct nvkm_device *,
                   int index, int heads, struct nvkm_disp **);