Journal Tentative d'upgrade d'un vieux NAS sous ARM/Linux [episode 2]

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
14
9
mar.
2016

Statut de développement

Suite a ma première tentative, j'ai continué le développement en ajoutant les blocs suivants :
- pinctrl
- contrôleur de reset
- contrôleur d'horloges
- contrôleur ethernet gigabit
- contrôleur USB
- contrôleur de disque SATA

J'ai réussi a faire fonctionner le tout, non sans mal concernant le SATA et l'USB, mais comme sur des roulettes concernant le pinctrl, reset et les horloges.

Pinctrl

Le "pinctrl" sert a représenter le multiplexage des ports physiques du SoC et leur fonction, c'est-à-dire qu'une partie des ports physiques peuvent exercer plusieurs fonctions selon une configuration choisie, ou par défaut en mode GPIO (Entrée/Sortie Générique).

La façon la plus commune est de représenter le tout en forme de matrice ports/fonctions, par exemple :
| PIN | Function 0 | Function 1 | Function 2 | Function 3 | Function 4 | Function 5 |
| 6 | GPIO | | | UART2 TX | | |
| 7 | GPIO | | | UART2 RX | | |
| 20 | GPIO | | | UART1 TX | | |
| 22 | GPIO | | | UART1 RX | | |
| 31 | GPIO | | | UART0 TX | | |
| 32 | GPIO | | | UART0 TX | | |

(Ici on ne connait que les ports UARTs…)

Et chaque port peut être configuré indépendamment.

Contrôleur d'horloges

Concernant les horloges, je n'ai implémenté que les horloges "portail" (c'est moche, en anglais on dit "Gate clock") qui sert à activer ou désactiver un horloge.

La gestion des Boucle à phase asservie (ou PLL) qui permet de régénérer une horloge plus rapide à partir d'une source et de coefficients, n'est pas d'actualité car c'est géré dans le gestionnaire de démarrage (U-Boot ici) et nous n'avons pas besoin de changer cette horloge (et déconseillé car l'horloge de la mémoire DDR en dépend…).

Upstream

En parallèle j'ai soumis aux mainteneurs du noyau un premier set de patchs concernant un support initial du SoC.

La première tentative est ici :
https://lkml.org/lkml/2016/3/3/297

La seconde ici :
https://lkml.org/lkml/2016/3/9/161

Comme vous voyez, la façon de présenter les patchs est très codifiée, il faut séparer chaque fonctionnalité dans un patch séparé avec un format de patch issu de git, etc…

Ces règles sont disponibles ici : https://www.kernel.org/doc/Documentation/SubmittingPatches

  • # Clock gating

    Posté par  (site web personnel) . Évalué à 6. Dernière modification le 09 mars 2016 à 12:16.

    À ma connaissance, le concept de clock gating se lit plutôt dans l'autre sens: Des barrières d'horloge.

    La vision simplifiée étant qu'il y a une horloge globale, et qu'on veut couper l'horloge pour certains composants pour qu'ils arrêtent de consommer. Donc si on fait un schéma global de la puce, on met des clôtures autour des composants, et on lève la barrière pour laisser entrer la clock

    Sinon article encore intéressant, merci

    • [^] # Re: Clock gating

      Posté par  (site web personnel) . Évalué à 1.

      Oui c'est exactement ça, je n'aurais pas réussi à mieux l'expliquer…

      • [^] # Re: Clock gating

        Posté par  (site web personnel) . Évalué à 2.

        Pour chaque architecture, il y a (avait ?) un clock tree qui représentait cet arbre d'horloge avec toutes les coupures possibles. Linux faisait son possible pour couper les clocks inutiles.

        Sur omap3, l'arbre était tellement gros et complexe qu'il était généré depuis la base hardware du SoC. je crois que le système s'est simplifié.

        "La première sécurité est la liberté"

        • [^] # Re: Clock gating

          Posté par  (site web personnel) . Évalué à 2.

          Au contraire, c'est toujours présent, mais l'arrivée du "Common Clock Framework" et du device tree a bien simplifié le code.

          Texas Instrument avait atteint un peu les limites de la taille de l'arbre d'horloge et surtout le Runtime Power Management, maintenant tout le monde en bénéficie !

    • [^] # Re: Clock gating

      Posté par  . Évalué à 2.

      C'est joliment pensé mais la réalité est malheureusement plus triviale. Le mot "gate" désigne en électronique une porte logique. Quand on l'applique en tant que verbe sur un signal — par exemple à l'horloge —, on indique juste qu'on a rajouté de la logique sur le signal pour l'activer/désactiver. L'expression "to gate the clock", qui apparaît par exemple sur le Wikipédia anglophone, signifie juste «mettre de la logique sur l'horloge».

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.