g700 0 24 января, 2020 Опубликовано 24 января, 2020 (изменено) · Жалоба Всем привет! Возникла проблема в конфигурации 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 Изменено 24 января, 2020 пользователем g700 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 24 января, 2020 Опубликовано 24 января, 2020 · Жалоба Наверное надо ставить принты в обработчике прерывания в драйвере для начала, где и на чем он валится. А то как то стэк вызовов неинформативный 25 minutes ago, g700 said: После этого светодиод не горит, а mcap говорит: светодиод наверное загорается, когда pcie в L0. Можно попробовать прям из линукса еще раз опросить pcie шину, чтобы плата подцепилась и смотреть дальше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
g700 0 24 января, 2020 Опубликовано 24 января, 2020 · Жалоба Думаю дело не в этом. Потому, что если первую стадию вгрузить по JTAG и затем сделать ребут PC, то вторая стадия вгружается успешно, без сообщения ядра и светодиод горит нормально. То есть проблема скорей всего в том, что первая стадия как-то не правильно подружается по SPIx8. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 24 января, 2020 Опубликовано 24 января, 2020 (изменено) · Жалоба 1 hour ago, g700 said: Думаю дело не в этом. П стэк вызовов вам ни о чем не сказал? у вас драйвер выпадает при обработке прерывания. Дальше линукс отрубает плату. Интересно, если сразу сделать из линукса pci enumeration, подхватится или нет. Так же вы указали, что на этом прерывании сидит еще одна железяка. Вообще системы уже давно научились делить одно прерывание на двоих, но у вас что то идет не так. Может поменять прерывание. Изменено 24 января, 2020 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
g700 0 25 января, 2020 Опубликовано 25 января, 2020 (изменено) · Жалоба Спасибо за помощь, но ответ оказался вот в чем. На плате стоит 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. Изменено 25 января, 2020 пользователем g700 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flood 12 25 января, 2020 Опубликовано 25 января, 2020 · Жалоба 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-выходной контроль. У таких проблем с тандемом быть не должно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
g700 0 25 января, 2020 Опубликовано 25 января, 2020 · Жалоба 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 с нулем в поле ревизии? Ноль в поле ревизии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться