Issue #538 has been updated by Brian L.

Nico Huber wrote in #note-6:
> Patrick Rudolph wrote in #note-4:
> > UEFI firmware patches the VBT, while coreboot does not. Maybe a wrong 
> > version was checked in causing this issue?
> 
> This could indeed be part of the problem:
> ```
> $ intel_vbt_decode --file=src/mainboard/lenovo/x230/variants/x230/data.vbt | 
> grep -1 LFP\ 1
>         Child device info:
>                 Device handle: 0x0008 (LFP 1 (eDP))
>                 Device type: 0x1022 (LFP)
> $ intel_vbt_decode --file=src/mainboard/lenovo/x230/variants/x230/data.vbt | 
> grep -A16 LVDS\ panel
> BDB block 42 (1264 bytes) - LVDS panel data block:
>         Panel 2 *
>                 1024x768 clock 65000000
>                 info:
>                   LVDS: 0x00000300
>                   PP_ON_DELAYS: 0x009609c4
>                   PP_OFF_DELAYS: 0x012c07d0
>                   PP_DIVISOR: 0x00270f06
>                   PFIT: 0x00414000
>                 timings: 1024 1048 1184 1344 768 771 777 806 65000.00 (good)
>                 PnP ID:
>                   Mfg name: MS_ (0x7f36)
>                   Product code: 3
>                   Serial: 3
>                   Mfg week: 0
>                   Mfg year: 2002
>                 Panel name: LFP_PanelName
> ```
> It says the panel is connected over eDP. This might make it harder for Linux 
> to find the EDID. And there's a 1024x768 set. Overall this VBT looks more 
> like Intel's template than what Lenovo intended.
> 
> It can't explain the whole problem, though, because nobody with the stock 
> panel seems to have this issue and the VBT file has been around for 6 years 
> already.
> 
> A good step to gather more information may be to return to the vendor BIOS 
> and confirm that Linux can directly read the EDID from hardware (if you 
> haven't yet), and to fetch the active VBT. For the former I would use 
> `i2cdump`, e.g.:
> ```
> $ # to find the i2c bus number
> $ grep panel /sys/class/i2c-adapter/i2c-?/name
> /sys/class/i2c-adapter/i2c-2/name:i915 gmbus panel
> $ # so on my system it's i2c-*2*
> $ sudo modprobe i2c-dev
> $ sudo i2cdump -y 2 0x50 # 2 is the bus, 0x50 the EDID address
> No size specified (using byte-data access)
>      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
> 00: XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX    XXXXXXXXXXXXXXXX
> ...
> ```
> The VBT can be fetched from `debugfs`:
> ```
> $ # optionally, might have to mount debugfs if it isn't already:
> $ sudo mount -t debugfs debugfs /sys/kernel/debug
> $ sudo cp /sys/kernel/debug/dri/0/i915_vbt /somewhere/safe/
> ```

Thanks Patrick and Nico. Please let me provide the additional information.  

  - No UEFI is used on this system. It has always been some coreboot flavor 
(seabios or linuxboot) booting into grub or kexec'ing linux, respectively.
  - I have already verified that going back to vendor bios allows the screen to 
work at boot and the EDID to be visible in linux, then returning to coreboot 
libgfxinit the screen will stop working at boot and no EDID is available
  - There is no misconfiguration on my end, the problem appeared without making 
any changes to my bios, it occured after using a thinkpad dock for the first 
time and it has never behaved properly since, despite not using the dock 
anymore and having done dozens of full 12mb flashes since then
  - The data.vbt i've been using is the one provided by skulls and heads, 
respectively and it has the same checksum.
  - Whether I boot with vga blob (working) or with libgfxinit (not working), 
cbmem log shows `GMA: Found valid VBT in CBFS`  

The following coreboot flavors are properly **working** AFAICT:
  - Skulls 1.08 - (VGA Blob + SeaBios) - Based on Coreboot commit aa1efece74
  - Skulls 1.10 - (VGA Blob + SeaBios) - Based on Coreboot commit 04d6eb1eae  


The following coreboot flavors are **not working**:
  - Skulls 1.08 - (libgfxinit + SeaBios) - Based on Coreboot commit aa1efece74
  - Skulls 1.10 - (libgfxinit + SeaBios) - Based on Coreboot commit 04d6eb1eae

**Another** potentially helpful clue, **however** I am a bit cautious it may be 
a red herring:
Heads (coreboot w/ Linuxboot payload) does **not** work using VGA blob. I say 
this is a red herring because I don't know if it is actually supposed to work. 
Heads uses libgfxinit by default, and I see no one discussing using VGA blobs 
instead. However there are some (T530/W530, I think) supported laptops with 
dGPUs which do have configs using VGA blobs, so I would assume that x230 
built-in graphics vga blob would also work, as long as the correct menuconfig 
changes were made (which I'm 99% confident I did, as I've done it for vanilla 
coreboot plenty of times and I have a pretty good understanding of how 
everything works, but of course I am human and also not any type of coreboot 
expert, so there is a small chance it is misconfig).

I really don't think I can voluntarily go back to vendor bios again to debug, 
as I am starting to be afraid of the health of the eeprom pins and the smd 
components near them, and so I'd prefer to only have to external flash in 
emergency situations.  

Is there a config change i can make to the VBT to test? I do have the program 
that the "x230 Full HD Mod" users were using and I am somewhat familiar with 
using it to make changes.
  - 

----------------------------------------
Bug #538: [Soft Brick] x230 Dock Causes Internal Display to "Permanently" 
Malfunction
https://ticket.coreboot.org/issues/538#change-1838

* 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.



-- 
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
https://ticket.coreboot.org/my/account
_______________________________________________
coreboot mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to