SM750 HDMI DRM-stuurprogramma

Het stuurprogramma maakt het mogelijk om een werkelijke output van 2048 pixels breed te genereren, of een softwarematig geschaald ultrawide-bureaublad van 2560x1080, inclusief bandbreedtebesparende kleurconversie en update-optimalisaties voor betere prestaties.

Waarschuwing: Dit stuurprogramma is experimenteel en bedoeld voor één specifieke SM750-kaart. Optionele modi kunnen de gepubliceerde kloklimieten van de GPU of monitor overschrijden, wat kan leiden tot een uitblijvend signaal, vervorming of een onstabiel beeld. Zorg dat SSH of een andere herstelmethode beschikbaar is bij het testen van modi die niet via EDID worden beperkt.

Hardwareondersteuning

Controleer of uw kaart wordt ondersteund. De geteste kaart wordt verkocht of aangeduid als SE-DP750A-HDMI en moet aan alle volgende vereisten voldoen:

  • Chipset: Silicon Motion SM750G10-AC, revisie A1
  • PCI ID: 126f:0750
  • HDMI-transmitter: Silicon Image/Lattice SiI9024ACNU
  • Geheugen: 16 MiB displaygeheugen
  • Uitgang: Eén HDMI-uitgang

Let op: Alleen de PCI ID is niet voldoende. Andere SM750-kaarten die VGA gebruiken, een andere transmitter hebben of een andere GPIO-bedrading gebruiken, worden momenteel niet ondersteund.

Installatie

Gebruikers van Ubuntu 24.04 en Linux Mint 22 kunnen lokaal een DKMS-pakket bouwen met de volgende stappen:

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/sm750hdmifb_0.5.5_all.deb
sudo reboot

Belangrijk: Het herstarten is essentieel. Dit zorgt ervoor dat het pakket de oude Linux sm750fb-driver op de zwarte lijst zet voordat deze aanspraak kan maken op de kaart. Het pakket heet sm750hdmifb en de kernelmodule is sm750hdmidrm.ko, waardoor verwarring met sm750fb.ko wordt voorkomen.

Kernelcompatibiliteit

De driver is bedoeld voor Linux 6.17 en nieuwer. DKMS weigert oudere kernels omdat de vereiste DRM-interfaces niet worden ondersteund. De broncode bevat compatibiliteitspaden voor Linux 6.17 tot en met de 6.x-serie, en voor Linux 7.0 en verder. Momenteel is de driver getest en goedgekeurd op Ubuntu-kernels 6.17 en 7.0.

Er is geen vaste bovenlimiet voor de versie, maar toekomstige kernels kunnen interne DRM-API's wijzigen. Omdat dit een "out-of-tree" driver is, kan een nieuwe kernelversie een update van de broncode vereisen, zelfs binnen het ondersteunde bereik van 6.17+.

Normaal gebruik

Standaard hanteert de driver de volgende instellingen:

  • Gebruik van monitor EDID-modi.
  • Gebruik van geditherde 16-bit RGB565 scanout.
  • Gebruik van een hardwarecursor.
  • Updates worden verzameld op een worker.
  • Uploads gebeuren in batches van acht rijen via DMA.
  • Veilige fallback indien DMA faalt.

Kleurdiepte en Bandbreedte

Applicaties renderen nog steeds in 32-bit kleur. Direct voor de upload converteert de driver gewijzigde schermregio's naar RGB565 en past een door KodeMunkie ontwikkelde "ordered dither" toe met een correctie van 94% voor het groene kanaal.

Dit is de standaardinstelling omdat het SM750-framebuffer wordt bereikt via een PCIe 1.1 x1-verbinding. Bij hogere resoluties kan deze verbinding geen responsieve full-screen 32-bit updates leveren. XRGB8888 verstuurt vier bytes per pixel, terwijl RGB565 er twee verstuurt. Geditherde RGB565 halveert dus het pixelverkeer naar het apparaat, terwijl veel van de kleurdetails behouden blijven.

Moduleparameters (GRUB-opties)

Voeg de volgende opties toe aan de bestaande GRUBCMDLINELINUXDEFAULT waarde in /etc/default/grub. Gebruik het volledige prefix sm750hdmidrm. (bijv. sm750hdmidrm.enabledma=0). Pas dit toe met sudo update-grub en sudo reboot.

OptieStandaardWanneer gebruiken?Effect en afweging
scanout_format=rgb565-bbditherrgb565-bbditherGeen actie nodigAanbevolen standaard: Geditherde 16-bit scanout met groene correctie.
scanout_format=xrgb8888rgb565-bbditherAlleen voor 32-bit scanoutSchakelt RGB565, dither en groene correctie uit; verdubbelt verkeer en kan lag veroorzaken bij hoge resoluties.
scanout_format=rgb565rgb565-bbditherAlleen voor platte RGB565Schakelt dither en groene correctie uit, wat de kleurkwaliteit verlaagt.
dithergreengain=9494Geen actie nodigSchakelt de afgestemde groene correctie in tijdens dithering.
dithergreengain=10094Om groene correctie uit te schakelenBehoudt dither, maar kan een groenere kleurbalans geven.
enable_dma=11Geen actie nodigDMA-uploads van acht rijen met automatische CPU-fallback.
enable_dma=01Om DMA uit te schakelenForceert CPU-uploads, meestal met lagere prestaties.
disablehardwarecursor=10Voor software-cursor fallbackSchakelt de hardwarecursor uit; kan de responsiviteit verminderen.
edid_only=01Nodig voor catalogus en ultrawide-modiGEVAARLIJK: Stopt de EDID-beperking van modi en klokken die de monitor mogelijk niet ondersteunt.
softscale_wide=10Nodig voor 2464x1080 en 2560x1080 (zet ook edid_only=0)GEVAARLIJK / EXPERIMENTEEL: Schakelt brede compressie in en vereist monitor-stretching.
sharpen=10Aanbevolen bij ultrawide-modiVoegt een vaste 8% contrastverscherping toe na compressie.
double_shadow=10Aanbevolen om redundante uploads te voorkomenGebruikt snapshots voor vergelijking; slaat ongewijzigde pixels over, maar verbruikt meer systeemgeheugen.
async_updates=11Geen actie nodigBehoudt alleen de laatste wachtende update in plaats van verouderde frames in de wachtrij te zetten.

Ultrawide Schaling

De hardware wordt normaal gesproken beschreven als ondersteunend tot 1920 pixels breed. Met edid_only=0 biedt de driver echter ook deze werkelijke 2048-brede hardwaremodi aan:

Desktop en HDMI-modusVernieuwingsfrequentiesOutput en risico
2048x86459.94, 60, 70, 72, 75 HzNative of monitor-scaled. EXPERIMENTEEL: NIET BEPERKT DOOR EDID
2048x102459.94, 60, 70, 72 HzNative of monitor-scaled. EXPERIMENTEEL: NIET BEPERKT DOOR EDID
2048x108050, 59.94, 60, 70, 72, 75 HzNative of monitor-scaled. EXPERIMENTEEL: HOGE FREQUENTIE KAN SPECIFICATIES OVERSCHRIJDEN
2048x115259.94, 60 HzNative of monitor-scaled. EXPERIMENTEEL: NIET BEPERKT DOOR EDID

Softwarematige Wide-modi

Met softscale_wide=1 worden twee bredere logische desktops toegevoegd. Beide vereisen een fysieke 2560x1080 ultrawide monitor waarbij de optie FULL WIDESCREEN STRETCH in het monitor-menu is ingeschakeld.

Logisch bureaubladFysieke monitorBreedte ratioHDMI en monitor pad
2464x10802560x108077:6416.9% compressie → 2048x1080 → 2560x1080 stretch
2560x10802560x10805:420% compressie → 2048x1080 → 2560x1080 stretch

Details per modus:

  • 2464x1080: (50, 59.94, 60, 70, 72, 75 Hz) AANBEVOLEN: Biedt meer detail en betere responsiviteit; schakel sharpen=1 in.
  • 2560x1080: (50, 59.94, 60, 70, 72, 75 Hz) Minder detail en lagere prestaties omdat er meer breedte wordt gecomprimeerd.

Technische beperking

2048 pixels is de maximale werkelijke breedte die deze kaart in hardware kan produceren. Het primaire graphics-plane van de SM750 heeft een 11-bit right-edge field, waardoor de fysieke scanout breedte niet boven de 2048 pixels kan uitkomen. Het verlagen van de hoogte brengt geen extra horizontale bits vrij.

De 2464 en 2560 modi creëren bredere werkruimtes in software, maar de kaart stuurt nog steeds een signaal van 2048 pixels breed uit. Het volledige pad is: logisch bureaubladdriver compressie2048x1080 HDMImonitor stretch naar 2560x1080 fysieke pixels.

Waarom 2464x1080 wordt aanbevolen

Bij 2560x1080 voert de driver een 5:4 reductie uit (20% compressie). De monitor rekt dit vervolgens met 25% op. Hierdoor gaat er horizontaal detail verloren en moet er meer data worden verwerkt.

De modus 2464x1080 start met 3,75% minder pixels en comprimeert de breedte met slechts 16,9% voordat het 2048x1080 signaal wordt verzonden. Hoewel dit resulteert in een beeld dat ongeveer 3,9% breder is dan de logische geometrie, is dit aspect-verschil nauwelijks merkbaar en is het de ruil voor een betere responsiviteit en scherpte.

Aanbevolen configuratieprofiel

Voor het inschakelen van de modus-catalogus en wide scaling:

GEVAAR: DIT PROFIEL SCHAKELT EDID-BEPERKINGEN UIT EN GEBUIKT EXPERIMENTELE KLOKKEN. DIT KAN LEIDEN TOT EEN ZWART SCHERM OF INSTABILITEIT.

sm750hdmidrm.edidonly=0 sm750hdmidrm.softscalewide=1 sm750hdmidrm.sharpen=1 sm750hdmidrm.scanoutformat=rgb565-bbdither sm750hdmidrm.doubleshadow=1 sm750hdmidrm.enable_dma=1

Custom Desktop Dither

De rgb565-bbdither maakt gebruik van een 8x8 "ordered dither", specifiek ontwikkeld en afgestemd door KodeMunkie voor desktopgebruik op deze kaart. Het bevat een aanpasbare groene-kanaalcorrectie en verankert het patroon aan de schermcoördinaten, zodat kleine updates niet zorgen voor een "kruipend" patroon of misvormde vlakken.

Visueel proces van ultrawide conversie

Het proces verloopt in drie stappen:

  1. Logisch bureaublad: De driver ontvangt het originele 2464x1080 logische bureaublad.
  2. Gecomprimeerde HDMI scanout: Het beeld wordt horizontaal samengeperst tot 2048x1080 om te voldoen aan de hardwarelimiet van de SM750.
  3. Fysiek monitorresultaat: De monitor gebruikt de optie FULL WIDESCREEN STRETCH om het 2048-brede signaal uit te rekken over de volledige 2560 fysieke pixels van het paneel.

Probleemoplossing

Controleer de binding en recente driver-berichten met:

lspci -nnk -d 126f:0750
journalctl -k -b | grep -iE 'sm750|sii902'

Als een experimentele modus geen signaal geeft, start dan op met een oudere kernel of verwijder de toegevoegde sm750hdmidrm.* GRUB-opties via de recovery-modus.

Ontwikkelaarsinformatie en Licentie

Licentie

Het project is GPL-2.0-only. Bestanden afgeleid van de DDK zijn afkomstig van de GPL-2.0 staging sm750fb driver van Linux. Er is geen propriëtaire software, firmware-blob of gesloten bibliotheek van Silicon Motion inbegrepen of gekoppeld.

Ontwikkeling

Dit project is gecreëerd via uitgebreide AI-ondersteuning ("vibe coding"). De auteur heeft het gedrag gespecificeerd en fysiek getest en de custom dither ontworpen, maar claimt niet over voldoende expertise in Linux DRM, KMS, DKMS of kernel-frameworks te beschikken om elk implementatiedetail onafhankelijk te garanderen. De broncode is gepubliceerd voor review en verbetering.

Disclaimer

U gebruikt dit experimentele stuurprogramma en elke niet-EDID of boven-specificatie modus geheel op eigen risico. U bent verantwoordelijk voor hersteltoegang, back-ups, modusselectie en hardwarecompatibiliteit. De auteurs en bijdragers zijn niet verantwoordelijk voor verlies van display, data, tijd, hardware, inkomen of enige andere directe of indirecte schade.

De software wordt geleverd zonder garantie. Zie het LICENSE bestand.