オープンソース
オープンソースが素晴らしい理由 – 新しいSM750 (Silicon Motion GPU) HDMIドライバー
Why open source rocks – a new SM750 (Silicon Motion GPU) HDMI Driver (github.com)
要約
Silicon Motion SM750 GPU向けの新しいオープンソースLinuxドライバーが公開されました。このドライバーは、帯域幅を節約するカラー変換と更新最適化により、2048ピクセル幅の出力やソフトウェアスケーリングによる2560x1080のウルトラワイドデスクトップなど、より高い解像度を可能にします。これは実験的なドライバーであり、インストールや設定には注意が必要です。
全文翻訳
SM750 HDMI DRMドライバー
このカードを実際の2048ピクセル幅の出力、またはソフトウェアスケーリングされた2560x1080のウルトラワイドデスクトップにプッシュします。帯域幅を節約するカラー変換と、よりスムーズなパフォーマンスのための更新最適化が施されています。
Linux用シングルHDMI SE-DP750A-HDMI PCIeカード用ディスプレイドライバー。
実験的: このドライバーは、特定のSM750ボード用です。オプションモードは、公開されているGPUまたはモニターのクロック制限を超える可能性があり、信号が出ない、歪む、または不安定な表示になることがあります。非EDIDモードを試す際は、SSHやその他のリカバリ手段を確保しておいてください。
私のカードはサポートされていますか?
テストされたボードはSE-DP750A-HDMIとして販売またはマークされており、以下のすべてを備えています:
Silicon Motion SM750G10-AC、リビジョンA1
PCI ID 126f:0750
Silicon Image/Lattice SiI9024ACNU HDMIトランスミッター
16 MiBディスプレイメモリ
1つのHDMI出力
PCI IDだけでは不十分です。他のSM750カードはVGA、異なるトランスミッター、または異なるGPIO配線を使用している可能性があり、現在サポートされていません。
インストール
Ubuntu 24.04およびLinux Mint 22ユーザーは、ローカルでDKMSパッケージをビルドできます:
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
再起動が重要です。これにより、Linuxの古いsm750fbドライバーがカードを占有する前に、パッケージがブラックリストに登録されます。パッケージ名はsm750hdmifbで、カーネルモジュールはsm750hdmidrm.koなので、sm750fb.koと混同することはありません。
カーネル互換性
このドライバーはLinux 6.17以降を対象としています。DKMSは、必要なDRMインターフェースがこのプロジェクトでサポートされていないため、古いカーネルを意図的に拒否します。ソースコードには、Linux 6.17から6.xシリーズ、およびLinux 7.0以降の互換性パスがあります。現在、6.17および7.0のUbuntuカーネルに対してビルドされ、完全なテストスイートに合格しています。手動CIワークフローは、Ubuntu 24.04の6.17カーネルヘッダーに対してもビルドされます。固定の上限バージョンはありませんが、将来のカーネルで内部DRM APIが変更される可能性があります。これはアウトオブツリードライバーであるため、対象範囲の6.17+内であっても、新しいカーネルバージョンではソースコードの更新が必要になる場合があります。プリビルドパッケージは、利用可能な場合、GitHub Releasesで公開されます。DKMSはインストールされているカーネルヘッダーに対してコンパイルするため、ローカルでのビルドが推奨されます。
通常の使用
デフォルトでは、ドライバーは以下の設定で行われます:
モニターのEDIDモードを使用
帯域幅節約カラー変換と更新最適化
ハードウェアカーソルを使用
ワーカーで更新を結合
DMAで8行バッチをアップロード
DMAが失敗した場合は安全にフォールバック
アプリケーションは引き続き32ビットカラーでレンダリングされます。アップロードの直前に、ドライバーは変更された画面領域をRGB565に変換し、KodeMunkieのオーダーディザリングと94%のグリーンチャンネル補正を適用します。これはデフォルト設定です。なぜなら、SM750フレームバッファーはPCIe 1.1 x1リンクを介してアクセスされるためです。より高い解像度では、そのリンクは応答性の高いフルスクリーン32ビット更新を提供できません。XRGB8888は出力ピクセルあたり4バイトを送信するのに対し、RGB565は2バイトを送信します。したがって、ディザリングされたRGB565は、表示されるカラーの詳細の多くを維持しながら、デバイスへのピクセルトラフィックを半分にします。
一般的なカーネルまたはGRUBオプション:
表は、読みやすくするために一般的なsm750hdmidrm.プレフィックスを省略しています。例えば、enable_dma=0をGRUBでsm750hdmidrm.enable_dma=0として入力します。
オプションとデフォルト
指定するタイミング
効果とトレードオフ
scanout_format=rgb565-bbdither
デフォルト: rgb565-bbdither
必要ありません。これは推奨されるデフォルトです。
グリーン補正付きのディザリングされた16ビットスキャンアウト
scanout_format=xrgb8888
デフォルト: rgb565-bbdither
32ビットスキャンアウトのみ
RGB565、ディザリング、グリーン補正を無効にします。アップロードトラフィックを倍増させ、高解像度では遅延が発生する可能性があります。
scanout_format=rgb565
デフォルト: rgb565-bbdither
プレーンRGB565のみ
ディザリングとグリーン補正を無効にし、カラー品質を低下させます。
dither_green_gain=94
デフォルト: 94
必要ありません。補正はデフォルトでオンです。
ディザリング中に調整されたグリーン補正を有効にします。
dither_green_gain=100
デフォルト: 94
グリーン補正をオフにする
ディザリングは維持しますが、緑色がかった色合いになる可能性があります。
enable_dma=1
デフォルト: 1
必要ありません。DMAはデフォルトでオンです。
CPUフォールバック付きの検証済み8行DMAアップロード
enable_dma=0
デフォルト: 1
DMAを無効にする
通常、更新パフォーマンスが低下するCPUアップロードを強制します。
disable_hardware_cursor=1
デフォルト: 0
ソフトウェアカーソルフォールバック用
ハードウェアカーソルを無効にし、カーソルの応答性を低下させる可能性があります。
edid_only=0
デフォルト: 1
ドライバーカタログとウルトラワイドモードに必要
DANGEROUS: EDIDによるモニターがサポートしていない可能性のあるモードとクロックの制限を停止します。
softscale_wide=1
デフォルト: 0
2464x1080および2560x1080に必要。edid_only=0も設定してください。
DANGEROUS / EXPERIMENTAL: ワイド圧縮を有効にし、モニターのストレッチが必要です。
sharpen=1
デフォルト: 0
ウルトラワイドモードで推奨
圧縮後に固定8%コントラストシャープニングを追加します。
double_shadow=1
デフォルト: 0
冗長なアップロードを避けるために推奨
ソースと出力の比較スナップショットを追加します。変更されていないピクセルをスキップしますが、より多くのシステムメモリを使用します。これはフロント/バックページフリッピングではありません。
async_updates=1
デフォルト: 1
必要ありません。デフォルトで有効です。
古いフレームをキューに入れるのではなく、最新の保留中の更新のみを保持します。
/etc/default/grubの既存のGRUB_CMDLINE_LINUX_DEFAULT値にオプションを追加し、以下で適用します:
sudo update-grub
sudo reboot
すべてのオプションとそのデフォルトは、モジュールパラメータにリストされています。
ウルトラワイドスケーリング
このデバイスは通常、最大1920ピクセル水平解像度をサポートすると記述されています。edid_only=0を使用すると、ドライバーはこれらの実際の2048ピクセル幅のハードウェアモードも公開します:
デスクトップとHDMIモード
リフレッシュレート
出力とリスク
2048x864
59.94、60、70、72、75 Hz
ネイティブまたはモニターのスケーリング。EXPERIMENTAL: EDIDによって制限されません。
2048x1024
59.94、60、70、72 Hz
ネイティブまたはモニターのスケーリング。EXPERIMENTAL: EDIDによって制限されません。
2048x1080
50、59.94、60、70、72、75 Hz
ネイティブまたはモニターのスケーリング。EXPERIMENTAL: 高リフレッシュレートは仕様を超える可能性があります。
2048x1152
59.94、60 Hz
ネイティブまたはモニターのスケーリング。EXPERIMENTAL: EDIDによって制限されません。
softscale_wide=1は、2つのより広い論理デスクトップを追加します。どちらも、オンスクリーンメニューでFULL WIDESCREEN STRETCHが有効になっている物理的な2560x1080ウルトラワイドモニターが必要です:
論理デスクトップ
物理モニター
幅比率
HDMIとモニターパス
2464x1080
2560x1080
77:64 (16.9%圧縮)
2048x1080 -> 2560x1080 ストレッチ
2560x1080
2560x1080
5:4 (20%圧縮)
2048x1080 -> 2560x1080 ストレッチ
モード
リフレッシュレート
ガイダンス
2464x1080
50、59.94、60、70、72、75 Hz
推奨: より詳細で応答性が向上します。sharpen=1を有効にしてください。
2560x1080
50、59.94、60、70、72、75 Hz
詳細が少なくパフォーマンスが低下します。圧縮による幅が広いためです。理由を参照してください。
両方のモードで、HDMI信号は2048x1080から2Kウルトラワイドモニターの物理的な2560x1080ピクセルにストレッチされます。2048ピクセルは、このカードがハードウェアで生成できる最も高い実際の幅です。SM750のプライマリグラフィックスプレーンには11ビットの右端フィールドがあるため、物理的なスキャンアウト幅は2048ピクセルを超えることはできません。これはハードウェアの制約であり、高さを減らしても、より多くの水平ビットが解放されるわけではありません。2464および2560モードはソフトウェアでより広いワークスペースを作成しますが、カードは依然として2048ピクセル幅の信号のみを出力します。意図した結果を得るには、フル幅またはフルワイドスクリーンストレッチオプションが有効になっているウルトラワイドモニターが必要です。
完全なパスは次のとおりです:
論理デスクトップ -> ドライバー圧縮 -> 2048x1080 HDMI -> モニターによる2560x1080物理ピクセルへのストレッチ
モニターのストレッチ設定は、圧縮された2048ピクセルHDMI画像を、2560物理パネルピクセル全体に空間的に拡張します。失われたソースデータを復元しているわけではありませんが、意図したウルトラワイド画面カバレッジを回復し、意図したアスペクト比をほぼ回復します。2464モードは意図的に小さなアスペクト比の違いを保持しているため、「正しい」見た目は主観的です。
なぜ2464x1080が推奨されるのか
2560x1080の場合、ドライバーは2560から2048ピクセルへの最適化された5:4の縮小(20%の水平圧縮)を実行します。次に、2560幅のモニターが2048ピクセル信号をパネル全体に25%拡張します。これにより、真の2560x1080サイズのワークスペースが提供されますが、一部の細かい水平