Daniel Almeida, que trabalha no desenvolvimento de codecs de vídeo na Collabora, publicou na lista de discussão de desenvolvedores. Linux- a implementação inicial do driver Tyr para GPUs ARM Mali que utilizam a tecnologia Command Stream Frontend (CSF), como as Mali G310, G510 e G710. O código do driver foi escrito em Rust e compreende pouco mais de 600 linhas. O trabalho no driver Tyr está sendo conduzido em conjunto pela Collabora, Arm e Google.
A estrutura para a criação do novo driver utiliza componentes do driver abstrato rust_platform_driver e do driver Nova, desenvolvidos para GPUs NVIDIA, escritos em Rust e parcialmente adicionados ao kernel 6.15. A funcionalidade de interação com a GPU Mali foi portada do driver DRM Panthor (Direct Rendering Manager) existente, escrito em C. A uAPI do driver Tyr é idêntica à uAPI do driver Panthor, o que permite o uso de componentes de espaço de usuário existentes.
A tecnologia CSF, utilizada desde a 10ª geração de GPUs Mali, destaca-se por migrar algumas funções de driver para o firmware e utilizar um novo modelo para organizar a execução do trabalho na GPU. Em GPUs com interface CSF, em vez de um modelo baseado no envio de uma cadeia de tarefas, utiliza-se um modelo baseado em um fluxo de comando com agendamento da fila de fluxo de comando no firmware. Para organizar o trabalho do agendador, um microcontrolador Cortex-M7 separado é integrado à GPU, e uma unidade de execução de comando especial (Command Execution Unit) é fornecida para executar instruções CSF.
A funcionalidade do Tyr ainda está atrasada em relação ao driver Panthor, mas os desenvolvedores pretendem reduzir gradualmente essa lacuna até que a paridade nas capacidades do driver seja alcançada. Os recursos ausentes exigem a integração de abstrações adicionais ao kernel para criar drivers em Rust, portanto, o desenvolvimento do driver Tyr será sincronizado com a adição dessas abstrações ao kernel. Por exemplo, o kernel ainda não possui recursos para mapeamento de memória em drivers Rust para GPUs, que estão sendo desenvolvidos no conjunto de patches GPUVM, que ainda não foi adotado.
Fonte: opennet.ru
