Présentation du matériel et du pilote
Le module sm750hdmidrm cible la carte PCIe SE‑DP750A‑HDMI, identifiée par le PCI ID 126f:0750 et équipée du processeur graphique Silicon Motion SM750G10‑AC révision A1. La carte possède 16 MiB de mémoire vidéo, un transmetteur HDMI SiI9024ACNU et un seul connecteur HDMI. Le pilote, publié sous licence open‑source sur GitHub, est un driver out‑of‑tree destiné aux noyaux Linux 6.17 et supérieurs ; il ne s’installe pas sur les versions antérieures car les interfaces DRM requises n’existent pas.
sudo apt update
sudo apt install build-essential dkms linux-headers-$(uname -r) libdrm-dev git
git clone https://github.com/KodeMunkie/sm750hdmifb.git
cd sm750hdmifb
make check
./build-package.sh
sudo apt install ./dist/sm750hdmidrm_0.5.6_all.deb
sudo rebootLe script build-package.sh compile le module via DKMS, garantissant une reconstruction automatique lors d’une mise à jour du noyau. Le paquet blacklist le pilote legacy sm750fb afin d’éviter les conflits de prise en charge.
Mécanismes d’affichage et optimisation du débit
Par défaut, le driver utilise les modes fournis par l’EDID du moniteur, un scan‑out en RGB565 ditheré (16 bits) et un curseur matériel. La conversion de la surface 32 bits (XRGB8888) vers RGB565 se fait juste avant l’envoi DMA, avec un dither ordonné à 8×8 et une correction verte de 94 %. Cette réduction de bande passante est indispensable : le lien PCIe 1.1 ×1 ne supporte que 2,5 Gb/s, insuffisant pour transmettre 4 octets par pixel à pleine résolution.
Le driver regroupe les lignes modifiées en lots de huit rangées, les transmet via sm750hdmidrm.ko et bascule automatiquement sur un chemin de secours si le DMA échoue. Cette stratégie minimise les interruptions du processeur tout en conservant une latence acceptable pour des bureaux 2048 px de large.
Modes larges et contraintes matérielles
Le plan graphique du SM750 possède un champ de bord droit de 11 bits, limitant la largeur physique du scan‑out à 2048 pixels. Pour exploiter un moniteur ultrawide 2560×1080, le pilote propose deux modes logiciels (softscale_wide=1) qui compressent l’image à 2048 px puis la laissent étirer par le moniteur. Le mode 2560×1080 implique une compression horizontale de 20 % (2560→2048) suivie d’une expansion de 25 % par le moniteur, tandis que le mode 2464×1080 ne compresse que de 16,9 % et offre une meilleure réactivité.
Ces modes dépassent les spécifications publiées du GPU et du transmetteur HDMI ; ils peuvent entraîner l’absence de signal, des distorsions ou une instabilité si le câble, le KVM ou le moniteur ne supporte pas les horloges requises. Le pilote expose ces risques via les paramètres de module et recommande de garder un accès SSH pour récupérer le système en cas d’échec.
Paramètres de module et limites d’utilisation
Les options du module sont configurables via la ligne de commande du chargeur GRUB, par exemple : sm750hdmidrm.edid_only=0 sm750hdmidrm.softscale_wide=1 sm750hdmidrm.sharpen=1 sm750hdmidrm.scanout_format=rgb565-bbdither. Le paramètre sharpen=1 applique un renforcement de contraste de 8 % après la compression, améliorant la netteté perçue sans recréer les pixels perdus. Le pilote ne fixe pas de plafond de version du noyau, mais toute modification majeure des API DRM (prévue dans les futures versions 7.x) nécessitera une mise à jour du code source.
En résumé, le driver SM750HDMIFB combine une conversion de couleur optimisée, un transfert DMA en lots et un redimensionnement logiciel pour exploiter au maximum les 16 MiB de mémoire et le lien PCIe limité du SM750. Son utilisation sur des résolutions ultrawide est possible, mais elle repose sur des compromis de bande passante et sur la capacité du moniteur à étirer correctement le signal compressé.