Daniel Almeida, que trabaja en el desarrollo de códecs de vídeo en Collabora, publicó en la lista de correo de desarrolladores. Linux- Implementación inicial del controlador Tyr para GPU ARM Mali que utilizan la tecnología Command Stream Frontend (CSF), como las Mali G310, G510 y G710. El código del controlador está escrito en Rust y consta de poco más de 600 líneas. Collabora, Arm y Google trabajan conjuntamente en el desarrollo del controlador Tyr.
El marco para crear el nuevo controlador utiliza componentes del controlador abstracto rust_platform_driver y del controlador Nova, desarrollados para GPU NVIDIA, escritos en Rust y parcialmente añadidos al kernel 6.15. La funcionalidad para interactuar con la GPU Mali se ha transferido del controlador DRM Panthor (Direct Rendering Manager) existente, escrito en C. La uAPI del controlador Tyr es idéntica a la del controlador Panthor, lo que permite usar componentes de espacio de usuario existentes.
La tecnología CSF, utilizada desde la décima generación de GPU Mali, se distingue por trasladar algunas funciones del controlador al firmware y utilizar un nuevo modelo para organizar la ejecución de tareas en la GPU. En las GPU con interfaz CSF, en lugar de un modelo basado en el envío de una cadena de tareas, se utiliza un modelo basado en un flujo de comandos con programación de la cola de flujo de comandos en el firmware. Para organizar el trabajo del programador, la GPU integra un microcontrolador Cortex-M10 independiente y una unidad de ejecución de comandos (Command Execution Unit) para ejecutar las instrucciones CSF.
La funcionalidad de Tyr aún está por debajo de la del controlador Panthor, pero los desarrolladores planean reducir gradualmente esta brecha hasta alcanzar la paridad en las capacidades del controlador. Las características faltantes requieren la integración de abstracciones adicionales en el kernel para crear controladores en Rust, por lo que el desarrollo del controlador Tyr se sincronizará con la incorporación de estas abstracciones al kernel. Por ejemplo, el kernel aún no cuenta con las capacidades de mapeo de memoria en los controladores de Rust para GPU, que se están desarrollando en el conjunto de parches GPUVM, que aún no se ha adoptado.
Fuente: opennet.ru
