Поддержка системной логикой AMD X570 шины PCI Express Gen4 делает материнские платы на этом чипсете объектом исследовательского интереса — какое место в регистровом пространстве занимает базовая инновация PCIe 4.0 — функциональность Lane Margining. Прежде, чем приступить к анализу полученных результатов, вернемся к основам PCI Express.
Физические основы
Обмен информацией по PCIe-шине требует ряда достаточно сложных процедур инициализации, основанных на оценке состояния интерфейсных цепей. Базовые операционные параметры порта, такие как ширина шины и полоса пропускания, устанавливаются в ходе процедуры Link Training, на основе формирования и последующей верификации специальным образом сформированных данных — паттернов. С увеличением производительности PCI Express Gen4 до 16 GT/S стала насущной дополнительная процедура — упомянутая выше Lane Margining, в ходе которой выполняется прецизионная аналоговая (вернее, дискретно-аналоговая) настройка амплитудных и временны́х характеристик шины.
Зачем нужен Lane Margining?
В силу очевидных причин, стабильная работа устройств на сверхвысоких частотах становится невозможной без предварительной «юстировки» канала связи. Для выполнения этой процедуры параметры передатчика (задачей которого является формирование тестового сигнала) и приемника (задачей которого является анализ искажений тестового сигнала) должны контролироваться с существенно большей точностью, чем при обычном взаимодействии устройств в рабочем сеансе.
В соответствии с архитектурными принципами PCIe 4.0, цифровые автоматы, контролирующие формирование и прием тестовых сигналов, снабжены унифицированными средствами протоколирования событий и специальными регистрами, прочитав содержимое которых, системное программное обеспечение может получить информацию о качестве линии связи, а если произошла значительная деградация параметров соединения — уточнить ее причину и номер шага диагностического алгоритма, на котором произошел фатальный сбой.
Именно такой архитектурный подход и позволяет говорить о применении дискретно-аналоговых систем. Какие регистры системной логики AMD X570 связаны с этим диагностическим механизмом?
На тестовом стенде
ASUS TUF Gaming X570-Plus
Исследования проведем на платформе ASUS TUF Gaming X570-Plus, где установлен процессор AMD Ryzen 5 3400G, объем оперативной памяти составляет 16ГБ (комплект DIMM-модулей HyperX Savage HX430-C15SBK4/16). Накопитель — WD Green PC SSD. Блок питания — Seasonic Focus Plus 650 Platinum. Системная логика декларирует наличие PCIe Gen4, в то время как установленный центральный процессор Ryzen 5 3400G, согласно описанию, поддерживает максимум PCIe Gen3, причем с шириной шины x8. Как известно, одним из главных потребителей PCIe-трафика является дискретный видео адаптер, традиционно подключаемый к PCIe интерфейсу в составе CPU, в то время как установленный процессор, очевидно «делает ставку» на интегрированную графику.

С помощью утилиты RWEverything получим дамп конфигурационного PCI-пространства, адресуемого как диапазон памяти MCFG (memory-mapped configuration). Сохраненный бинарный файл расшифруем кросс-платформенной Java-утилитой PCIDump, которая, используя открытую базу данных производителей и устройств, генерирует текстовый рапорт.
В соответствии с целью эксперимента, акцентируем внимание на регистровых полях, присутствующих в детализации некоторых устройств системной логики
- 0026 = Physical Layer 16.0 GT/S
- 0027 = Lane Margining at the Receiver
Указанные регистровые поля являются так называемыми Extended Capability структурами, их формат унифицирован спецификацией PCI Express, а не разработчиками системной логики AMD X570. Это делает возможным их расшифровку и анализ.
Помогает IBM
Спецификация PCI Express является конфиденциальным документом. Кроме того, обновление первоисточника происходит с некоторым запаздыванием. Но в силу кросс-платформенности PCIe-шины, нужную информацию иногда удается найти в документации на альтернативные платформы. В данном случае, полезной оказалась спецификация на IBM Power Systems Host Bridge 4, где присутствует побитная расшифровка ряда регистров, составляющих программную модель PCIe Gen4 устройств.

Регистр Extended Capability Header Register используется для обнаружения заданной структуры в связанном списке. Одна из исследуемых структур (Physical Layer 16 GT/S) идентифицируется кодом ID = 0026h.

Регистр 16GT/S Status Register отражает результат инициализации интерфейса для работы в режиме данной полосы пропускания.
Предметом кросс-платформенной стандартизации являются идентификаторы Extended Capability ID, принцип сканирования связанного списка структур, а также форматирование битовых полей внутри них. В то время как абсолютные адреса, по которым структуры расположены в регистровых блоках, для проанализированных устройств AMD и IBM, ожидаемо различны.
Нули и единицы Extended Capability
В начале рапорта содержится список обнаруженных на системной плате ASUS TUF Gaming X570-Plus устройств, вслед за ним — детализация и шестнадцатеричный дамп регистров для каждого устройства.

Для удобства изучения, в этой и двух последующих иллюстрациях сохранены номера строк текстового рапорта.

Устройство содержит искомую структуру, но статусный регистр, расположенный по смещению 000Ch=12 относительно ее начала, обнулен. Инициализация интерфейса для работы с полосой пропускания 16 GT/S, не выполнена.

Устройство содержит искомую структуру, статусный регистр содержит 0Fh=000001111b. Выполнена инициализация интерфейса.
Трактовки и комментарии
Полный список устройств, декларирующих функциональность Physical Layer 16.0 GT/S и Lane Margining at the Receiver, заинтересованный читатель может проанализировать самостоятельно, используя прилагаемый рапорт или повторив операцию на собственной платформе. Статусный регистр PCIe-моста системной логики AMD X570, детализация которого приведена выше, в битах [0-3] отражает результат инициализации канала связи и позволяет определить фазу выполнения процесса, на которой имела место ошибка. Бит [4] индицирует запуск инициализации. Полная информация, формируемая в результате операций Link Training и Lane Margining, включает сотни регистровых полей, описание лишь некоторых из них можно найти в упомянутом документе от IBM.
- Структура Physical Layer 16.0 GT/S, идентифицируется кодом ID=0026h, располагается в регистровых блоках системной логики AMD по адресу 0410h и детализована в разделе 4.5.7 P16 - Physical Layer 16 GT/s Extended Capability Registers.
- Структура Lane Margining at the Receiver, идентифицируется кодом ID=0027h, располагается в регистровых блоках системной логики AMD по адресу 0440h, детализована в разделе 4.5.8 LMR — Lane Margining at the Receiver Extended Capability Registers.
Важным свойством ряда регистровых полей является возможность программно идентифицировать номера дифференциальных пар интерфейса, в которых имели место ошибки. Еще раз напомним, предметом унификации являются идентификаторы и внутреннее форматирование регистровых полей, в то время как их абсолютные адреса в регистровых блоках устройств AMD и IBM, различаются. Абсолютные адреса рассмотренных регистровых полей могут измениться после обновления firmware платформы.
Трактовка статусной информации требует вдумчивого и осторожного подхода, дифференцирующего как минимум два возможных состояния:
- Исследуемая операция состоялась, статус достоверен и может быть истолкован по документации;
- Содержимое статусного регистра недостоверно, так как исследуемая операция не выполнялась — трактовка не уместна.
И про инструментарий
Методика, основанная на представлении конфигурационного PCI-пространства в виде бинарного файла оптимальна для первичного обзора платформы. Одним из недостатков представления «живой» системы в виде двоичного образа является невозможность записи в регистры и моделирования выполнения команд. Кроме того, сохранение файла, объемом 64-256 мегабайт может занять несколько минут или даже десятков минут, хотя в типовом случае файл содержит разреженные данные и неплохо архивируется.
Для решения как серьезных, так и экзотических исследовательских задач, (например, для оценки зависимости качества передачи СВЧ-сигналов от угла наклона видео адаптера в PCIe-слоте) удобнее использовать online-диалог с регистрами устройства. Вероятность зависания платформы с необходимостью последующей перезагрузки уменьшится, если перенести эксперименты из среды ОС в UEFI.
Приступая к опытам с оборудованием, уместно вспомнить о резервном копировании, программаторе для восстановления BIOS, UEFI, firmware и других страховочных мерах.