Hi Jorge,
On 03.12.19 15:13, Jose Trujillo wrote:
This is my first try in booting coreboot on a LVDS panel. This is a Sandybridge-M system using video option ROM and VBT extracted from the original FW.
if you ever want to get open-source gfx init running instead, let me know. It would only need a few more lines to force a specific mode with libgfxinit, maybe that is enough. And as you run the VBIOS ROM within coreboot, you are probably not interested in a resident VBIOS, are you?
[JT]->[Nico] I would prefer to do it with just libgfxinit but I don't have a remote idea in how to initialize the LVDS panel. [JT]->[Nico] With a desktop monitor libgfxinit just work in this system but not a sign of activity on the panel. [JT]->[Nico] I would like to know how to initialize the panel with just coreboot, so, please show me how.
first, you have to
select GFX_GMA_INTERNAL_IS_LVDS
in your mainboard's Kconfig.
As you mentioned, your panel doesn't have an EDID EEPROM. Hence, you'll have to hard-code your panel's native mode. Below is a POC patch how that could look like (allows combinations with LVDS and additional auto- detected displays). You'll have to find your own panel's timings. Either from the datasheet, or you can try to fetch them from the VBT, e.g.
$ intel_vbt_decode lenovo/t430s/variants/t431s/data.vbt | grep timings Underscan support for VGA timings: no timings: 1600 1648 1680 1940 900 903 908 926 107800.00 (good)
Note: The clock is given in kHz in the VBT, but libgfxinit expects Hz. BPC (bits per color) is almost always 6 for LVDS panels, and I guess sync high/low doesn't matter for LVDS.
If you get that working, we can try to design a reasonable API for pre- defined modes. For instance, the `gma-mainboard.ads` could provide a set of Pipe_Configs and we'd only scan for additional displays. That would also be useful to skip EDID reading to speed things up ;)
Nico
diff --git a/src/drivers/intel/gma/hires_fb/gma-gfx_init.adb b/src/drivers/intel/gma/hires_fb/gma-gfx_init.adb index 1393784d7b..b828e4ba28 100644 --- a/src/drivers/intel/gma/hires_fb/gma-gfx_init.adb +++ b/src/drivers/intel/gma/hires_fb/gma-gfx_init.adb @@ -73,7 +73,32 @@ is
if success then ports := Mainboard.ports; - HW.GFX.GMA.Display_Probing.Scan_Ports (configs, ports); + HW.GFX.GMA.Display_Probing.Scan_Ports + (Configs => configs, + Ports => ports, + Max_Pipe => Secondary); -- limit to 2 auto-detected displays + + -- move auto-detected displays + configs (Tertiary) := configs (Secondary); + configs (Secondary) := configs (Primary); + -- and use primary pipe for LVDS + configs (Primary) := + (Port => Internal, + Framebuffer => Default_FB, -- will be overridden below + Cursor => Default_Cursor, + Mode => -- this matters + (H_Visible => 1920, + H_Sync_Begin => 2008, + H_Sync_End => 2052, + H_Total => 2185, + V_Visible => 1080, + V_Sync_Begin => 1084, + V_Sync_End => 1089, + V_Total => 1135, + Dotclock => 60 * 2185 * 1135, -- 60Hz * H_Total * V_Total + BPC => 6, + H_Sync_Active_High => False, + V_Sync_Active_High => False));
if configs (Primary).Port /= Disabled then for i in Pipe_Index loop