Personnaliser le pinmux (SFIO / direction / état par broche)
Aperçu
La feuille de calcul Tegra pinmux (.xlsm) est la source de vérité pour chaque broche CVM : nom de broche SoC, SFIOs supportés, fonction sélectionnée par le client, direction et état initial. Cette compétence analyse l'XLSM, exécute une boucle interactive Q1–Q6 par broche, et émet les trois DTSIs BCT (pinmux, gpio, padvoltage) en une seule fois dans le suivi des overlays à <source.root_path>/Linux_for_Tegra/bootloader/.
Contrairement aux compétences sœurs jetson-customize-uphy / jetson-customize-pcie / jetson-customize-camera, pinmux n'a pas de surface overlay kernel-DT et pas d'édition ODMDATA. L'XLSM est la source de vérité ; les trois DTSIs émis arrivent au moment du flash via les références PINMUX_CONFIG= / GPIOINT_CONFIG= / PMC_CONFIG= de la conf du support (que /jetson-derive-carrier a mises en place).
Classification des pads (fixée au silicium) : seuls les pads BD* et BI* ont des attributs pull / drive / open-drain configurables. LP5XA_*, UPHYDS_*, DP_SINGLE_*, BDMIPI16X_*, BDUSB2_*, OSCI27_* sont des fonctions fixes et ignorent Q4–Q6 (configurable: no).
Le script bundlé scripts/modify_pinmux.py est le moteur : il analyse l'XLSM via openpyxl>=3.1, construit la pinmap JSON par support, capture les éditions de broches dans un shim de session, et (lors du generate) écrit les trois DTSIs.
Quand invoquer
- L'utilisateur dit « configurer une broche », « définir SFIO », « éditer DTSI pinmux », « définir la direction de la broche », « définir l'état initial », ou demande de réaffecter une broche CVM (par ex. basculer une broche entre GPIO et une fonction périphérique).
- Une compétence sœur (
jetson-customize-camera,jetson-customize-pcie,jetson-customize-usb,jetson-customize-mgbe) signale une incompatibilité de broche HSIO viapin_verifier.pyet l'utilisateur veut la corriger. - L'utilisateur a pré-dérivé un support personnalisé avec
/jetson-derive-carrieret souhaite maintenant créer le pinmux à partir d'un.xlsmfraîchement édité.
Prérequis :
- Profil actif sélectionné (
target-platform/active_target.yml→<profile>.yamlavecreference_devkit:ETcustom_carrier:). <source.root_path>/Linux_for_Tegra/existe en tant que dépôt git (/jetson-init-source)./jetson-derive-carriera s'exécuté — les trois DTSIs BCT côté pinmux (PINMUX_CONFIG,GPIOINT_CONFIG, référencesPMC_CONFIGdans la conf du support) existent dans le suivi des overlays.- Un
.xlsmpinmux est enregistré dans le profil actif àdocuments.custom_carrier_pinmux_xls(préféré quand spécifique au support personnalisé) oudocuments.ref_devkit_pinmux_xls(fallback). Lemodify_pinmux.pybundlé requiertopenpyxl>=3.1.
Procédure
Voir references/procedure.md pour la procédure complète étape par étape (étapes 1–8). Résumé :
- Résoudre la cible active + XLSM. Valider le profil actif,
custom_carrier:, les prérequis du suivi des overlays ; résoudre le chemin.xlsmpinmux depuisdocuments.custom_carrier_pinmux_xls→documents.ref_devkit_pinmux_xls→ XLSM unique sousdocuments.root_path→ invite utilisateur. - Probe. Exécuter
modify_pinmux.py probepour analyser l'XLSM dans le scratch par compétence<KB>/pinmap/<custom-carrier>.jsonplus le shimsession.json. - Lookup. Résoudre une requête utilisateur en forme libre (broche CVM, nom Verilog, signal, broche DT) via
modify_pinmux.py lookup; afficher la liste SFIO supportée, les valeurs par défaut etconfigurable: yes/no. - Set-pin (HARD GATE — Q1–Q6 via
AskUserQuestion). Q1–Q3 (sfio/direction/initial_state) toujours posées ; Q4–Q6 (pull/drive_type/open_drain) uniquement quandconfigurable: yes.tristateete_inputsont dérivés dedirection, jamais posés. - Generate.
modify_pinmux.py generate --out-dir <source.root_path>/Linux_for_Tegra/bootloader/(racine, pasbootloader/generic/BCT/— les forks.dtsde derive-carrier vivent là, ne colocalisez pas). Émet :tegra<soc>-mb1-bct-{pinmux,gpio,padvoltage}-<carrier-key>.dtsi.<carrier-key>provient de la référencePINMUX_CONFIG=de la conf du support, PAS du nom du support en kebab-case. - Commit (un seul commit groupé par règle de workflow). Les trois DTSIs sont une édition logique → un commit de personnalisation. Exécuter la porte de prévisualisation de commit avant chaque commit.
- Sidecar run-state + shim de session. Écrire le sidecar
<profile-stem>.jetson-customize-pinmux.jsonvisible par l'utilisateur et le shim transitoiresession.jsonsous<workspace>/target-platform/. - Résumé. Émettre le résumé standard une ligne + tableau.
Pièges
- Pas d'overlay kernel-DT ; pas d'édition
OVERLAY_DTB_FILE; pas de transfertrender_conf.py. Cette compétence s'arrête aux trois DTSIs BCT — la conf du support les référence déjà viaPINMUX_CONFIG=/GPIOINT_CONFIG=/PMC_CONFIG=(mise en place par/jetson-derive-carrier). - Re-pointer le
#includedu wrapper.dtsaprèsgenerate./jetson-derive-carrierfork les wrappers.dtsàbootloader/generic/BCT/, mais leurs lignes#includepeuvent toujours tirer le.dtsidevkit en amont (par ex.…-p3834-xxxx-p4071-0000.dtsi). Après quegenerateécrive le nouveau<CARRIER_KEY>.dtsià la racine debootloader/, éditer chaque#includedu wrapper vers le nouveau nom — par nom de base nu (#include "tegra<soc>-mb1-bct-pinmux-<CARRIER_KEY>.dtsi"), pas../../…relatif au système de fichiers. Le build BCTcpp -I bootloader/résout les noms de base nus ; c'est la convention que chaque autre include BCT dans l'arbre suit. Fusionner les éditions du wrapper dans le même commit de personnalisation que les trois DTSIs. Voirreferences/procedure.mdétape 5 (« Sanity-check the carrier.dtswrapper »). - Q4–Q6 gated on
configurable: yes. Demander pull / drive_type / opendrain sur un pad de fonction fixe (`LP5XA,UPHYDS_,BDMIPI16X_*, etc.) est silencieusement supprimé par le script et confond l'utilisateur.lookupafficheconfigurable: yes/no` — toujours le vérifier avant de demander Q4–Q6. tristateete_inputsont dérivés, jamais posés.unused→ tristate=ENABLE ;input/bidirectional→ enable-input=ENABLE. Les exposer comme des invites séparées produit des DTSIs incohérents.sfio=gpiorequiert une entréegpio=GPIOn_PD.NNanalysable dans la listesfiode la ligne de pinmap. Les broches sans une ne sont pas compatibles GPIO silicium ;set-pinrejette l'appel. Afficher le rejet — ne pas tomber silencieusement en arrière vers un SFIO non-GPIO.- Idempotence des marqueurs. Chaque édition par broche porte
// custom-bsp: pinmuxsur l'accolade fermante ; les entrées de default-state gpio portent le même marqueur comme commentaire final. Réexécutergeneratedoit détecter et mettre à jour — jamais dupliquer. modify_pinmux.pyest inchangé du framework original — il lit son propre shimsession.jsonsous--kb-dir. Le shim est régénéré chaque fois depuis le profil actif + le sidecar visible par l'utilisateur. Ne pas éditer manuellement le shim ; il est transitoire.- Variantes multiples de DTSI pinmux par SKU de module Thor. Certaines broches du support vivent dans une variante DTSI différente de celle que la conf du support référence.
modify_pinmux.py commit(flux patch-in-place hérité) tolère les blocs per-pin manquants viapinmux.warnings[]plutôt que d'échouer. Afficher l'avertissement ; pointer vers la variante DTSI alternative. - Ne touchez pas au BSP en amont à
<bsp_image.root_path>. Tous les édits arrivent dans<source.root_path>/Linux_for_Tegra/bootloader/selon le motif pristine + customization commit.
Scripts disponibles
| Script | Objectif | Arguments |
|---|---|---|
scripts/modify_pinmux.py |
Analyseur XLSM + générateur DTSI par broche. Invoqué via run_script() depuis les étapes 3-6 avec la sous-commande de la phase actuelle. |
probe \| lookup \| set-pin \| apply \| generate \| commit [...] (voir --help) |
scripts/generate_dtsi.py |
Rend les fragments DTSI pinmux/GPIO/padvoltage depuis l'état de session bundlé. Appelé par modify_pinmux.py generate. |
--session <path> --out-dir <dir> |
Invoquer depuis le corps de la compétence comme un sous-processus via run_script() :
# run_script: probe the carrier pinmux XLSM and write a session state
scripts/modify_pinmux.py probe --xlsm carrier.xlsm --session .pinmux-session.json
# run_script: render DTSI fragments from the final session state
scripts/modify_pinmux.py generate --session .pinmux-session.json --out-dir bsp_sources/pinmux/
Références
references/procedure.md— prose de procédure complète étapes 1–8.questions.json— schéma de demande Q1–Q6 consommé par l'étape 4.../../references/platform_template.yaml— blocdocuments:(ref_devkit_pinmux_xls,custom_carrier_pinmux_xls).../../context/bsp-customization-workflow.md— protocole édition overlay (un commit par fork DTSI).../jetson-derive-carrier/SKILL.md— doit s'exécuter en premier ; produit les forks DTSI pinmux / gpio / padvoltage que cette compétence édite, et réécrit les lignesPINMUX_CONFIG=/GPIOINT_CONFIG=/PMC_CONFIG=de la conf du support pour les pointer.../jetson-init-source/SKILL.md— produit le suivi des overlays dans lequel cette compétence commite.../jetson-link-docs/SKILL.md— auteur du blocdocuments:du profil, incluant les liaisons XLSM pinmux.