URL: https://linuxfr.org/news/nvidia-contribue-la-gestion-du-gpu-arm-tegra-k1-dans-nouveau Title: NVIDIA contribue la gestion du GPU ARM Tegra K1 dans Nouveau Authors: Martin Peres Davy Defaud, yalla, Xavier Teyssier, ZeroHeure, Nÿco, Benoît Sibaud et palm123 Date: 2014年02月06日T14:39:00+01:00 License: CC By-SA Tags: linus_torvalds, fosdem, nvidia, nouveau et kernel Score: 71 Le titre est accrocheur, mais les faits sont encore plus incroyables. Juste avant le [FOSDEM 2014](https://fosdem.org/2014/), Alexandre Courbot, un développeur de chez NVIDIA, a envoyé une suite de [16 correctifs](http://linux-kernel.2935.n7.nabble.com/RFC-00-16-drm-nouveau-initial-support-for-GK20A-Tegra-K1-td795972.html) pour ajouter la gestion des Tegra K1 dans Nouveau, le pilote libre communautaire pour les cartes graphiques NVIDIA. *NdM : Pour la bonne compréhension du ton enthousiaste de cette dépêche, précisons que son auteur est un des principaux développeurs de Nouveau*. ---- [Wiki du projet Nouveau](http://nouveau.freedesktop.org/wiki/) [Le lien vers la suite de correctifs proposés par NVIDIA](http://linux-kernel.2935.n7.nabble.com/RFC-00-16-drm-nouveau-initial-support-for-GK20A-Tegra-K1-td795972.html) ---- # Petit historique du projet Nouveau Historiquement, Nouveau a toujours été un pilote basé sur la rétro‐ingénierie, et les gens de chez NVIDIA avait toujours dit qu’ils ne comptaient [ni aider ni empêcher le développement](http://www.phoronix.com/scan.php?page=article&item=nvidia_qa_linux&num=3) de ce pilote. Pour mémoire, Nouveau apporte l’accélération 2D, 3D et vidéo pour les cartes TNT2, jusqu’aux toutes dernières cartes de la famille Kepler. Pour un historique complet du projet, vous pouvez consulter la [présentation donnée au XDC 2011](http://phd.mupuf.org/publication/2011/09/12/nouveau-the-community-and-past/) sur l’état de Nouveau. Il y a bientôt 6 mois, NVIDIA avait défrayé la chronique en fournissant de la documentation, ainsi qu’une adresse de courriel à laquelle les développeurs du projet Nouveau peuvent poser leurs questions sur le matériel. Ce changement de direction est dû à une volonté d’améliorer la prise en charge des processeurs graphiques NVIDIA sous Linux, même quand les pilotes propriétaires ne sont pas installés. Cette nouvelle avait fait l’objet d’un [journal](http://linuxfr.org/users/nonolapero/journaux/effort-d-ouverture-de-la-part-de-nvidia) dans lequel l’auteur avait prédit que je ne tarderai pas à vous faire savoir de quoi il en retournait vraiment. Cette [présentation donnée au FOSDEM](https://fosdem.org/2014/schedule/event/nouveau/) ce week‐end devrait y répondre (la vidéo devrait arriver bientôt). # Quand Tegra devient basé sur les GPU Keplers Ce travail de NVIDIA vient d’une idée simple : les Tegra K1 étant basés sur des cœurs graphiques Kepler, qui sont déjà pris en charge par Nouveau, leur ajout devrait être assez simple. De plus, Linus n’autorisant généralement pas deux pilotes concurrents pour le même matériel, il est assez intéressant de voir que NVIDIA a décidé de réaliser la prise en charge totalement en amont, et de ne pas se limiter à l’arbre Android pour lequel [un pilote existe déjà](https://android.googlesource.com/kernel/tegra/+/7306af6d64843c50f2586c24645e2a50e77c621b%5E/drivers/video/tegra/host/gk20a/). Nous pouvons spéculer que ce travail est le fruit de la volonté de Google de rendre le noyau Linux pour Android aussi proche que possible du noyau Linux original. L’affichage n’étant pas géré par le processeur graphique (Tegra), mais par [Host1x](http://http.download.nvidia.com/tegra-public-appnotes/host1x.html), la gestion des modes d’affichage (_mode setting_) n’est pas nécessaire dans les contributions apportées à Nouveau. Le processeur graphique sera donc exposé comme un nœud de rendu (_render node_) et il sera nécessaire d’utiliser l’infrastructure PRIME (utilisée pour la prise en charge d’Optimus) de façon à autoriser les applications à utiliser le processeur graphique pour le rendu et Host1x pour l’affichage. Bien que l’architecture PRIME ne prenne pas en charge pas la synchronisation logicielle entre processeurs graphiques, cela ne devrait pas poser de problèmes, car Host1x a la possibilité de se synchroniser en matériel. Des discussions sont en cours afin de faire fonctionner ces cartes de la façon la plus fiable et facile possible. Comme les systèmes monopuces — [_SoC_](http://fr.wikipedia.org/wiki/SoC "system on a chip") — Tegra n’ont pas de mémoire vidéo (la mémoire est partagée avec le processeur central), une bidouille a été réalisée dans cette première version afin de mieux coller au modèle mémoire actuellement mis en place par Nouveau. Cette bidouille consiste à allouer un bloc de mémoire et laisser Nouveau gérer la sous‐allocation via TTM. Ce problème est à l’étude par la partie de l’équipe responsable de la gestion de la mémoire. Cette suite de correctifs apporte majoritairement les fonctionnalités suivantes : - prise en charge des processeurs graphiques non‐PCI/AGP/PCIe ; - prise en charge sous‐optimale de l’allocation mémoire ; - prise en charge de l’envoi de commandes aux processeurs graphiques GK20a ; - corrections de multiples assomptions dans le code de Nouveau ; - prise en charge de la détection des processeurs graphiques GK20a. # Conclusion **Bienvenue dans la communauté Nouveau, NVIDIA!** Je n’aurais jamais cru pouvoir dire ça il y a un an, mais ces six derniers mois ont montré un effort considérable d’ouverture, non pas uniquement en temps ingénieur disponible et en documentation, mais aussi en code ! Cela a aussi permis à Linus Torvalds de [changer de doigt](https://plus.google.com/102150693225130002912/posts/TQDXxxr6ixm) du majeur au pouce, quand il parle de NVIDIA. Encore toute mes félicitations à tous ceux qui sont impliqués dans ces projets, aussi bien côté libre que du côté de NVIDIA, et qui ont rendu cela possible. # La suite ? ## Finir la prise en charge des GK20a Il aurait fallu environ deux semaines de travail à Alexandre pour effectuer ce travail de portage, un temps très faible pour un récent contributeur au projet Nouveau. Ben Skeggs, mainteneur de la partie noyau du projet Nouveau, a trouvé les correctifs globalement bons pour une demande d’inclusion. Quelques modifications mineures sont cependant nécessaires. Le travail est cependant loin d’être terminé. Il va falloir trouver une meilleure solution pour la gestion de la mémoire, mais aussi résoudre le problème de l’affichage depuis l’espace utilisateur. Pour finir, certaines modifications légères dans `libdrm` et le pilote Mesa _nvc0_ seront nécessaires. Un petit aperçu des discussions relatives à l’espace utilisateur est [disponible](http://linux-kernel.2935.n7.nabble.com/RFC-00-16-drm-nouveau-initial-support-for-GK20A-Tegra-K1-td795972i20.html#a796361). ## Contribution unique ou début d’une nouvelle ère ? J’ai eu l’occasion de discuter au FOSDEM 2014 avec Thierry Reding, développeur Tegra hobbyiste ayant été embauché par NVIDIA afin d’améliorer la prise en charge de Tegra dans le noyau Linux. Il est difficile de prévoir le futur, mais il semblerait que ce ne soit pas une contribution unique. Le temps nous le dira.