-
Notifications
You must be signed in to change notification settings - Fork 5
PCI Memo
PCI および PCIe についてのメモ書き
2016/05/02 by uchan
PCI / PCIe は拡張カードを挿すだけでなく、オンボード NIC や SATA ディスクもつながる、重要なバス。 PCI デバイスは統一的な手法で識別できるので、PCI バスを一度扱えるようになると世界が広がる。
最終的に SATA ディスクを制御することを目標に、しかし知的好奇心が満たされるよう、最短経路よりは少し豊富な情報を提供する。 PCI ホストブリッジについて、PCI デバイスの列挙方法、PCI-PCI ブリッジの仕組み、PCI コンフィグレーションレジスタ、BAR とメモリマップといった話題を扱う。
本来 PCI バスはコンピュータ自体のアーキテクチャには依存しないが、ここでは PC/AT 互換機を前提として記述する。
PCI バスの信号タイミングなどの電気的特性の話は扱わない。
PCI ホストブリッジは CPU 側のバスと PCI バスを仲介する部品。
PCI デバイスは、制御のためのレジスタを I/O 空間やメモリ空間にマップして使う。したがって、メモリアドレス空間の中の特定のアドレス範囲を PCI バスへ転送するために、PCI ホストブリッジにはアドレス範囲を設定できる必要がある。さもないと、CPU がメインメモリを読み書きしようとしてホストブリッジが反応してしまい、大変なことになる。
Intel のチップセット(Mobile Intel GS45 Express →データシート)のホストブリッジでは TOLUD レジスタがその機能を提供する。大雑把に区分すると 0 から TOLUD が DRAM、TOLUD から 4GB が PCI や APIC などのメモリマップトレジスタとなっている。TOLUD は起動時に初期化プログラム(BIOS)が適切な値を設定することになっている(すなわち、BIOS はメモリの大きさを計測し、被らない位置に TOLUD を設定する)。