Представляете, решил написать статью и вдруг понял, что оно никому, кроме меня, не нужно! Ну вот кому интересно, как без VBIOS инициализировать intel’овскую встроенную графику? Никому! Под новостью о релизе свежего coreboot’а я отхватил пучок минусов, так как написал, что при должном стечении обстоятельств портирование новой материнской платы занимает около получаса, а в малом наборе портированных плат виноваты не разработчики coreboot’а. Ну не верят люди. Людям проще дальше считать, что это сложно. Проще дальше стонать от бремени UEFI и кушать тот же кактус. Хрен с ними…

Итак, у нас есть плата на intel sandybridge/ivybridge в индустриальном исполнении. Нет, не старый набор логики. Цикл жизни индастриала ~10 лет. Соответственно сейчас именно на этом наборе логики встречаются платы в индустриальном исполнении от известных производителей. На подобной промышленной материнке есть lvds, vga и один-два hdmi. Биос надо выпустить один раз, нам на него ещё контрольную сумму для МО по второму классу получать. Это стоит немерено денег. Но настройки lvds’а и порядок инициализации видеовыходов намертво прибит в VBIOS’е. Спасибо intel’у. То есть чтобы на одних изделиях (планшетах, например) выдавать на lcd-панель встроенную экран загрузки — нужен один билд, а чтобы на hdmi — другой. А ещё в intel’овском VBIOS’е определяется с какого из цифровых портов вывода надо взять I2C под VGA выход (он сам по себе не умеет в EDID, — неполноценный такой), там же прибить нестандартные разрешения, что очень надо сделать, если панель — широкоформатная. Конечно, инструментария для правки их VBIOS’а в свободном доступе нет. Хранят, мать их, никому не отдают!

Понятное дело, что положение дел не очень хорошее. От жизни такой, в рамках coreboot’а, основываясь на драйвере intel’а для linux KMS, запили написанный на ada проект libgxinit, предоставляющий «родную» («native») систему инициализации для чипов intel (пока лишь intel). Как это работает? Для начала в Kconfig описываются особенности платы, а нашем примере указано, что её можно иницилизировать посредством libgfxinit, указано, что I2C для выхода VGA берётся с выхода HDMI B, ну и что как «Internal» будет фигурировать вывод LVDS. Собственно, выдержка из Kconfig:

	select MAINBOARD_HAS_LIBGFXINIT
	select GFX_GMA_ANALOG_I2C_HDMI_B
	select GFX_GMA_INTERNAL_IS_LVDS

Ещё надо указать порядок и опции инициализации через в файле gma-mainboard.ads (на аде, ага):

with HW.GFX.GMA;
with HW.GFX.GMA.Display_Probing;

use HW.GFX.GMA;
use HW.GFX.GMA.Display_Probing;

private package GMA.Mainboard is

   -- For a three-pipe setup, bandwidth is shared between the 2nd and
   -- the 3rd pipe (if it's not eDP). Thus, probe ports that likely
   -- have a high-resolution display attached first, `Internal` last.

   ports : constant Port_List :=
     (DP2,
      DP3,
      HDMI1,
      HDMI2,
      HDMI3,
      Analog,
      Internal,
      others => Disabled);

end GMA.Mainboard;

И не забыть возможность инклуда из файла Makefile.inc:

romstage-y += gpio.c
ramstage-$(CONFIG_MAINBOARD_USE_LIBGFXINIT) += gma-mainboard.ads

Примеры взяты из конфигов платы kontron ktqm77. Но всё опробовано на рабочих платах другого производителя и на другом, пусть и intel’овском, чипсете из семейства sandybridge. Отлично всё работает, если нет необходимости в графическом режиме инициализации. То есть boot menu seabios’а или grub — всё отлично, а вот isolinux из диска с очередным военным BolgenOS’ом — пичаль бида. Ибо разработчики Astra Linux решили, что text mode уметь не надо. Только картинку в загрузчик, только пафос!

Справедливости ради стоит отметить, что у coreboot уже была опция «native graphics initialization» для всяких пристарелых плат на GM45. Применимо это было только для ноутбуков, так как инициализировался лишь lvds. И только как прописано в devicetree. Если у нас Core i_чего-нибудь и выводить надо на HDMI, например, то правим конфиги (как указано выше) и выбираем «Use the SPARK library `libgfxinit` for the native graphics». Ну или продолжаем мучатся и искать профиль своей материнки для Intel BMP Tool (эта та штука, которой можно править в т.ч. VBIOS).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

78 − = 77