+ unkn = nv_rd32(dev, 0x6101d4);
+ if (!unkn) {
+ unkn = nv_rd32(dev, 0x6109d4);
+ crtc = 1;
+ }
+
+ disp->irq.ena = NULL;
+ disp->irq.dis = NULL;
+ disp->irq.crtc = crtc;
+ disp->irq.pclk = nv_rd32(dev, 0x660450 + (disp->irq.crtc * 0x300));
+ disp->irq.pclk /= 1000;
+
+ for (i = 0; i < 8; i++) {
+ u32 mcc = nv_rd32(dev, 0x640180 + (i * 0x20));
+ u32 mcp = nv_rd32(dev, 0x660180 + (i * 0x20));
+
+ if (mcc & (1 << crtc))
+ disp->irq.dis = lookup_dcb(dev, i, mcc);
+
+ if (mcp & (1 << crtc)) {
+ disp->irq.ena = lookup_dcb(dev, i, mcp);
+ switch (disp->irq.ena->type) {
+ case OUTPUT_ANALOG:
+ disp->irq.script = 0x00ff;
+ break;
+ case OUTPUT_TMDS:
+ disp->irq.script = (mcp & 0x00000f00) >> 8;
+ if (disp->irq.pclk >= 165000)
+ disp->irq.script |= 0x0100;
+ break;
+ default:
+ disp->irq.script = 0xbeef;
+ break;
+ }
+ }
+ }
+
+ dcb = disp->irq.dis;
+ if (dcb)
+ nouveau_bios_run_display_table(dev, 0x0000, -1, dcb, crtc);
+