Re: PCIE

From: Roland Dreier
Date: Sun May 27 2007 - 22:25:11 EST


> > At least on my device (PCI ID 1131:7162) there is no MSI-X capability,
> > so that's not an option for you. The current Linux implementation
> > does not support more than one MSI interrupt, so you just get one
> > interrupt with pci_enable_msi().
>
> This would mean MSI or MSI-X ? A bit confused now.

As I said, the device I have in my system:

02:00.0 Multimedia controller: Philips Semiconductors Unknown device 7162
Subsystem: Animation Technologies Inc. Unknown device 0820
Flags: bus master, fast devsel, latency 0, IRQ 11
Memory at 90200000 (64-bit, non-prefetchable) [size=1M]
Capabilities: [40] Message Signalled Interrupts: Mask- 64bit+ Queue=0/5 Enable-
Capabilities: [50] Express Endpoint IRQ 0
Capabilities: [74] Power Management version 2
Capabilities: [80] Vendor Specific Information

...has only an MSI capability (the "[40] Message Signalled Interrupts"
line). So MSI-X is not possible, since the device cannot do it. And
that means you can at most do pci_enable_msi(). The current Linux MSI
support only handles a single interrupt, just like you get normally
(no matter how many MSI interrupts a device can handle). To get
multiple interrupts from a single device under Linux, you must use
MSI-X and pci_enable_msix -- but for this to work, your device must
support MSI-X of course.

A device that supports both MSI and MSI-X would look like:

0b:00.0 InfiniBand: Mellanox Technologies MT25204 [InfiniHost III Lx HCA] (rev 20)
Subsystem: Mellanox Technologies MT25204 [InfiniHost III Lx HCA]
Flags: bus master, fast devsel, latency 0, IRQ 16
Memory at fc600000 (64-bit, non-prefetchable) [size=1M]
Memory at d8800000 (64-bit, prefetchable) [size=8M]
Capabilities: [40] Power Management version 2
Capabilities: [48] Vital Product Data
Capabilities: [90] Message Signalled Interrupts: Mask- 64bit+ Queue=0/5 Enable-
Capabilities: [84] MSI-X: Enable- Mask- TabSize=32
Capabilities: [60] Express Endpoint IRQ 0

with both "Message Signalled Interrupts" and "MSI-X" capabilities.

However, as I said before I think you shouldn't worry about MSI right
now. Since there are many systems where MSI doesn't work, you'll need
to get the driver working with legacy (INTx) interrupts anyway. And
you seem to be in a bit over your head just doing that without adding
the complexity of MSI on top, hence my recommendation to just focus on
the basic driver.

- R.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/