Daniel Almeida, que traballa no desenvolvemento de códecs de vídeo en Collabora, publicou na lista de correo para desenvolvedores Linux- a implementación inicial do controlador Tyr para as GPU ARM Mali que utilizan a tecnoloxía Command Stream Frontend (CSF), como as Mali G310, G510 e G710. O código do controlador está escrito en Rust e consta de pouco máis de 600 liñas de código. O traballo no controlador Tyr está a ser realizado conxuntamente por Collabora, Arm e Google.
A estrutura para crear o novo controlador emprega compoñentes do controlador abstracto rust_platform_driver e do controlador Nova, desenvolvidos para GPU NVIDIA, escritos en Rust e engadidos parcialmente ao kernel 6.15. A funcionalidade para interactuar coa GPU Mali está portada do controlador DRM Panthor (Direct Rendering Manager) existente, escrito en C. A uAPI do controlador Tyr é idéntica á uAPI do controlador Panthor, o que permite usar compoñentes do espazo de usuario existentes con ela.
A tecnoloxía CSF, empregada dende a décima xeración de GPU Mali, destaca por trasladar algunhas funcións do controlador ao lado do firmware e empregar un novo modelo para organizar a execución do traballo na GPU. Nas GPU cunha interface CSF, en lugar dun modelo baseado no envío dunha cadea de traballos, utilízase un modelo baseado nun fluxo de comandos coa programación da cola de fluxo de comandos no lado do firmware. Para organizar o traballo do programador, incorpórase un microcontrolador Cortex-M10 separado na GPU e ofrécese unha unidade especial de execución de comandos (Command Execution Unit) para executar instrucións CSF.
A funcionalidade de Tyr aínda está por detrás do controlador Panthor, pero os desenvolvedores pretenden reducir gradualmente a diferenza ata que se alcance a paridade nas capacidades do controlador. As características que faltan requiren que se integren abstraccións adicionais no kernel para crear controladores en Rust, polo que o desenvolvemento do controlador Tyr sincronizarase coa adición destas abstraccións ao kernel. Por exemplo, o kernel aínda non ten as capacidades para o mapeo de memoria nos controladores Rust para GPU, que se están a desenvolver no conxunto de parches GPUVM, que aínda non foi adoptado.
Fonte: opennet.ru
