LINUX.ORG.RU

Инструменты для отладки PCIe

 , ,


0

3

Привет, не подскажите инструменты для отладки PCIе? Суть проблемы: есть девайс и хост, на девайсе вроде генерирую исходящую транзакцию(таблицы трансляции настроены), а что данные приходят на хост - сомнительно. Хотелось бы механизм чтобы это проверить. Короче говоря чем можно послушать PCIe шину? (желательно получить отчеты в виде TLP)

Я не разбираюсь в теме и не могу сказать подойдёт ли этот способ тебе, но разработчики nouveau при реверс-инженеринге официальных драйверов NVidia перехватывали данные обмена с видеокартой при помощи mmiotrace.

Deleted
()
Ответ на: комментарий от Deleted

Ага, спасибо за наводку. Но хотелось бы большего, насколько я понимаю это inbound транзакции. Мне бы хотелось увидеть также outbound от устройства. Изначально, желание проследить за msi прерываниями, а это по сути outbound транзакции в контроллер хоста.

tthread
() автор топика

тогда тебе только что-нить такое нужно.

http://www.home.agilent.com/agilent/editorial.jspx?cc=RU&lc=rus&ckey=...

можно ещё стандарт покурить в районе pci express bridge, может что и можно придумать.

я только для эмулятора девайсы делал, там всё просто, транзакции на шине просто так не пропадают.

pci configuration читается, пишется? через command memory master включил, а легаси прерывания запретил?

dimon555 ★★★★★
()
Ответ на: комментарий от dimon555

да вроде все верно, считываю MSI Register (MSI Address, MSI Data) делаю устройство мастером шины, легаси запрещаю, настраиваю таблицы inbound/outbound транзакций на устройстве, вроде все верно. Вот только меня смущает что MSI Data = 0x0000, адрес валидный из local APIC. Ну и записываю с девайса в MSI Address содержимое даты. На хосте прерывания не происходит (/proc/interrupts 0 прерываний на всех ядрах). Пробывал протестить outbound транзакции - работает, корректно пишет в системную память.

Кстати, а если я возьму и нагло запишу через /dev/mem в MSI Address MSI-дату должно произойти прерывание?

tthread
() автор топика

Тут два варианта - дорогой и бесплатный. Дорогой - это TLA* от Tektronix или аналоги от других производителей. Бесплатный - это работа с эмулятором/гипервизором, с пробросом PCIe устройств.

Я видел еще сниффер PCIe в виде небольшой платы, вставляющийся в разьем, и имеющий свой собственный. Но вот не могу вспомнить производителя. Это более доступное решение, чем всякие Tektronix-ы c Agilent-ми.

XVilka ★★★★★
()
Последнее исправление: XVilka (всего исправлений: 1)
Ответ на: комментарий от XVilka

ясно, спасибо. а в случае работы через эмулятор, чем проснифить? какой, так сказать, тех. процесс?

tthread
() автор топика
Ответ на: комментарий от tthread

Кстати, а если я возьму и нагло запишу через /dev/mem в MSI Address MSI-дату должно произойти прерывание?

да должно, можешь проверить на любом девайсе другом

dimon555 ★★★★★
()
Ответ на: комментарий от dimon555

Записать как оказывается просто так в девмем и сгенерировать прерывание оказывается нельзя. Ну по крайней мере у меня так это и не вышло ни на одном из устройств. Честная же PCIe outbound транзакция по этому адресу успешно прерывание вызывает.

Проблема моя была в том что не верно формировал outbound таблицу трансляции адресов и получалось так что отображение проходило на тестовых адресах (в систем рам), а на маске 0xfee00FFF - нет.

PS: MSI Data 0x0000 вполне себе валидная дата

(оставил это здесь, вдруг кому пригодится)

tthread
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.