Issue #538 has been updated by Nico Huber.
Brian L wrote in #note-10:
Yup, so I'm like 99% sure now. Coreboot does not initialize my internal display whether using libgfxinit or vga blob. However, if SeaBios runs the vgablob, then it does work
Sooooo... i just found out that if I change the VGA_BIOS_ID from "8086,0166" (the default that coreboot uses for pretty much all lenovo laptops for years now and has always worked fine for me) to "8086,0106"... coreboot properly loads the option rom, i get a bios screen, and i get an edid now!!!! what the heck??
There are plenty of things that can go wrong with configurations with VBIOS blobs. The `VGA_BIOS_ID` thing is just one of them. `VGA_BIOS_ID` decides how the VBIOS file in CBFS is called. This is important when coreboot/SeaBIOS try to find a matching file for the hardware ID that is encountered at runtime. Because the VBIOS blob supports multiple IDs, coreboot first tries to find an exact match, and if that doesn't work, falls back to "8086,0106" (that's hardcoded in C code for Sandy and Ivy Bridge iGPUs). SeaBIOS has its own mapping mechanism but that's barely ever configured, so people tend to enter the exact ID for `VGA_BIOS_ID`.
It's hard to tell without seeing the whole `.config`, but assuming you haven't also switched the payload, you are in a classic coreboot and SeaBIOS competing to run the VBIOS situation: SeaBIOS always tries to run it. If you run it in coreboot first, it runs twice which often doesn't work even if the first run succeeded. Generally, never use `VGA_ROM_RUN` with a SeaBIOS payload. If this is what you tried, the "8086,0106" would work because then SeaBIOS couldn't find the file anymore and the VBIOS only runs once.
The card0/1 thing might just be the boot framebuffer showing up as `card0`. You can check where it points to: ``` $ ls -l /sys/class/drm/card0 ```
Nothing of this explains the docking issue and why libgfxinit and Linux fail to initialize graphics even though the EDID can be read later (your i2cdump shows that the EDID is perfectly fine). If you want to investigate this further, two ideas: Check if the EDID can still be read with `i2cdump` when the panel is *off*, e.g. with the lid *closed*. Normally, it should work, but your panel might be unusually wired, or something could just have broken physically. ``` # i2cdump -y 3 0x50 # sleep 10; i2cdump -y 3 0x50 # close lid, open again in 15s, compare ``` The other thing would be to check where exactly libgfxinit fails. You can build with `CONFIG_DEBUG_ADA_CODE=y` to get traces of it, then `cbmem -c` should give a lot more information.
---------------------------------------- Bug #538: [Soft Brick] x230 Dock Causes Internal Display to "Permanently" Malfunction https://ticket.coreboot.org/issues/538#change-1842
* Author: Brian L * Status: New * Priority: High * Target version: none * Start date: 2024-05-14 * Affected hardware: Lenovo x230 ---------------------------------------- Environment: - Lenovo x230 - Stock screen replaced with Pixel Qi (not sure if relevant) (plug & play LVDS) - Coreboot using Heads (coreboot + linuxboot) - Official lenovo docking station connected to external monitor via DisplayPort
Bug Trigger: Using Heads/coreboot fine for years with my Pixel Qi screen modded x230. I then bought a Lenovo docking station. Booted up, everything worked fine. Disconnected from dock, booted up, and there was no bios screen. Screen did not turn on until taken over by Linux Kernel. Once in userspace, wayland could no longer identify the monitor as a Pixel Qi or its proper resolution. EDID is blank. Booting with docking station allows bios to show on external display.
Restarting did *not* fix the issue, reflashing heads did *not* fix the issue, flashing skulls (coreboot + seabios) did *not* fix the issue.
Flashing stock bios *did fix* the issue. I can now see BIOS screen and get proper EDID in userspace whether on the dock or not. *However* reflashing coreboot again, even coming from stock bios working state, and I immediately now no longer get a BIOS screen or EDID, even without ever introducing the dock again. Essentially now bricked with anything but stock bios.