Daniel Almeida, der arbejder med udvikling af video-codec hos Collabora, har skrevet et opslag på udviklernes mailingliste. Linux- den første implementering af Tyr-driveren til ARM Mali GPU'er, der bruger Command Stream Frontend (CSF)-teknologi, såsom Mali G310, G510 og G710. Driverkoden er skrevet i Rust og omfatter lidt over 600 linjer kode. Arbejdet med Tyr-driveren udføres i fællesskab af Collabora, Arm og Google.
Frameworket til at oprette den nye driver bruger komponenter fra den abstrakte rust_platform_driver-driver og Nova-driveren, udviklet til NVIDIA GPU'er, skrevet i Rust og delvist tilføjet til 6.15-kernen. Funktionaliteten til at interagere med Mali GPU'en er porteret fra den eksisterende Panthor (Direct Rendering Manager) DRM-driver, skrevet i C. Tyr-driverens uAPI er identisk med Panthor-driverens uAPI, som tillader brug af eksisterende brugerområdekomponenter med den.
CSF-teknologien, der har været brugt siden 10. generation af Mali GPU'er, er kendt for at flytte nogle driverfunktioner til firmwaresiden og bruge en ny model til at organisere arbejdsudførelsen på GPU'en. I GPU'er med en CSF-grænseflade bruges der i stedet for en model baseret på at sende en arbejdskæde en model baseret på et kommandoflow med planlægning af kommandoflowkøen på firmwaresiden. For at organisere schedulerens arbejde er en separat Cortex-M7-mikrocontroller indbygget i GPU'en, og en speciel kommandoudførelsesenhed (Command Execution Unit) er tilvejebragt for at udføre CSF-instruktioner.
Tyrs funktionalitet halter stadig bagefter Panthor-driveren, men udviklerne har til hensigt gradvist at reducere forskellen, indtil der opnås paritet i driverfunktioner. De manglende funktioner kræver, at yderligere abstraktioner integreres i kernen for at skabe drivere i Rust, så udviklingen af Tyr-driveren vil blive synkroniseret med tilføjelsen af disse abstraktioner til kernen. For eksempel har kernen endnu ikke mulighederne for hukommelseskortlægning i Rust-drivere til GPU'er, som udvikles i GPUVM-patchsættet, som endnu ikke er blevet implementeret.
Kilde: opennet.ru
