Daniel Almeida, joka työskentelee videokoodekkien kehittämisen parissa Collaboralla, julkaisi viestin kehittäjien postituslistalla Linux- Tyr-ajurin alustava toteutus ARM Mali -näytönohjaimille, jotka hyödyntävät Command Stream Frontend (CSF) -teknologiaa, kuten Mali G310, G510 ja G710. Ajurikoodi on kirjoitettu Rust-kielellä ja se käsittää hieman yli 600 riviä koodia. Tyr-ajurin kehittämistä tekevät yhteistyössä Collabora, Arm ja Google.
Uuden ajurin luomiseen käytetty viitekehys käyttää abstraktin rust_platform_driver-ajurin ja NVIDIA-näytönohjaimille kehitetyn Nova-ajurin komponentteja, jotka on kirjoitettu Rustilla ja osittain lisätty 6.15-ytimeen. Mali-näytönohjaimen kanssa vuorovaikutukseen tarvittavat toiminnot on siirretty olemassa olevasta Panthor (Direct Rendering Manager) DRM -ajurista, joka on kirjoitettu C-kielellä. Tyr-ajurin uAPI on identtinen Panthor-ajurin uAPI:n kanssa, mikä mahdollistaa olemassa olevien käyttäjätilan komponenttien käytön sen kanssa.
Mali-näytönohjainten 10. sukupolvesta lähtien käytetty CSF-teknologia on merkittävä siinä, että se on siirtänyt joitakin ajuritoimintoja laiteohjelmistopuolelle ja käyttänyt uutta mallia työn suorittamisen järjestämiseen näytönohjaimella. CSF-rajapinnalla varustetuissa näytönohjaimissa käytetään komentokulkuun perustuvaa mallia työjonon lähettämiseen perustuvan mallin sijaan, jossa komentokulkujonon ajoitus tapahtuu laiteohjelmistopuolella. Aikatauluttajan työn järjestämiseksi näytönohjaimeen on sisäänrakennettu erillinen Cortex-M7-mikrokontrolleri, ja CSF-käskyjen suorittamiseen on erityinen komentojen suoritusyksikkö (Command Execution Unit).
Tyrin toiminnallisuus on edelleen Panthor-ajurin jäljessä, mutta kehittäjät aikovat vähitellen pienentää kuilua, kunnes ajuriominaisuuksien pariteetti saavutetaan. Puuttuvat ominaisuudet vaativat lisäabstraktioiden integrointia ytimeen ajurien luomiseksi Rustissa, joten Tyr-ajurin kehitys synkronoidaan näiden abstraktioiden lisäämisen kanssa ytimeen. Esimerkiksi ytimessä ei vielä ole ominaisuuksia muistin yhdistämiseen Rust-ajureissa GPU:ille, joita kehitetään GPUVM-korjauspaketissa, jota ei ole vielä otettu käyttöön.
Lähde: opennet.ru
