Di mana negosiasi lebar tautan PCI-E terjadi?

8

Saya mencoba mendiagnosis kartu PCI-E yang berkinerja buruk di sistem saya, dan saya menyadari bahwa itu menegosiasikan lebar tautan yang salah. Secara khusus, dari berlari lspci -vv, saya melihat:

LnkCap: Port #1, Speed 8GT/s, Width x8, ASPM L1, Exit Latency L0s <4us, L1 <4us
        ClockPM- Surprise- LLActRep- BwNot-

sementara

LnkSta: Speed 8GT/s, Width x4, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-

Pertanyaan saya adalah: apakah negosiasi ini terjadi di tingkat perangkat keras atau di tingkat perangkat lunak? Dengan kata lain, apakah kartu bernegosiasi langsung dengan slot PCI-E, atau apakah ini terjadi di suatu tempat di driver?

(Jika ini ternyata jawaban yang jelas, tolong maafkan saya ... setelah mencoba mendiagnosis ini selama seminggu, pikiran saya agak digoreng.)

tonysdg
sumber

Jawaban:

17

Ini dilakukan pada tingkat listrik, bukan oleh perangkat lunak. Dua register yang Anda daftarkan di atas, LNK_CAP dan LNK_STA adalah apa yang Anda catat dengan benar sebagai 'Inilah yang mampu dilakukan tautan' dan 'Di sini status saat ini'. Ada juga SLT_CAP dan SLT_STA, yang mungkin layak dilihat karena khusus untuk 'slot' yang diberikan dalam mesin.

Spesifikasi PCIe mendefinisikan LTSSM - Pelatihan Link dan Status Status Machine. Pada tingkat PHY / perangkat, inilah yang menentukan kecepatan maksimum kedua perangkat yang didukung, lebar tautan maksimum yang didukung kedua perangkat, dan ini juga di mana pembalikan polaritas / pembalikan jalur ditangani (untuk membuat tata letak lebih mudah bagi kita, spesifikasi memungkinkan P / N untuk ditukar, dll).

masukkan deskripsi gambar di sini

Perangkat mengirim satu set simbol yang diketahui dan dipesan satu sama lain dan perangkat kerasnya bekerja naik dari 2.5GT / s. Ada perintah perubahan kecepatan yang dapat dikirim satu sama lain, dan di sinilah pengaturan penyamaan saluran juga ditentukan.

Jika Anda menautkan dengan kecepatan yang salah, mungkin saja porta PCIe dikonfigurasi salah, atau ada masalah integritas sinyal yang memaksa lebar tautan lebih rendah. Dalam pengalaman saya, jika Anda menghubungkan pada 5 GT / s bukannya 8 GT / s, itu lebih merupakan masalah SI - menghubungkan di x4 8 GT / s bukannya x8 8 GT / s sepertinya merupakan masalah konfigurasi, atau mungkin menambahkan kartu ke slot yang tidak mendukung lebar x8.

Register kemampuan kompleks akar (Offset 04j) akan mengungkapkan lebar maksimum yang didukung, yang mungkin membantu dengan diagnostik Anda. IIRC, -x akan membuang ruang konfigurasi 4K pertama, -xx atau -xxx akan membuang ruang konfigurasi tambahan PCIe. Jika Anda membuang seluruh ruang konfigurasi Anda di sini / melewatinya, saya mungkin bisa menggalinya untuk Anda, tetapi Linux melakukan pekerjaan yang baik untuk memecahkan kode apa yang register lakukan.

Krunal Desai
sumber
2
Saya tidak yakin apa yang lebih menarik dari jawaban ini - bahwa itu sangat detail (serius, ini indah, dan saya suka belajar hal-hal baru), atau itu membantu saya memecahkan masalah dalam waktu sekitar 5 menit. Saya akhirnya harus memodifikasi konfigurasi di papan saya - ini adalah papan dev dan sepertinya sudah diatur ulang di beberapa titik.
tonysdg