g700 0 Posted January 24, 2020 (edited) · Report post Всем привет! Возникла проблема в конфигурации FPGA в режиме PCIE3.0 Tandem у отладочной платы KCU105. В проекте есть светодиод (led 0 на плате), который при второй стадии загрузки (по PCIE3.0) должен включатся. Порядок действий: Собираю проект design example. Констрейны для bitstream: Quote set_property CONFIG_MODE SPIx8 [current_design] set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 8 [current_design] set_property BITSTREAM.CONFIG.SPI_32BIT_ADDR YES [current_design] set_property BITSTREAM.CONFIG.EXTMASTERCCLK_EN div-1 [current_design] set_property BITSTREAM.CONFIG.SPI_FALL_EDGE YES [current_design] set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] После сборки генерирую MCS командой: Quote write_cfgmem -force -format mcs -checksum -size 32 -interface SPIx8 -loadbit "up 0x00000000 pcie3_ultrascale_0_ex.runs/impl_1/xilinx_pcie3_uscale_ep_tandem1.bit" spi.mcs Прошиваю конфигурационную память скриптом который есть в архиве program_spi.tcl Выключаю хост. Потом включаю. После загрузки вижу девайс: Quote $ lspci -vv 01:00.0 Memory controller: Xilinx Corporation Device 8038 Subsystem: Xilinx Corporation Device 0007 Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Interrupt: pin A routed to IRQ 11 Region 0: Memory at f7100000 (32-bit, non-prefetchable) [disabled] Capabilities: <access denied> Читаю регисры с помощью mcap версия bitstream совпадает с ожидаемой. Quote $ sudo ./mcap -x 8038 -d Xilinx MCAP device found Extended Capability: 0x0001000b Vendor Specific Header: 0x02c00001 FPGA Bit-Stream Version:0x00006688 Status: 0x00000000 Control: 0x00000000 Data: 0x00000000 Прошиваю второй стадией: Quote $ sudo ./mcap -x 8038 -p xilinx_pcie3_uscale_ep_tandem2.bin Xilinx MCAP device found FPGA Configuration Done!! Поле прошивки ядро выдает сообщеие: Quote $ sudo dmesg [ 817.086506] irq 16: nobody cared (try booting with the "irqpoll" option) [ 817.086509] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.9.0-8-amd64 #1 Debian 4.9.130-2 [ 817.086509] Hardware name: System manufacturer System Product Name/PRIME Z270-P, BIOS 0808 06/16/2017 [ 817.086510] 0000000000000000 ffffffffa0533d74 ffff9ece6ae00c00 ffff9ece6ae00cd4 [ 817.086512] ffffffffa02d8080 ffff9ece6ae00c00 0000000000000000 ffffffffa0f189c0 [ 817.086513] 0000000000000051 ffffffffa02d840b ffff9ece6ae00c00 0000000000000000 [ 817.086514] Call Trace: [ 817.086515] <IRQ> [ 817.086518] [<ffffffffa0533d74>] ? dump_stack+0x5c/0x78 [ 817.086519] [<ffffffffa02d8080>] ? __report_bad_irq+0x30/0xc0 [ 817.086520] [<ffffffffa02d840b>] ? note_interrupt+0x23b/0x280 [ 817.086521] [<ffffffffa02d5561>] ? handle_irq_event_percpu+0x51/0x70 [ 817.086522] [<ffffffffa02d55b9>] ? handle_irq_event+0x39/0x60 [ 817.086522] [<ffffffffa02d8ad0>] ? handle_fasteoi_irq+0xa0/0x170 [ 817.086524] [<ffffffffa0228fbf>] ? handle_irq+0x1f/0x30 [ 817.086526] [<ffffffffa081bb1e>] ? do_IRQ+0x4e/0xe0 [ 817.086527] [<ffffffffa0819896>] ? common_interrupt+0x96/0x96 [ 817.086527] <EOI> [ 817.086528] [<ffffffffa06dada2>] ? cpuidle_enter_state+0xa2/0x2d0 [ 817.086530] [<ffffffffa02bd9a4>] ? cpu_startup_entry+0x154/0x240 [ 817.086532] [<ffffffffa0f3df5e>] ? start_kernel+0x447/0x467 [ 817.086534] [<ffffffffa0f3d120>] ? early_idt_handler_array+0x120/0x120 [ 817.086535] [<ffffffffa0f3d408>] ? x86_64_start_kernel+0x14c/0x170 [ 817.086535] handlers: [ 817.086537] [<ffffffffc04a9340>] i801_isr [i2c_i801] После этого светодиод не горит, а mcap говорит: Quote $ sudo ./mcap -x 8038 -d Xilinx MCAP device found Extended Capability: 0x0001000b Vendor Specific Header: 0x02c00001 FPGA Bit-Stream Version:0x00006688 Status: 0x00000000 Control: 0x00001000 Data: 0x00000000 А если прошить FPGA по JTAG первой стадией, затем сделать reboot и прошить mcap воторой стадией, то светодиод горит и сообщения в ядре по irq нет. Данное IRQ принадлежит: Quote 00:1f.4 SMBus: Intel Corporation Device a2a3 Subsystem: ASUSTeK Computer Inc. Device 8694 Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Interrupt: pin A routed to IRQ 16 Region 0: Memory at f722a000 (64-bit, non-prefetchable) Region 4: I/O ports at f040 Kernel driver in use: i801_smbus Kernel modules: i2c_i801 Память конфигурационная память прошивается, через JTAG бластер по разъему J3. Версии: Vivado v2019.1 (64-bit) Хост в котором карточка Linux 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux Утилиты MCAP взята отсюда https://www.xilinx.com/support/answers/64761.html Ревизия KCU105 C Версия pci-utils pciutils-3.3.1 пробовал и с 3.6.3 одинаковый результат. В чем может быть проблема? pcie3_ultrascale_0_ex.zip Edited January 24, 2020 by g700 Quote Ответить с цитированием Share this post Link to post Share on other sites
new123 0 Posted January 24, 2020 · Report post Наверное надо ставить принты в обработчике прерывания в драйвере для начала, где и на чем он валится. А то как то стэк вызовов неинформативный 25 minutes ago, g700 said: После этого светодиод не горит, а mcap говорит: светодиод наверное загорается, когда pcie в L0. Можно попробовать прям из линукса еще раз опросить pcie шину, чтобы плата подцепилась и смотреть дальше. Quote Ответить с цитированием Share this post Link to post Share on other sites
g700 0 Posted January 24, 2020 · Report post Думаю дело не в этом. Потому, что если первую стадию вгрузить по JTAG и затем сделать ребут PC, то вторая стадия вгружается успешно, без сообщения ядра и светодиод горит нормально. То есть проблема скорей всего в том, что первая стадия как-то не правильно подружается по SPIx8. Quote Ответить с цитированием Share this post Link to post Share on other sites
new123 0 Posted January 24, 2020 (edited) · Report post 1 hour ago, g700 said: Думаю дело не в этом. П стэк вызовов вам ни о чем не сказал? у вас драйвер выпадает при обработке прерывания. Дальше линукс отрубает плату. Интересно, если сразу сделать из линукса pci enumeration, подхватится или нет. Так же вы указали, что на этом прерывании сидит еще одна железяка. Вообще системы уже давно научились делить одно прерывание на двоих, но у вас что то идет не так. Может поменять прерывание. Edited January 24, 2020 by new123 Quote Ответить с цитированием Share this post Link to post Share on other sites
g700 0 Posted January 25, 2020 (edited) · Report post Спасибо за помощь, но ответ оказался вот в чем. На плате стоит Engineering Sample чип, который ещё не поддерживает PCIe Tandem. Это написано в errarte, которую просто так не получить, но инфа об этой проблеме есть на официальном форуме https://forums.xilinx.com/t5/Vivado-Debug-and-Power/KCU105-Incorrect-bitstream-assigned-to-device-Bitstream-for/td-p/726881. Как узнать какой чип можно по этой ссылке https://www.xilinx.com/support/answers/37579.html. Edited January 25, 2020 by g700 Quote Ответить с цитированием Share this post Link to post Share on other sites
Flood 0 Posted January 25, 2020 · Report post 1 час назад, g700 сказал: Спасибо за помощь, но ответ оказался вот в чем. На плате стоит Engineering Sample чип, который ещё не поддерживает PCIe Tandem. Это написано в errarte, которую просто так не получить, но инфа об этой проблеме есть на официальном форуме https://forums.xilinx.com/t5/Vivado-Debug-and-Power/KCU105-Incorrect-bitstream-assigned-to-device-Bitstream-for/td-p/726881. Как узнать какой чип можно по этой ссылке https://www.xilinx.com/support/answers/37579.html. На форуме все-таки упоминается совсем другая ошибка. Вы уверены, что у вас на плате стоит именно ES, прям совсем ES? Т.е. KU040 с нулем в поле ревизии? Потому что существуют ES-чипы с единичкой в ревизии, это обычные production-кристаллы, прошедшие ES-выходной контроль. У таких проблем с тандемом быть не должно. Quote Ответить с цитированием Share this post Link to post Share on other sites
g700 0 Posted January 25, 2020 · Report post 17 minutes ago, Flood said: На форуме все-таки упоминается совсем другая ошибка. Да на форуме другая ошибка, но ответ: Quote There was a discrepancy in the document I referred earlier. From the JTAG ID Code, it is quite clear now the board has ES (Engineering Sample). If you look at the errata it is clearly documented in the errata of KC040 ES The integrated Tandem PCIe configuration block is not supported. 17 minutes ago, Flood said: Вы уверены, что у вас на плате стоит именно ES, прям совсем ES? Т.е. KU040 с нулем в поле ревизии? Ноль в поле ревизии. Quote Ответить с цитированием Share this post Link to post Share on other sites