Перейти к содержанию
    

Altera CV PCIe: не приходят completion-транзакции

Доброго времени суток.

 

Прошу помощи и совета! Имеется PCIe x1 1.0 устройство на базе Altera Cyclone V GX (Hard IP PCIe endpoint). Данное устройство успешно конфигурируется/отображается на шине и предоставляет работу с внутренними регистрами (чтение/запись), однако в определенных слотах различных мат. плат на MemRd-запрос устройства (EP) от rootport'а не приходит completion-транзакция с данными. Имеется трасса PCIe обменов (PETracer.jpg): RP успешно читает (MRd 52866, ACK 82868 и Cpl 52869) и записывает (MWr 52871, ACK 52872) в регистры устройства, однако RP не отвечает данными на запрос чтения (MRd 52874, ACK 52875) от EP. Данная проблема встречается не на всех платах. Так же имеется PCIe конфигурация устройства:

 

-----------------------------------------------------------
PCI bus 02 device 00 function 00:  Header Type 'non-bridge' (single-func)
Vendor:    1172    ???                                               
Device:    F016    ???                                               
Class:      02    network                 Revision:    00
SubClass: 00    Ethernet                ProgramI/F:    00
CommandReg:     0006 = mem-on busmstr
Status Reg:     0010 = CapList (fast)
CacheLine:       01    Latency:    00    BIST:         00
SubsysVendor:    0000    SubsysDevice: 0000
Base Addresses:
    (0) FBBFF000 = mem base=FBBFF000 len=128
CardBus:     00000000    ExpansionROM: 00000000 (no ROM)
INTline:       0A    INTpin:       01
MinGrant:       00    MaxLatency:   00
Device-Specific Data:
40: 00000000  02006160  00000000  00000000  00847805  00000000 
58: 00000000  00000000  00000000  00000000  00007811  00000000 
70: 00000000  00000000  00038001  00000000  00020010  07E88000 
88: 00002810  01406011  10110000  00000000  00000000  00000000 
A0: 00000000  0000001F  00000000  00000000  00010001  00000000 
B8: 00000000  00000000  00000000  00000000  00000000  00000000 
D0: 00000000  00000000  00000000  00000000  00000000  00000000 
E8: 00000000  00000000  00000000  00000000  00000000  00000000 
Capabilities List:
    ID @50 = 05 Message Signaled Interrupt (MSI)

-----------------------------------------------------------

 

post-87707-1446020033_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вы корку используете как streaming или как memory mapped?

 

Если как стриминг, то соответсвтенно сами формируете заголовок pcie пакета. Обратите внимание какой request id проставляете в запросе. Там нужно ставить номер шины, номер функции и т.п. хоста. Если на одной машине плата засунута в один слот, то номер шины у нее может быть скажем 2. А на другой машине плата засунута в другой слот и номер шины будет уже 1. Можно посмотреть с помощью команды lspci, на какой шине сидит ваша плата (под линуксом).

 

Вон у вас в логе bus 02 device 00 function 00. А на картинке request id 000:00:0.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, Вы правы - в результате ошибки устройство в Requester ID заголовка всегда выставляло номер шины 0x01. После исправления все успешно заработало, спасибо Вам!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...