On Mon, 11 Apr 2022, Emmanuel Dreyfus wrote:

When the kernel initialize a framebuffer, the signal ouput changes a bit
fro mwhat is inherited from the BIOS. I face the situation where the
display looses the signal, and I suspect this is related to the refresh
rate.


OK, I'm able to get a usable UEFI console (intelfb) with the hack below
(starting X, however, immediately locks up the system):

```
diff -urN a/sys/external/bsd/drm2/dist/drm/i915/display/intel_lvds.c 
b/sys/external/bsd/drm2/dist/drm/i915/display/intel_lvds.c
--- a/sys/external/bsd/drm2/dist/drm/i915/display/intel_lvds.c  2021-12-18 
23:45:30.000000000 +0000
+++ b/sys/external/bsd/drm2/dist/drm/i915/display/intel_lvds.c  2022-04-12 
10:28:48.162488466 +0000
@@ -962,11 +962,6 @@
        if (fixed_mode)
                goto out;

-       /* Failed to get EDID, what about VBT? */
-       fixed_mode = intel_panel_vbt_fixed_mode(intel_connector);
-       if (fixed_mode)
-               goto out;
-
        /*
         * If we didn't get EDID, try checking if the panel is already turned
         * on.  If so, assume that whatever is currently programmed is the
@@ -977,8 +972,12 @@
                DRM_DEBUG_KMS("using current (BIOS) mode: ");
                drm_mode_debug_printmodeline(fixed_mode);
                fixed_mode->type |= DRM_MODE_TYPE_PREFERRED;
+               goto out;
        }

+       /* Failed to get current mode, what about VBT? */
+       fixed_mode = intel_panel_vbt_fixed_mode(intel_connector);
+
        /* If we still don't have a mode after all that, give up. */
        if (!fixed_mode)
                goto failed;
```

Going by the kernel messages, on 9.2, the old DRM fails to find a VBT:

```
kern info: [drm] failed to find VBIOS tables
i915drmkms0: interrupting at ioapic0 pin 16 (i915drmkms0)
intelfb0 at i915drmkms0
intelfb0: framebuffer at 0xffffd700687fb000, size 1366x768, depth 32, stride 5504
kern error: 
[drm:(/usr/src/sys/external/bsd/drm2/dist/drm/i915/intel_fifo_underrun.c:230)cpt_set_fifo_underrun_reporting]
 *ERROR* uncleared pch fifo underrun on pch transcoder A
kern error: 
[drm:(/usr/src/sys/external/bsd/drm2/dist/drm/i915/intel_fifo_underrun.c:381)intel_pch_fifo_underrun_irq_handler]
 *ERROR* PCH transcoder A FIFO underrun
wsdisplay0 at intelfb0 kbdmux 1: console (default, vt100 emulation), using 
wskbd0
```

but, somehow still picks the correct native mode (1366x768) and everything is fine. The new DRM code, _does_ seem to find a VBT, but picks a non-native resolution (1024x768) in UEFI mode and the display gets messed up. In CSM mode, 1366x768 is correctly picked from the VBT.

I'll try to chase this down further when I have the time, but, somebody who
_knows_ this stuff would obviously make quicker progress.

-RVP

Reply via email to