Bug #670
openLenovo M720q: Incorrect DDI B mapping in VBT prevents DisplayPort detection
0%
Description
Hardware and software¶
- System: Lenovo ThinkCentre M720q Tiny
- CPU: Intel Core i5-8400T
-
GPU: Intel UHD Graphics 630 (
8086:3e92) -
Motherboard PCB identifier:
IQ3X0IL -
PCB revision:
1.0 - Identification method: Physical inspection of the motherboard silkscreen
- Physical display outputs tested: DisplayPort and HDMI
- Coreboot: 26.09
- Payload: MrChromebox EDK II
-
OS: Arch Linux, using the
i915DRM driver -
VBT:
src/mainboard/lenovo/m720q_m920q/data.vbt
The PCB identifier and revision were confirmed directly from the motherboard rather than SMBIOS, since the original DMI information is no longer available after replacing the Lenovo firmware with Coreboot.
Problem¶
The VBT included with the M720q/M920q mainboard describes EFP1 (device handle 0x0004) as a DVI/HDMI output on DDI B.
However, on my M720q, the physical DisplayPort connector is connected to DDI B.
This was confirmed by monitoring hotplug events in Linux:
- Connecting/disconnecting the physical DisplayPort cable triggers HPD events on DDI B.
- With the original VBT,
i915treats DDI B as HDMI, creates an HDMI connector, and attempts DDC/GMBUS communication. - The connected DisplayPort monitor is not detected correctly.
VBT correction¶
I modified the EFP1 child-device entry in BDB block 2 (General Definitions):
| Field | Original | Modified |
|---|---|---|
| Device handle |
0x0004 (EFP1) |
Unchanged |
| Device type |
0x60d2 (DVI-D) |
0x68c6 (DisplayPort) |
| DVO port |
0x01 (HDMI-B) |
0x07 (DP-B) |
| AUX channel | 0x00 |
0x10 (AUX-B) |
The VBT checksum was recalculated. The VBT size and all other child-device entries were preserved.
The resulting VBT was validated using intel_vbt_decode.
Verification¶
I first tested the modified VBT without reflashing Coreboot, using the Linux i915.vbt_firmware module parameter.
The modified VBT was loaded successfully and verified against the kernel's i915_vbt debugfs data.
With this change:
- Linux creates
DP-1on DDI B. - AUX-B communication works and DPCD reads succeed.
- DisplayPort link training succeeds.
- The monitor is detected and can display an image.
I then included the modified data.vbt in Coreboot, rebuilt and flashed the BIOS region.
Results with libgfxinit and corrected VBT¶
- EDK II over DisplayPort: Working.
- EDK II over HDMI: Working.
- Linux over HDMI: Working without intervention.
- Linux over DisplayPort at 1280×720: Working without intervention.
- Linux over DisplayPort at 3840×2160: The initial modeset can result in a black screen. A subsequent KMS modeset to 3840×2160 at 59.94 Hz restores the image.
Results with FSP GOP and corrected VBT¶
- Linux detects both physical outputs correctly.
- Both outputs can display an image after a hotplug event or an additional modeset.
- No visible EDK II output was obtained.
Separate high-resolution modeset issue¶
On a Samsung Odyssey G95NC running in Picture-in-Picture mode, the initial Linux modeset at 3840×2160 may leave the DisplayPort output black.
The DRM logs show successful DisplayPort link training followed by a CPU pipe A FIFO underrun.
A manual modeset using:
modetest -M i915 -s 111:3840x2160-59.94
restores the image, while the 60 Hz mode tested did not.
The monitor advertises multiple 3840×2160 modes with different timing parameters. This may be a separate monitor/EDID/i915 compatibility issue and does not appear necessary to reproduce the VBT port-mapping problem.
Questions¶
- Is the supplied VBT expected to describe all M720q/M920q hardware variants?
- Could the existing EFP1 configuration be incorrect for the M720q's physical DisplayPort wiring?
- Would a corrected VBT, a board-specific override, or a documentation update be the preferred solution?
I can provide the original and modified VBT decode output, exact byte-level changes, Coreboot configuration, CBMEM logs and Linux DRM debug logs.
I have not verified this correction on other M720q/M920q hardware variants.
Files
MD Updated by Matt DeVillier about 14 hours ago
The FSP GOP not producing pre-OS output with the modified VBT tells me something is wrong there. Same behavior with the original one? What's the BDB version of the VBT?
JS Updated by Johannes Sjölund about 7 hours ago
Thanks for taking a look!
Yes, I saw the same behavior with the original, unmodified VBT: FSP GOP did not produce any visible pre-OS output on either HDMI or DisplayPort.
Coreboot reported successful FSP-S initialization (status=0x00000000) and framebuffer information (1024x768 at 0xd0000000), but EDK II remained black.
The VBT has BDB version 212. The only changes were the EFP1 device type, DVO port and AUX channel, plus the recalculated checksum.
For comparison, switching to libgfxinit with the modified VBT produces working pre-OS output on both HDMI and DisplayPort. Linux also works on both outputs, although DisplayPort has a separate modesetting issue at 3840x2160 with my monitor.
So the lack of pre-OS output with FSP GOP was present before the VBT modification, and appears to be a separate issue.
I'm happy to provide logs or test additional configurations if that would help.
MD Updated by Matt DeVillier about 6 hours ago
- File candidate_dp_b_hdmi_c_padded.vbt candidate_dp_b_hdmi_c_padded.vbt added
- File candidate_dp_b_hdmi_c_padded_228.vbt candidate_dp_b_hdmi_c_padded_228.vbt added
Thanks for the detailed report and for validating the EFP1 change.
VBT source
The in-tree data.vbt matches one of the 19 (!!) VBTs from Lenovo’s M1UKT79A image (m1ujy79usa.exe / imageM1U.ROM) byte-for-byte.
coreboot only includes one of them — EFP1 as DVI-D on HDMI-B with no AUX — which is the wrong one for your M720q. Another Lenovo SKU in the same image has EFP1 as DisplayPort/HDMI/DVI on DP-B + AUX-B and EFP2 as DVI-D on HDMI-C, which matches your HPD findings.
BDB vs CFL FSP
The Lenovo/in-tree VBTs are BDB 212. The Coffee Lake FSP sample VBT is BDB 228. That gap is not automatically fatal, but these tables are older than what the FSP package ships as a reference. They also keep fixed boot mode 1024x768 and a phantom LFP1 entry, which fits FSP GOP reporting a 1024x768 framebuffer while leaving both outputs black.
Path forward
I'm attaching 2 diff VBTs here:
- a DP-B + HDMI-C one extracted from the lenovo firmware, with LFP1 and the fixed boot mode removed
- same as the above, but migrated to the 228 BDB that the CFL FSP likely wants.
Please test both and LMK how they work for you with both Linux and FSP GOP on both outputs if possible