Даниел Алмейда, който работи по разработването на видео кодеци в Collabora, публикува в пощенския списък за разработчици Linux-ядра начальную реализацию драйвера Tyr для GPU ARM Mali, в которых применяется технология CSF (Сommand Stream Frontend), таких как Mali G310, G510 и G710. Код драйвера написан на языке Rust и насчитывает чуть больше 600 строк кода. Работа над драйвером Tyr ведётся совместно сотрудниками компаний Collabora, Arm и Google.
Рамката за създаване на новия драйвер използва компоненти на абстрактния драйвер rust_platform_driver и драйвера Nova, разработен за графични процесори NVIDIA, написан на Rust и частично добавен към ядрото 6.15. Функционалността за взаимодействие с графичния процесор Mali е портирана от съществуващия DRM драйвер Panthor (Direct Rendering Manager), написан на C. uAPI на драйвера Tyr е идентичен с uAPI на драйвера Panthor, което позволява използването на съществуващи компоненти на потребителското пространство с него.
Технологията CSF, използвана от 10-то поколение графични процесори Mali, се отличава с преместването на някои функции на драйвера към страната на фърмуера и използването на нов модел за организиране на изпълнението на работата на графичния процесор. В графичните процесори с CSF интерфейс, вместо модел, базиран на изпращане на верига от задачи, се използва модел, базиран на поток от команди, с планиране на опашката от команди от страната на фърмуера. За организиране на работата на планировчика, в графичния процесор е вграден отделен микроконтролер Cortex-M7, а за изпълнение на CSF инструкции е предвиден специален блок за изпълнение на команди (Command Execution Unit).
Функционалността на Tyr все още изостава от драйвера на Panthor, но разработчиците възнамеряват постепенно да намалят разликата, докато се постигне паритет във възможностите на драйверите. Липсващите функции изискват допълнителни абстракции, които да бъдат интегрирани в ядрото, за да се създадат драйвери в Rust, така че разработването на драйвера на Tyr ще бъде синхронизирано с добавянето на тези абстракции към ядрото. Например, ядрото все още няма възможности за картографиране на паметта в драйвери на Rust за графични процесори, които се разработват в пакета за пачове GPUVM, който все още не е приет.
Източник: opennet.ru
