Daniel Almeida, który pracuje nad rozwojem kodeków wideo w Collabora, opublikował wpis na liście mailingowej dla programistów Linux- wstępna implementacja sterownika Tyr dla procesorów graficznych ARM Mali wykorzystujących technologię Command Stream Frontend (CSF), takich jak Mali G310, G510 i G710. Kod sterownika jest napisany w języku Rust i zawiera nieco ponad 600 linii kodu. Prace nad sterownikiem Tyr są prowadzone wspólnie przez Collabora, Arm i Google.
Struktura do tworzenia nowego sterownika wykorzystuje komponenty abstrakcyjnego sterownika rust_platform_driver i sterownika Nova, opracowanego dla procesorów graficznych NVIDIA, napisanego w języku Rust i częściowo dodanego do jądra 6.15. Funkcjonalność interakcji z procesorem graficznym Mali jest przeniesiona z istniejącego sterownika DRM Panthor (Direct Rendering Manager), napisanego w języku C. uAPI sterownika Tyr jest identyczne z uAPI sterownika Panthor, co pozwala na używanie z nim istniejących komponentów przestrzeni użytkownika.
Technologia CSF, stosowana od 10. generacji procesorów graficznych Mali, wyróżnia się przeniesieniem niektórych funkcji sterownika na stronę oprogramowania układowego i wykorzystaniem nowego modelu organizacji wykonywania pracy na procesorze graficznym. W procesorach graficznych z interfejsem CSF zamiast modelu opartego na wysyłaniu łańcucha prac, używany jest model oparty na przepływie poleceń z harmonogramowaniem kolejki przepływu poleceń po stronie oprogramowania układowego. Aby zorganizować pracę harmonogramu, w procesor graficzny wbudowany jest oddzielny mikrokontroler Cortex-M7, a do wykonywania instrukcji CSF przewidziano specjalną jednostkę wykonywania poleceń (Command Execution Unit).
Funkcjonalność Tyr nadal pozostaje w tyle za sterownikiem Panthor, ale twórcy zamierzają stopniowo zmniejszać tę lukę, aż do osiągnięcia parytetu w możliwościach sterownika. Brakujące funkcje wymagają zintegrowania dodatkowych abstrakcji z kernelem w celu tworzenia sterowników w Rust, więc rozwój sterownika Tyr będzie zsynchronizowany z dodawaniem tych abstrakcji do kernela. Na przykład kernel nie ma jeszcze możliwości mapowania pamięci w sterownikach Rust dla GPU, które są rozwijane w zestawie poprawek GPUVM, który jeszcze nie został przyjęty.
Źródło: opennet.ru
