2

カーネル モジュールで複数の MSI irq 行を有効にしようとしています。RCモードで操作しています。問題は、それを呼び出すpci_enable_msi_block()と、複数の 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

複数の MSI を使用するにはどうすればよいですか。JTAG を使用して Enable_MSI レジスタを編集し、EP で MSI をトリガーできますが、これらの IRQ 専用のハンドラーはありません。

4

0 に答える 0