Native gfx init: Difference between revisions
(2 intermediate revisions by the same user not shown) | |||
Line 26: | Line 26: | ||
="C" native graphics init on pre haswell platforms= | ="C" native graphics init on pre haswell platforms= | ||
On some pre Haswell Intel platforms the graphics can be initialized using C code, but only on the internal LVDS connector. | On some pre Haswell Intel platforms the graphics can be initialized using C code, but '''only on the internal LVDS''' connector. | ||
=Limitations= | =Limitations= | ||
Line 32: | Line 32: | ||
'''Note:''' For some platforms this can be worked around. See [https://en.wikipedia.org/wiki/Coreboot/VBT Video Bios Tables] for more information. | '''Note:''' For some platforms this can be worked around. See [https://en.wikipedia.org/wiki/Coreboot/VBT Video Bios Tables] for more information. | ||
* No resolution switching at runtime (affects Windows installer) | * No resolution switching at runtime (affects Windows installer) | ||
==Closed source payloads/OS== | |||
Some payload and OS might not work at all, as they depend on resolution switching or text mode. Those cannot be fixed. You have to use a proper VGA option ROM. | |||
==Opensource payloads/OS== | |||
If you find a software that doesn't work well, you can try to parse the coreboot tables to find the graphics mode or framebuffer in use. | |||
List of software that is already aware of coreboot's framebuffer: | |||
* Libpayload | |||
* SeaBIOS | |||
* TianoCore | |||
* GRUB | |||
* Linux | |||
=Benefits= | =Benefits= |
Latest revision as of 18:38, 24 April 2018
Native graphics init
Is a driver, which is written in a high level language and open source implementation to initialize the graphics hardware on a platform. It might implement only a subset of possible resolution, a subset of possible color depth and work only on a subset of available connectors.
Even though coreboot can run VGA Option ROMs, those aren't called native graphics init.
Short forms
- NGI : native graphics initialization
- GFX init : graphics initialization
- VBT: Video Bios Tables (Intel specific)
Usage in coreboot
Usually the full color depth and native screen resolution is used. If (x86) VGA hardware is present, one can not assume that it has been initialized at all. A payload should either initialize the GPU on its own or use coreboot tables to gather information about the current state. The payload can not determine if the information provided in coreboot tables is still valid. A bootloader might have changed the GPUs current state.
Libgfxinit in coreboot
libgfxinit is a graphics initialization (aka modesetting) library for embedded environments. It currently supports only Intel hardware, more specifically the Intel Core processor line.
It can query and set up most kinds of displays based on their EDID information. You can, however, also specify particular mode lines.
libgfxinit is written in SPARK, an Ada subset with formal verifica- tion aspects. Absence of runtime errors can be proved automatically with SPARK GPL 2016.
Note: You have to compile the coreboot toolchain with ADA support to use libgfxinit !
"C" native graphics init on pre haswell platforms
On some pre Haswell Intel platforms the graphics can be initialized using C code, but only on the internal LVDS connector.
Limitations
- VGA Option ROMs contain configuration data, that are not available if native graphics initialization is used. OS that rely on those configuration data won't work as expected.
Note: For some platforms this can be worked around. See Video Bios Tables for more information.
- No resolution switching at runtime (affects Windows installer)
Closed source payloads/OS
Some payload and OS might not work at all, as they depend on resolution switching or text mode. Those cannot be fixed. You have to use a proper VGA option ROM.
Opensource payloads/OS
If you find a software that doesn't work well, you can try to parse the coreboot tables to find the graphics mode or framebuffer in use. List of software that is already aware of coreboot's framebuffer:
- Libpayload
- SeaBIOS
- TianoCore
- GRUB
- Linux
Benefits
- No code execution at runtime
- No code BLOBs
- Faster - As code isn't running in real mode
- Debugging output