Получение платформы Arm, которая работает с основной версией Linux, может занять несколько лет, поскольку работа часто выполняется третьими сторонами, а поставщик микросхем имеет собственное дерево Linux. Это означает, что во многих случаях программное обеспечение будет готово, когда платформа устареет или скоро устареет. Было бы неплохо начать разработку программного обеспечения до того, как будет готово аппаратное обеспечение. Это может показаться безумной идеей, но это то, что сделала команда Collabora, чтобы добавить поддержку графических процессоров Arm «Valhall» (Mali-G57, Mali-G78) в драйвер графического процессора Panfrost с открытым исходным кодом.
В результате команде потребовалось всего несколько дней, чтобы успешно пройти тесты с использованием структур данных, подготовленных их драйвером Mesa, и шейдеров, скомпилированных их компилятором Valhall после получения фактического оборудования благодаря работе, проделанной за последние шесть месяцев. Так как именно они достигли этого подвига?
Для начала, вернемся на несколько месяцев назад. В июле прошлого года Collabora объявила, что они реконструировали набор инструкций Valhall графического процессора Mali-G78 с использованием смартфона Samsung Galaxy S21. Чего ждать? Разве мы только что не сказали, что они работают без оборудования Mali-G78? Правильно, но они не смогли установить mainline Linux и свой драйвер графического процессора на устройство, так как оно не было рутировано. Они просто использовали его для обратной разработки инструкций и проведения некоторого тестирования, изменяя скомпилированные шейдеры и структуры данных графического процессора, чтобы экспериментировать с отдельными битами. Этого шага можно было бы избежать, если бы была доступна документация Mali G78.
Алисса Розенцвейг, инженер по графическому программному обеспечению Collabora, продолжила свою работу по разработке программного обеспечения, и в ноябре 2021 г. она написала компилятор Valhall и провела достаточную обратную разработку, чтобы написать драйвер, но у нее все еще не было оборудования Linux для тестирования кода. Поэтому она написала модульные тесты для всего, от упаковки инструкций до оптимизации, и сумела решить несколько ошибок в процессе, просто используя свою машину для разработки под управлением Linux.
Следующим шагом было использование библиотеки drm-shim с поддельными драйверами ядра GEM в пользовательском пространстве для CI (непрерывной интеграции), используемой в проекте Mesa. Драйвер drm-shim заставляет систему думать, что у него есть настоящий графический процессор, но ничего не делает, кроме приема системных вызовов от графических драйверов пользовательского пространства. Это не эмулятор, и его нельзя использовать для проверки функциональности, но он может помочь найти недостатки в работе программы. Она смогла запустить большое количество тестов на Apple M1 под управлением Linux после исправления ошибки (подсказка: размер страницы 16 КБ вместо 4 КБ), включая компиляцию тысяч шейдеров в секунду с помощью компилятора Valhall и запуск теста на соответствие OpenGL ES от Khronos. Suite для выявления любых проблем.
Collabora также попыталась определить различия между Valhall и более ранними графическими процессорами Arm Mali, такими как Bifrost, и повторно использовать большую часть кода драйвера Panfrost и изменить только ту часть кода, где были обнаружены различия. Например, набор инструкций Valhall очень похож на старый набор инструкций Bifrost, поэтому компилятор Valhall встроен в существующий компилятор Bifrost в качестве дополнительного бэкенда. Алисса объясняет:
Общие проходы компилятора, такие как выбор инструкций и выделение регистров, «просто работают» в Valhall, даже несмотря на то, что они были разработаны и отлажены для Bifrost.
Ранее в этом месяце (январь 2022 г.) Collabora наконец получила Chromebook с системой на кристалле MediaTek MT8192 (Kompanio 820) (с графическим процессором Mali-G57 MC5) и последовательным кабелем. После исправления им удалось запустить основной Linux на плате. USB, хотя дисплей пока не работает. Графический процессор автоматически отключается в MT8192, по-видимому, из-за ошибки кремния, но его можно включить после отключения «Accelerator Coherency Port» (ACP). Как обсуждалось выше, тогда потребовалось всего несколько дней, чтобы успешно пройти сотни тестов на реальном оборудовании благодаря их подготовительной работе. Теперь Collabora ожидает, что Panfrost будет поддерживать GPU Valhall «вовремя для конечных пользователей». Вы можете прочитать полную историю в блоге Collabora.
Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.