Daniel Almeida, der an der Entwicklung von Video-Codecs bei Collabora arbeitet, hat in der Entwickler-Mailingliste des Linux-Kernels eine erste Implementierung des Tyr-Treibers für ARM Mali GPUs veröffentlicht, die die CSF-Technologie (Command Stream Frontend) verwendet, einschließlich Mali G310, G510 und G710. Der Treibercode ist in Rust geschrieben und umfasst etwas mehr als 600 Zeilen. Die Arbeit am Tyr-Treiber erfolgt in Zusammenarbeit mit Mitarbeitern von Collabora, Arm und Google.
Für die Erstellung des neuen Treibers wurden Komponenten des abstrakten Treibers rust_platform_driver und des für NVIDIA-GPUs entwickelten Nova-Treibers verwendet, der in Rust geschrieben und teilweise in den Kernel 6.15 integriert wurde. Die Funktionalität zur Interaktion mit der Mali-GPU wurde aus dem bestehenden Panthor-DRM-Treiber (Direct Rendering Manager), der in C geschrieben ist, portiert. Die uAPI des Tyr-Treibers ist identisch mit der uAPI des Panthor-Treibers, was es ermöglicht, bereits vorhandene Komponenten im Benutzerspace zu nutzen.
Die CSF-Technologie, die seit der 10. Generation der Mali GPUs zum Einsatz kommt, zeichnet sich dadurch aus, dass einige Funktionen des Treibers auf die Firmware ausgelagert werden und ein neues Modell zur Organisation der Ausführung von Arbeiten auf der GPU genutzt wird. Bei GPUs mit CSF-Schnittstelle wird anstelle des modells, das auf der Übermittlung einer Arbeitskette basiert, ein Modell verwendet, das auf einem Befehlsstrom basiert und die Warteschlange für den Befehlsstrom auf der Firmware-Seite plant. Für die Organisation der Arbeit des Planers ist ein separater Mikrocontroller Cortex-M7 in die GPU integriert, und zur Ausführung von CSF-Befehlen ist eine spezielle Einheit zur Ausführung von Befehlen (Command Execution Unit) vorgesehen.
Die Funktionalität von Tyr hinkt derzeit hinter dem Panthor-Treiber hinterher, aber die Entwickler beabsichtigen, die Lücke schrittweise zu schließen, bis ein Paritätsniveau zwischen den Treibern erreicht ist. Fehlende Funktionen erfordern die Integration zusätzlicher Abstraktionen in den Kernel zur Erstellung von Treibern in Rust, weshalb die Entwicklung des Tyr-Treibers mit der Hinzufügung dieser Abstraktionen in den Kernel synchronisiert wird. Derzeit fehlen im Kernel beispielsweise Möglichkeiten zur Speicherabbildung in Rust-Treibern für GPUs, die in einem noch nicht akzeptierten Patch-Set GPUVM entwickelt werden.
Quelle: opennet.ru
