Daniel Almeida, che lavora allo sviluppo di codec video presso Collega, ha pubblicato un messaggio sulla mailing list degli sviluppatori. Linux- L'implementazione iniziale del driver Tyr per le GPU ARM Mali che utilizzano la tecnologia Command Stream Frontend (CSF), come le Mali G310, G510 e G710. Il codice del driver è scritto in Rust e comprende poco più di 600 righe di codice. Lo sviluppo del driver Tyr è condotto congiuntamente da Collabora, Arm e Google.
Il framework per la creazione del nuovo driver utilizza componenti del driver astratto rust_platform_driver e del driver Nova, sviluppati per le GPU NVIDIA, scritti in Rust e parzialmente aggiunti al kernel 6.15. La funzionalità per l'interazione con la GPU Mali è stata trasferita dal driver DRM Panthor (Direct Rendering Manager) esistente, scritto in C. L'uAPI del driver Tyr è identica a quella del driver Panthor, il che consente di utilizzare con esso i componenti dello spazio utente esistenti.
La tecnologia CSF, utilizzata fin dalla decima generazione di GPU Mali, si distingue per lo spostamento di alcune funzioni del driver sul lato firmware e per l'utilizzo di un nuovo modello per l'organizzazione dell'esecuzione del lavoro sulla GPU. Nelle GPU con interfaccia CSF, invece di un modello basato sull'invio di una catena di comandi, viene utilizzato un modello basato su un flusso di comandi con schedulazione della coda del flusso di comandi sul lato firmware. Per organizzare il lavoro dello scheduler, un microcontrollore Cortex-M10 separato è integrato nella GPU e viene fornita una speciale unità di esecuzione dei comandi (Command Execution Unit) per eseguire le istruzioni CSF.
Le funzionalità di Tyr sono ancora in ritardo rispetto al driver Panthor, ma gli sviluppatori intendono ridurre gradualmente il divario fino a raggiungere la parità nelle capacità del driver. Le funzionalità mancanti richiedono l'integrazione di ulteriori astrazioni nel kernel per la creazione di driver in Rust, quindi lo sviluppo del driver Tyr sarà sincronizzato con l'aggiunta di queste astrazioni al kernel. Ad esempio, il kernel non dispone ancora delle funzionalità per il mapping della memoria nei driver Rust per GPU, che sono in fase di sviluppo nel set di patch GPUVM, che non è ancora stato adottato.
Fonte: opennet.ru
