Где происходит согласование ширины канала PCI-E?

8

Я пытаюсь диагностировать неэффективную карту PCI-E в моей системе, и я понял, что она согласовывает неправильную ширину канала. Конкретно из бега lspci -vvя вижу:

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

пока

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

Мой вопрос: это согласование происходит на аппаратном или программном уровне? Другими словами, карта согласовывается напрямую со слотом PCI-E или это происходит где-то в драйверах?

(Если это окажется очевидным ответом, пожалуйста, прости меня ... после попытки диагностировать это в течение недели, мой разум немного жарен.)

tonysdg
источник

Ответы:

17

Это сделано на электрическом уровне, а не с помощью программного обеспечения. Два регистра, которые вы перечислили выше, LNK_CAP и LNK_STA - это то, что вы правильно отметили как «Вот то, на что способна ссылка» и «Вот текущий статус». Есть также SLT_CAP и SLT_STA, на которые, возможно, стоит обратить внимание, так как они специфичны для данного «слота» в машине.

Спецификация PCIe определяет LTSSM - механизм обучения линии связи и состояния. На уровне PHY / устройства это то, что определяет максимальную скорость, которую поддерживают оба устройства, максимальную ширину линии связи, которую поддерживают оба устройства, и это также, где обрабатывается смена полярности / смена полосы движения (чтобы упростить расположение для нас, спецификация позволяет P / N для замены и т. Д.).

введите описание изображения здесь

Устройства посылают друг другу известные, упорядоченные наборы символов, а аппаратное обеспечение работает с 2,5 Гт / с. Существуют команды изменения скорости, которые можно отправлять друг другу, и здесь также определяются настройки выравнивания канала.

Если вы подключаетесь с неправильной скоростью, возможно, неверно настроен корневой порт PCIe или что проблема целостности сигнала вынуждает уменьшить ширину канала. По моему опыту, если вы подключались со скоростью 5 ГТ / с вместо 8 ГТ / с, то это скорее проблема СИ - соединение с x4 8 ГТ / с вместо x8 8 ГТ / с кажется проблемой конфигурации, или, возможно, добавление карты в слот, который не поддерживает ширину х8.

Регистр корневых комплексных возможностей (смещение 04h) покажет максимальную поддерживаемую ширину, которая может помочь с вашей диагностикой. IIRC, -x сбросит первые 4K конфигурационного пространства, -xx или -xxx сбросит расширенное конфигурационное пространство PCIe. Если вы сбросите все свое конфигурационное пространство здесь / вставите его, я, возможно, покопаюсь для вас, но Linux отлично справляется с расшифровкой того, что делают регистры.

Крунал Десаи
источник
2
Я не уверен, что является более захватывающим в этом ответе - что он настолько изысканно детален (серьезно, это красиво, и я люблю узнавать что-то новое), или что он помог мне решить проблему примерно за 5 минут. В итоге мне пришлось изменить конфигурации на моей плате - это плата разработчика, и похоже, что в какой-то момент ее сбросили.
tonysdg