Dear Nico:
The libgfxinit solution works! Thank you very much....
What to do next?
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 ;)
Jose Trujillo.
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
coreboot mailing list -- coreboot@coreboot.org To unsubscribe send an email to coreboot-leave@coreboot.org