Daniel Almeida, che si occupa dello sviluppo di codec video presso Collabora, ha pubblicato nella mailing list degli sviluppatori del kernel Linux una prima implementazione del driver Tyr per GPU ARM Mali, che utilizza la tecnologia CSF (Command Stream Frontend), come Mali G310, G510 e G710. Il codice del driver è scritto in Rust e conta poco più di 600 righe di codice. Lo sviluppo del driver Tyr è collaborativo, coinvolgendo dipendenti di Collabora, Arm e Google.
Come base per la creazione del nuovo driver sono stati utilizzati componenti del driver astratto rust_platform_driver e del driver Nova, sviluppato per GPU NVIDIA, scritto in Rust e parzialmente incluso nel kernel 6.15. La funzionalità per l'interazione con GPU Mali è stata portata dal driver DRM esistente Panthor (Direct Rendering Manager), scritto in C. L'uAPI del driver Tyr è identica a quella del driver Panthor, consentendo così l'utilizzo di componenti esistenti nell'utente.
La tecnologia CSF, utilizzata a partire dalla decima generazione di GPU Mali, è notevole per il trasferimento di alcune funzionalità del driver al firmware e per l'adozione di un nuovo modello di organizzazione dell'esecuzione delle operazioni sulla GPU. Nelle GPU con interfaccia CSF, invece del modello basato sull'invio di una catena di lavorazioni, viene utilizzato un modello basato sul flusso di comandi con pianificazione della coda del flusso di comandi nel firmware. Per organizzare il lavoro dello scheduler, la GPU è dotata di un microcontrollore Cortex-M7 separato, e per l'esecuzione delle istruzioni CSF è previsto un blocco speciale per l'esecuzione dei comandi (Command Execution Unit).
Le funzionalità di Tyr sono ancora inferiori a quelle del driver Panthor, ma gli sviluppatori intendono gradualmente ridurre il divario fino a raggiungere la parità nelle capacità dei driver. Le funzionalità mancanti richiedono l'integrazione di ulteriori astrazioni nel kernel per la creazione di driver in Rust, pertanto lo sviluppo del driver Tyr sarà sincronizzato con l'aggiunta di queste astrazioni nel kernel. Ad esempio, nel kernel mancano attualmente le possibilità per il mapping della memoria nei driver Rust per GPU, sviluppati in un set di patch GPUVM ancora non approvato.
Fonte: opennet.ru
