Gdzie odbywa się negocjacja szerokości łącza PCI-E?

8

Próbuję zdiagnozować słabo działającą kartę PCI-E w moim systemie i zdałem sobie sprawę, że negocjuje nieprawidłową szerokość łącza. W szczególności po uruchomieniu lspci -vvwidzę:

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

podczas

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

Moje pytanie brzmi: czy negocjacje odbywają się na poziomie sprzętu czy oprogramowania? Innymi słowy, czy karta negocjuje bezpośrednio z gniazdem PCI-E, czy dzieje się to gdzieś w sterownikach?

(Jeśli okaże się to oczywistą odpowiedzią, proszę wybacz mi ... po tym, jak próbowałem to zdiagnozować przez tydzień, mój umysł jest trochę usmażony.)

tonysdg
źródło

Odpowiedzi:

17

Odbywa się to na poziomie elektrycznym, a nie przez oprogramowanie. Dwa wyżej wymienione rejestry, LNK_CAP i LNK_STA, są tym, co poprawnie zapisałeś jako „Oto, do czego zdolny jest link” i „Oto obecny stan”. Istnieją również SLT_CAP i SLT_STA, które mogą być warte spojrzenia, ponieważ są specyficzne dla danego „gniazda” w maszynie.

Specyfikacja PCIe definiuje LTSSM - Link Training and Status State Machine. Na poziomie PHY / urządzenia to określa maksymalną prędkość obsługiwaną przez oba urządzenia, maksymalną szerokość łącza obsługiwaną przez oba urządzenia, i tutaj również obsługiwane jest odwrócenie polaryzacji / odwrócenie linii (aby ułatwić nam układ, specyfikacja umożliwia P / N do zamiany itp.).

wprowadź opis zdjęcia tutaj

Urządzenia wysyłają do siebie znane, uporządkowane zestawy symboli, a sprzęt działa w górę od 2,5GT / s. Istnieją polecenia zmiany prędkości, które mogą być do siebie przesyłane, i tutaj zdefiniowane są również ustawienia wyrównania kanału.

Jeśli łączysz się z niewłaściwą szybkością, możliwe, że port główny PCIe jest źle skonfigurowany lub że występuje problem z integralnością sygnału, który wymusza mniejszą szerokość łącza. Z mojego doświadczenia wynika, że ​​jeśli łączysz się z prędkością 5 GT / s zamiast 8 GT / s, to bardziej problem z SI - połączenie z prędkością x4 8 GT / s zamiast x8 8 GT / s wydaje się problemem z konfiguracją, lub może dodanie karty do gniazda, które nie obsługuje szerokości x8.

Rejestr możliwości złożonych systemów korzeniowych (Offset 04h) ujawni maksymalną obsługiwaną szerokość, która może pomóc w twojej diagnostyce. IIRC, -x zrzuci pierwsze 4K przestrzeni konfiguracyjnej, -xx lub -xxx zrzuci rozszerzoną przestrzeń konfiguracyjną PCIe. Jeśli zrzucisz całą przestrzeń konfiguracyjną tutaj / wkleisz ją, mogę ją dla ciebie przekopać, ale Linux wykonuje przyzwoite zadanie dekodowania czynności rejestrów.

Krunal Desai
źródło
2
Nie jestem pewien, co jest bardziej ekscytującego w tej odpowiedzi - że jest ona tak wyjątkowo szczegółowa (naprawdę, jest piękna i uwielbiam uczyć się nowych rzeczy), ani że pomogła mi rozwiązać problem w około 5 minut. Skończyło się na tym, że musiałem zmodyfikować konfiguracje na mojej płycie - jest to płyta programistów i wygląda na to, że w pewnym momencie została zresetowana.
tonysdg