Jump to content

    
Sign in to follow this  
g700

Проблемы с PCIE3.0 Tandem у KCU105

Recommended Posts

Всем привет!

Возникла проблема в конфигурации FPGA в режиме PCIE3.0 Tandem у отладочной платы KCU105.

В проекте есть светодиод (led 0 на плате), который при второй стадии загрузки (по PCIE3.0) должен включатся.

Порядок действий:

  1. Собираю проект design example.
  2. Констрейны для 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]

  3. После сборки генерирую 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

     

  4. Прошиваю конфигурационную память скриптом который есть в архиве program_spi.tcl

  5. Выключаю хост. Потом включаю.

  6. После загрузки вижу девайс:

    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>

     

  7. Читаю регисры с помощью 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

  8. Прошиваю второй стадией:
    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.

Версии:

  1. Vivado v2019.1 (64-bit)
  2. Хост в котором карточка Linux 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux
  3. Утилиты MCAP взята отсюда https://www.xilinx.com/support/answers/64761.html
  4. Ревизия KCU105 C
  5. Версия pci-utils pciutils-3.3.1 пробовал и с 3.6.3 одинаковый результат.

В чем может быть проблема?

pcie3_ultrascale_0_ex.zip

Edited by g700

Share this post


Link to post
Share on other sites

Наверное надо ставить принты в обработчике прерывания в драйвере для начала, где и на чем он валится. А то как то стэк вызовов неинформативный

25 minutes ago, g700 said:

После этого светодиод не горит, а mcap говорит:

светодиод наверное загорается, когда pcie в L0. Можно попробовать прям из линукса еще раз опросить pcie шину, чтобы плата подцепилась и смотреть дальше.

Share this post


Link to post
Share on other sites

Думаю дело не в этом. Потому, что если первую стадию вгрузить по JTAG и затем сделать ребут PC, то вторая стадия вгружается успешно, без сообщения ядра и светодиод горит нормально.

То есть проблема скорей всего в том, что первая стадия как-то не правильно подружается по SPIx8.

Share this post


Link to post
Share on other sites
1 hour ago, g700 said:

Думаю дело не в этом. П

стэк вызовов вам ни о чем не сказал? у вас драйвер выпадает при обработке прерывания. Дальше линукс отрубает плату. Интересно, если сразу сделать из линукса pci enumeration, подхватится или нет.

Так же вы указали, что на этом прерывании сидит еще одна железяка. Вообще системы уже давно научились делить одно прерывание на двоих, но у вас что то идет не так. Может поменять прерывание.

Edited by new123

Share this post


Link to post
Share on other sites

Спасибо за помощь, но ответ оказался вот в чем.

На плате стоит 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 by g700

Share this post


Link to post
Share on other sites
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-выходной контроль. У таких проблем с тандемом быть не должно.

Share this post


Link to post
Share on other sites
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 с нулем в поле ревизии?

Ноль в поле ревизии.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this