Использование pci_enable_msi_block

Я пытаюсь включить несколько строк MSI irq в модуле ядра. Я работаю в режиме RC. Проблема в том, что когда я вызываю pci_enable_msi_block(), он не выделяет более 1 MSI. Если я вызову pci_enable_msi_block(dev, 32), он вернет 4 (что, как я полагаю, должно означать, что я могу использовать 4 MSI). Затем я вызываю pci_enable_msi_block(dev,4), и он возвращает 1.

Вот вывод из $lspci -v после insmod Custom_module.ko, но только с успешным включением 1 MSI

00:00.0 PCI bridge: Texas Instruments Device 8888 (rev 01) (prog-if 00 [Normal decode])
    Flags: bus master, fast devsel, latency 0
    Memory at <ignored> (32-bit, non-prefetchable)
    Memory at <ignored> (32-bit, prefetchable)
    Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
    I/O behind bridge: 00001000-00001fff
    Memory behind bridge: 50000000-501fffff
    Prefetchable memory behind bridge: 50200000-503fffff
    Capabilities: [40] Power Management version 3
    Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
    Capabilities: [70] Express Root Port (Slot-), MSI 00
    Capabilities: [100] Advanced Error Reporting
    Kernel driver in use: pcieport

01:00.0 Memory controller: Xilinx Corporation Device 7022
    Subsystem: Xilinx Corporation Device 0007
    Flags: bus master, fast devsel, latency 0, IRQ 576
    Memory at 50000000 (32-bit, non-prefetchable) [size=1M]
    Capabilities: [80] Power Management version 3
    Capabilities: [90] MSI: Enable+ Count=4/4 Maskable- 64bit+
    Capabilities: [c0] Express Endpoint, MSI 00
    Capabilities: [100] Advanced Error Reporting
    Kernel driver in use: Custom_Module

Как я могу использовать более 1 MSI. Я могу использовать JTAG для редактирования регистров Enable_MSI, а затем EP может активировать MSI, но нет обработчика, предназначенного для этих IRQ.


person whh4000    schedule 20.06.2014    source источник
comment
Вы дважды вызываете pci_enable_msi_block? Вы уверены, что ваш мост поддерживает несколько MSI?   -  person Claudio    schedule 21.06.2014
comment
@Claudio pci_enable_msi_block() должен вызываться несколько раз. Сообщения MSI — это обычные обращения к памяти; мосты не нуждаются в какой-либо специальной опоре для них.   -  person CL.    schedule 21.06.2014
comment
Это одно из тех встраиваемых устройств с ядром от производителя, не так ли?   -  person CL.    schedule 21.06.2014
comment
Да, он запускает управляемое TI ядро, основанное на проекте Yocto (Arago). Меня все еще смущает, почему он возвращает 4, а затем, когда я pci_enable_msi_block во второй раз запрашиваю 4 MSI, он возвращает 1.   -  person whh4000    schedule 23.06.2014