Pericom Semiconductor PI7C9X111SLチップを使用して、DebianコンピュータにPCIe-PCI可逆ブリッジを取り付けました。このPCIeカードには2つの新しいPCIカードスロットがあります。ブリッジのPCI IDは12d8:e111のようです。 Linux PCIテキストファイルには、「Pericom」、「PI7C9X111SL」、「12d8」、および「e111」)がすべてリストされています。
/usr/share/misc/pci.ids
ように:
12d8 Pericom Semiconductor
e111 PI7C9X111SL PCIe-to-PCI Reversible Bridge
とにかく「lspci -knn」と入力すると、次の行が表示されます。
04:00.0 Non-VGA unclassified device [0000]: Pericom Semiconductor PI7C9X111SL PCIe-to-PCI Reversible Bridge [12d8:e111] (rev 02)
だからDebianはこのPCIeカードで何をすべきかわからないようです。私は次の歩みがわからなかった。このコンピュータのすべてのDebianパッケージは最新バージョンです。私はDebian 9.0を実行しており、 "uname -a"は以下を提供します:
Linux ##### 4.9.0-1-amd64 #1 SMP Debian 4.9.6-3 (2017-01-28) x86_64 GNU/Linux
今後追加予定...
Debianシステムを起動した後、dmesgで次の関連ログを見つけました。
[ 0.220250] pci 0000:03:00.0: disabling ASPM on pre-1.1 PCIe device. You can enable it with 'pcie_aspm=force'
[ 0.220256] pci 0000:00:0c.0: PCI bridge to [bus 03]
[ 0.220258] pci 0000:00:0c.0: bridge window [io 0xa000-0xafff]
[ 0.220260] pci 0000:00:0c.0: bridge window [mem 0xfde00000-0xfdefffff]
[ 0.220262] pci 0000:00:0c.0: bridge window [mem 0xfdd00000-0xfddfffff 64bit pref]
[ 0.224007] pci 0000:04:00.0: [12d8:e111] type 01 class 0xffffff
[ 0.224011] pci 0000:04:00.0: ignoring class 0xffffff (doesn't match header type 01)
後で追加するには、次のコマンドを使用します。
lspci -s 04:00.0 -xxx
私は次のような答えを受けました。
04:00.0 Non-VGA unclassified device: Pericom Semiconductor PI7C9X111SL PCIe-to-PCI Reversible Bridge (rev ff)
00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
私の仮定は、ボードメーカーがチップを正しくプログラムしていないことです(たとえば、「まったくプログラムしていません」)。上記のデータに「クラス」があるかどうかはわかりません。上記のデータの位置であれば。しかし、クラスと上記のデータの両方が0xffであることを考慮すると、有罪と思われます。
予期しない奇妙な動作(この問題を特定したら、この質問を修正します)。
コマンドを繰り返すと:
lspci -s 04:00.0 -xxx
私は別の結果を得ます。おそらく、コマンド(またはPCIブリッジ)がEEPROMメモリの他のページを介して繰り返されており、各ページの長さは256バイトですか?そうは思えません。あるいは、EEPROMを読み取ることは信頼できないかもしれません。失敗モードは、0xff を再読み込みすることです。これはもっと意味があります。 EEPROMを十分に読み直すと、やや大きな応答が得られます。
04:00.0 Non-VGA unclassified device: Pericom Semiconductor PI7C9X111SL PCIe-to-PCI Reversible Bridge (rev 02)
00: d8 12 11 e1 00 00 10 00 02 00 04 06 00 00 01 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 01 01 a0 02
20: 00 00 00 00 01 00 01 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 80 00 00 00 00 00 00 00 00 01 00 00
40: 20 00 20 09 00 00 00 00 1f 80 40 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 08 00 b8 00 00 00 00
70: 80 00 00 00 00 00 00 00 00 00 00 d0 00 00 00 00
80: 07 90 00 00 f8 ff 00 00 10 00 10 00 10 00 10 00
90: 01 a8 43 c8 00 00 00 00 00 00 00 00 00 00 00 00
a0: 04 b0 00 00 ff ff ff ff ff ff ff ff ff ff ff ff
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
trueの場合、EEPROMの読み取りは信頼できず、Pericomチップとの他の通信に問題がある可能性があります。これをテストするために、この問題を軽減するために何ができるか疑問に思います。可能であれば、PCIeバスクロックを遅くしたり変更したりしますか?
ベストアンサー1
部分的な答え:何が間違っているのか教えてもらえますが、解決策がわかりません。
drivers/pci/probe.c
Linuxカーネルのソースコードでエラーメッセージを調べると、カード(1)にPCIクラス(0x0604)PCI_HEADER_TYPE_BRIDGE
があることがわかります。PCI_CLASS_BRIDGE_PCI
しかし、あなたのPCIカードにはクラス0xffff(つまり、製造元/販売代理店がクラスを正しく設定していない)があるため、ドライバは何か不審だと思ってこのブリッジを使用したくありません。ブリッジが正しいドライバによって初期化されていない場合、当然その背後にカードは表示されません。
この問題に対する解決策は、(1)カーネルをパッチしてカードの例外を設定するか、(2)カードに適したクラスを提供することです。
Google検索でこのチップのデータシートが表示されました。ここ、原則として、問題を解決するために必要なすべての情報があります。構成レジスタマップ(6.1)セクションでは、このデータがEEPROMに格納されることを示し、I2Cについて別々に以下の説明を提供します。 SMBUSアクセス:
注1:迷彩が有効になっている場合は、事前ロードが可能です。
注2:VPDデータは、VPD動作中にI2Cを介して読み書きされます。
したがって、何らかの方法でこれらの値をオーバーライドすることが可能でなければなりません。これについての詳細はセクション10にありますが、問題はI2C / SMBusが最初にどこかに接続されているかどうかです。 PCIeカードにあるので、おそらくそうではありません。ただし、セクション6.3.91/92を見ると、VPDレジスタを介してEEPROMに書き込むことができるようです。これを正確に行う方法を理解するには、より多くの作業が必要であり、自分で書いたCプログラムが必要になる場合があります。
編集する:良いこれらの書き込みアクセスにvpd
使用できるファイルがあります。ファイルが存在し、どこかに呼び出されるか、間違ったクラスのために欠落していることを/sys/
確認してください。そのようなファイルがある場合は、そのファイルを操作し、結果に基づいて質問を編集します。/sys/bus/pci/devices/0000:04:00.0/
vpd
hexdump -C
それにもかかわらず、これを行う前に残りの構成スペースの値を確認する必要があります。lspci -s 04:00.0 -x
、およびを使用してlspci -s 04:00.0 -xxx
ダンプ全体を完了できます。 (-xxx
マニュアルページに使用に関する警告がありますlspci
。非適格カードでは競合が発生する可能性がありますが、試してください。)したがって、結果に応じて質問を編集してください。このように、クラスが変更する必要がある唯一の値か、それ以上の値があるかどうかを確認する必要があります。