linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* How to check for proper MSI support?
@ 2014-07-03  3:20 Ilia Mirkin
  2014-07-03  5:58 ` Yijing Wang
  0 siblings, 1 reply; 16+ messages in thread
From: Ilia Mirkin @ 2014-07-03  3:20 UTC (permalink / raw)
  To: linux-pci; +Cc: nouveau@lists.freedesktop.org, brian.johnathan.b

Hello,

A user (cc'd) reported that nouveau's enabling of MSI causes the card
to not work on his setup [1]. I think the situation is that MSI is
just not supported by the underlying motherboard, even though the
card, and probably bridge, support it just fine. It's a very old
board. The nouveau code does:

pmc->use_msi = pci_enable_msi(device->pdev) == 0;

Does it need to do more checking than that before trying to enable MSI
on the device? Could it be that the linux pci subsystem is missing on
inheriting MSI capabilities somewhere?

Thanks,

  -ilia

[1]

00:00.0 Host bridge [0600]: Intel Corporation 430FX - 82437FX TSC
[Triton I] [8086:122d] (rev 01)
        Flags: bus master, medium devsel, latency 64

00:0e.0 PCI bridge [0604]: PLX Technology, Inc. PEX8112 x1 Lane PCI
Express-to-PCI Bridge [10b5:8112] (rev aa) (prog-if 00 [Normal
decode])
        Flags: bus master, 66MHz, medium devsel, latency 66
        Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
        I/O behind bridge: 0000f000-0000ffff
        Memory behind bridge: f5e00000-fbffffff
        Prefetchable memory behind bridge: d5d00000-f5dfffff
        Capabilities: [40] Power Management version 2
        Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
        Capabilities: [60] Express PCI/PCI-X to PCI-Express Bridge, MSI 00

01:00.0 VGA compatible controller [0300]: NVIDIA Corporation G96
[GeForce 9400 GT] [10de:0641] (rev a1) (prog-if 00 [VGA controller])
        Subsystem: Jaton Corp Device [1b13:0641]
        Flags: bus master, fast devsel, latency 0, IRQ 11
        Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
        Memory at e0000000 (64-bit, prefetchable) [size=256M]
        Memory at f8000000 (64-bit, non-prefetchable) [size=32M]
        I/O ports at fc80 [size=128]
        [virtual] Expansion ROM at d5d00000 [disabled] [size=512K]
        Capabilities: [60] Power Management version 3
        Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
        Capabilities: [78] Express Endpoint, MSI 00
        Capabilities: [b4] Vendor Specific Information: Len=14 <?>
        Kernel driver in use: nouveau

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to check for proper MSI support?
  2014-07-03  3:20 How to check for proper MSI support? Ilia Mirkin
@ 2014-07-03  5:58 ` Yijing Wang
  2014-07-04  0:40   ` Brian Becker
       [not found]   ` <CALhae2jRz8hL0bwySAbP7r+vJGOG5aif4GA_Yjp0inGAwz5JEA@mail.gmail.com>
  0 siblings, 2 replies; 16+ messages in thread
From: Yijing Wang @ 2014-07-03  5:58 UTC (permalink / raw)
  To: Ilia Mirkin, linux-pci; +Cc: nouveau@lists.freedesktop.org, brian.johnathan.b

On 2014/7/3 11:20, Ilia Mirkin wrote:
> Hello,
> 
> A user (cc'd) reported that nouveau's enabling of MSI causes the card
> to not work on his setup [1]. I think the situation is that MSI is
> just not supported by the underlying motherboard, even though the
> card, and probably bridge, support it just fine. It's a very old
> board. The nouveau code does:


What is the kernel version running in your board ?

> 
> pmc->use_msi = pci_enable_msi(device->pdev) == 0;

Driver call pci_enable_msi() and always return 0 ?

> 
> Does it need to do more checking than that before trying to enable MSI
> on the device? Could it be that the linux pci subsystem is missing on
> inheriting MSI capabilities somewhere?

pci_enable_msi() will checking your device whether it supports MSI.
Can you provide the detailed lspci information ? eg. lspci -vvvxxx ?


> 
>   -ilia
> 
> [1]
> 
> 00:00.0 Host bridge [0600]: Intel Corporation 430FX - 82437FX TSC
> [Triton I] [8086:122d] (rev 01)
>         Flags: bus master, medium devsel, latency 64
> 
> 00:0e.0 PCI bridge [0604]: PLX Technology, Inc. PEX8112 x1 Lane PCI
> Express-to-PCI Bridge [10b5:8112] (rev aa) (prog-if 00 [Normal
> decode])
>         Flags: bus master, 66MHz, medium devsel, latency 66
>         Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
>         I/O behind bridge: 0000f000-0000ffff
>         Memory behind bridge: f5e00000-fbffffff
>         Prefetchable memory behind bridge: d5d00000-f5dfffff
>         Capabilities: [40] Power Management version 2
>         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
>         Capabilities: [60] Express PCI/PCI-X to PCI-Express Bridge, MSI 00
> 
> 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation G96
> [GeForce 9400 GT] [10de:0641] (rev a1) (prog-if 00 [VGA controller])
>         Subsystem: Jaton Corp Device [1b13:0641]
>         Flags: bus master, fast devsel, latency 0, IRQ 11
>         Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
>         Memory at e0000000 (64-bit, prefetchable) [size=256M]
>         Memory at f8000000 (64-bit, non-prefetchable) [size=32M]
>         I/O ports at fc80 [size=128]
>         [virtual] Expansion ROM at d5d00000 [disabled] [size=512K]
>         Capabilities: [60] Power Management version 3
>         Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
>         Capabilities: [78] Express Endpoint, MSI 00
>         Capabilities: [b4] Vendor Specific Information: Len=14 <?>
>         Kernel driver in use: nouveau
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pci" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 


-- 
Thanks!
Yijing


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to check for proper MSI support?
  2014-07-03  5:58 ` Yijing Wang
@ 2014-07-04  0:40   ` Brian Becker
       [not found]   ` <CALhae2jRz8hL0bwySAbP7r+vJGOG5aif4GA_Yjp0inGAwz5JEA@mail.gmail.com>
  1 sibling, 0 replies; 16+ messages in thread
From: Brian Becker @ 2014-07-04  0:40 UTC (permalink / raw)
  To: Yijing Wang; +Cc: Ilia Mirkin, linux-pci, nouveau@lists.freedesktop.org

My previous message was badly formatted, and didn't make it to
linux-pci@vger.kernel.org. Hopefully this information is of some use.

root@p5-133:~# uname -a
Linux p5-133 3.15.2-p5-133 #1 Thu Jun 26 22:56:27 EDT 2014 i586 GNU/Linux
root@p5-133:~# lspci -vvvxxx
00:00.0 Host bridge: Intel Corporation 430FX - 82437FX TSC [Triton I] (rev 01)
        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-
        Latency: 128
00: 86 80 2d 12 06 00 00 22 01 00 00 06 00 80 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: 88 00 41 00 00 00 00 03 49 10 55 55 55 05 55 05
60: 08 10 18 20 20 00 00 00 0f 00 00 00 00 00 00 00
70: 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00

00:07.0 ISA bridge: Intel Corporation 82371FB PIIX ISA [Triton I] (rev 02)
        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-
        Latency: 0
00: 86 80 2e 12 0f 00 80 02 02 00 01 06 00 00 80 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 4d 00 60 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 0b 0b 0b 09 00 00 00 00 00 f2 05 00 00 00 00 00
70: 0f 80 00 00 00 00 04 04 02 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 03 00 e0 00 02 d0 00 a0 13 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 08 02 00 00 00 00 00 00

00:07.1 IDE interface: Intel Corporation 82371FB PIIX IDE [Triton I]
(rev 02) (prog-if 80 [Master])
        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-
        Latency: 128
        Region 0: [virtual] Memory at 000001f0 (32-bit,
non-prefetchable) [size=8]
        Region 1: [virtual] Memory at 000003f0 (type 3,
non-prefetchable) [size=1]
        Region 2: [virtual] Memory at 00000170 (32-bit,
non-prefetchable) [size=8]
        Region 3: [virtual] Memory at 00000370 (type 3,
non-prefetchable) [size=1]
        Region 4: I/O ports at ef80 [size=16]
        Kernel driver in use: pata_oldpiix
00: 86 80 30 12 05 00 80 02 02 80 01 01 00 80 00 00
10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20: 81 ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
40: 36 a3 07 a3 00 00 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 08 02 00 00 00 00 00 00

00:0e.0 PCI bridge: PLX Technology, Inc. PEX8112 x1 Lane PCI
Express-to-PCI Bridge (rev aa) (prog-if 00 [Normal decode])
        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-
        Latency: 128, Cache Line Size: 32 bytes
        Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
        I/O behind bridge: 0000f000-0000ffff
        Memory behind bridge: f5e00000-fbffffff
        Prefetchable memory behind bridge: d5d00000-f5dfffff
        Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort-
<TAbort- <MAbort- <SERR- <PERR-
        BridgeCtl: Parity+ SERR+ NoISA- VGA+ MAbort- >Reset- FastB2B-
                PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
        Capabilities: [40] Power Management version 2
                Flags: PMEClk- DSI- D1+ D2- AuxCurrent=0mA
PME(D0+,D1+,D2-,D3hot+,D3cold-)
                Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
                Address: 0000000000000000  Data: 0000
        Capabilities: [60] Express (v1) PCI/PCI-X to PCI-Express Bridge, MSI 00
                DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s
<64ns, L1 <1us
                        ExtTag- RBE- FLReset-
                DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
                        RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- BrConfRtry-
                        MaxPayload 128 bytes, MaxReadReq 512 bytes
                DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq-
AuxPwr- TransPend-
                LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1,
Latency L0 <1us, L1 <16us
                        ClockPM- Surprise- LLActRep- BwNot-
                LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk-
                        ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
                LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train-
SlotClk- DLActive- BWMgmt- ABWMgmt-
00: b5 10 12 81 17 01 30 02 aa 00 04 06 08 80 01 00
10: 00 00 00 00 00 00 00 00 00 01 01 00 f0 f0 00 00
20: e0 f5 f0 fb d0 d5 d0 f5 00 00 00 00 00 00 00 00
30: 00 00 00 00 40 00 00 00 00 00 00 00 00 01 0b 00
40: 01 50 02 5a 00 00 00 00 10 28 0e 00 00 00 00 00
50: 05 60 80 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 10 00 81 00 00 00 00 00 00 20 00 00 11 4c 02 00
70: 00 00 11 00 80 0c 00 00 00 00 40 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 33 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00:0f.0 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev
03) (prog-if 10 [OHCI])
        Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
        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-
        Latency: 128 (20000ns max), Cache Line Size: 32 bytes
        Interrupt: pin B routed to IRQ 9
        Region 0: Memory at ffbeb000 (32-bit, non-prefetchable) [size=4K]
        Capabilities: [60] Power Management version 2
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0+,D1+,D2-,D3hot+,D3cold+)
                Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
        Kernel driver in use: ohci-pci
00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 80 80 00
10: 00 b0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
30: 00 00 00 00 60 00 00 00 00 00 00 00 09 02 00 50
40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00:0f.1 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev
03) (prog-if 10 [OHCI])
        Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
        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-
        Latency: 128 (20000ns max), Cache Line Size: 32 bytes
        Interrupt: pin C routed to IRQ 11
        Region 0: Memory at ffbec000 (32-bit, non-prefetchable) [size=4K]
        Capabilities: [60] Power Management version 2
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0+,D1+,D2-,D3hot+,D3cold+)
                Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
        Kernel driver in use: ohci-pci
00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 80 80 00
10: 00 c0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 03 00 50
40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00:0f.2 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev
03) (prog-if 10 [OHCI])
        Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
        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-
        Latency: 128 (20000ns max), Cache Line Size: 32 bytes
        Interrupt: pin D routed to IRQ 11
        Region 0: Memory at ffbed000 (32-bit, non-prefetchable) [size=4K]
        Capabilities: [60] Power Management version 2
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0+,D1+,D2-,D3hot+,D3cold+)
                Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
        Kernel driver in use: ohci-pci
00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 80 80 00
10: 00 d0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 04 00 50
40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00:0f.3 USB controller: ULi Electronics Inc. USB 2.0 Controller (rev
01) (prog-if 20 [EHCI])
        Subsystem: ULi Electronics Inc. Device 5272
        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-
        Latency: 128 (20000ns max), Cache Line Size: 32 bytes
        Interrupt: pin A routed to IRQ 11
        Region 0: Memory at ffbefc00 (32-bit, non-prefetchable) [size=256]
        Capabilities: [50] Power Management version 2
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0+,D1-,D2-,D3hot+,D3cold+)
                Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [58] Debug port: BAR=1 offset=0090
        Kernel driver in use: ehci-pci
00: b9 10 39 52 16 01 b0 02 01 20 03 0c 08 80 80 00
10: 00 fc be ff 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 72 52
30: 00 00 00 00 50 00 00 00 00 00 00 00 0b 01 00 50
40: 01 02 00 ee 00 00 10 c4 00 00 00 00 00 00 00 00
50: 01 58 02 c8 00 00 00 00 0a 00 90 20 00 00 00 00
60: 20 20 7f 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 01 00 00 00 00 00 00 c0 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00:10.0 RAID bus controller: Silicon Image, Inc. PCI0680 Ultra ATA-133
Host Controller (rev 02)
        Subsystem: Silicon Image, Inc. Winic W-680 (Silicon Image 680 based)
        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-
        Latency: 128, Cache Line Size: 4 bytes
        Interrupt: pin A routed to IRQ 9
        Region 0: I/O ports at eff0 [size=8]
        Region 1: I/O ports at efe4 [size=4]
        Region 2: I/O ports at efa8 [size=8]
        Region 3: I/O ports at efe0 [size=4]
        Region 4: I/O ports at ef90 [size=16]
        Region 5: Memory at ffbeec00 (32-bit, non-prefetchable) [size=256]
        [virtual] Expansion ROM at 08000000 [disabled] [size=512K]
        Capabilities: [60] Power Management version 2
                Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=2 PME-
        Kernel driver in use: pata_sil680
00: 95 10 80 06 07 01 90 02 02 00 04 01 01 80 00 00
10: f1 ef 00 00 e5 ef 00 00 a9 ef 00 00 e1 ef 00 00
20: 91 ef 00 00 00 ec be ff 00 00 00 00 95 10 80 36
30: 00 00 00 00 60 00 00 00 00 00 00 00 09 01 00 00
40: 00 00 00 00 90 14 19 08 00 00 00 00 00 00 00 00
50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
60: 01 00 22 06 00 40 00 64 00 00 00 00 00 00 00 00
70: 08 00 00 00 00 40 59 07 00 00 00 00 00 00 00 00
80: 03 00 00 00 00 00 00 00 00 00 11 00 d9 7d ff 7b
90: 00 fe 00 0d ff ff ff 3b 33 00 00 19 ff 00 00 00
a0: 00 62 c1 10 c1 10 8a 32 c1 10 92 43 07 40 09 40
b0: 01 60 8a 32 8a 32 8a 32 92 43 92 43 09 40 09 40
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

01:00.0 VGA compatible controller: NVIDIA Corporation G96 [GeForce
9400 GT] (rev a1) (prog-if 00 [VGA controller])
        Subsystem: Jaton Corp Device 0641
        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-
        Latency: 0, Cache Line Size: 32 bytes
        Interrupt: pin A routed to IRQ 11
        Region 0: Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
        Region 1: Memory at e0000000 (64-bit, prefetchable) [size=256M]
        Region 3: Memory at f8000000 (64-bit, non-prefetchable) [size=32M]
        Region 5: I/O ports at fc80 [size=128]
        [virtual] Expansion ROM at d5d00000 [disabled] [size=512K]
        Capabilities: [60] Power Management version 3
                Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
        Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
                Address: 0000000000000000  Data: 0000
        Capabilities: [78] Express (v1) Endpoint, MSI 00
                DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s
<512ns, L1 <4us
                        ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
                DevCtl: Report errors: Correctable- Non-Fatal- Fatal-
Unsupported-
                        RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
                        MaxPayload 128 bytes, MaxReadReq 512 bytes
                DevSta: CorrErr+ UncorrErr- FatalErr- UnsuppReq-
AuxPwr- TransPend-
                LnkCap: Port #0, Speed 2.5GT/s, Width x16, ASPM L0s
L1, Latency L0 <512ns, L1 <1us
                        ClockPM- Surprise- LLActRep- BwNot-
                LnkCtl: ASPM Disabled; RCB 128 bytes Disabled- Retrain- CommClk-
                        ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
                LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train-
SlotClk+ DLActive- BWMgmt- ABWMgmt-
        Capabilities: [b4] Vendor Specific Information: Len=14 <?>
        Kernel driver in use: nouveau
00: de 10 41 06 07 01 10 00 a1 00 00 03 08 00 00 00
10: 00 00 00 fb 0c 00 00 e0 00 00 00 00 04 00 00 f8
20: 00 00 00 00 81 fc 00 00 00 00 00 00 13 1b 41 06
30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 01 00 00
40: 13 1b 41 06 00 00 00 00 00 00 00 00 00 00 00 00
50: 01 00 00 00 01 00 00 00 ce d6 23 00 00 00 00 00
60: 01 68 03 00 00 00 00 00 05 78 80 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 10 b4 01 00 e0 84 64 00
80: 10 28 01 00 01 3d 00 00 08 00 11 10 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 09 00 14 01 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

root@p5-133:~#

On Thu, Jul 3, 2014 at 1:58 AM, Yijing Wang <wangyijing@huawei.com> wrote:
> On 2014/7/3 11:20, Ilia Mirkin wrote:
>> Hello,
>>
>> A user (cc'd) reported that nouveau's enabling of MSI causes the card
>> to not work on his setup [1]. I think the situation is that MSI is
>> just not supported by the underlying motherboard, even though the
>> card, and probably bridge, support it just fine. It's a very old
>> board. The nouveau code does:
>
>
> What is the kernel version running in your board ?
>
>>
>> pmc->use_msi = pci_enable_msi(device->pdev) == 0;
>
> Driver call pci_enable_msi() and always return 0 ?
>
>>
>> Does it need to do more checking than that before trying to enable MSI
>> on the device? Could it be that the linux pci subsystem is missing on
>> inheriting MSI capabilities somewhere?
>
> pci_enable_msi() will checking your device whether it supports MSI.
> Can you provide the detailed lspci information ? eg. lspci -vvvxxx ?
>
>
>>
>>   -ilia
>>
>> [1]
>>
>> 00:00.0 Host bridge [0600]: Intel Corporation 430FX - 82437FX TSC
>> [Triton I] [8086:122d] (rev 01)
>>         Flags: bus master, medium devsel, latency 64
>>
>> 00:0e.0 PCI bridge [0604]: PLX Technology, Inc. PEX8112 x1 Lane PCI
>> Express-to-PCI Bridge [10b5:8112] (rev aa) (prog-if 00 [Normal
>> decode])
>>         Flags: bus master, 66MHz, medium devsel, latency 66
>>         Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
>>         I/O behind bridge: 0000f000-0000ffff
>>         Memory behind bridge: f5e00000-fbffffff
>>         Prefetchable memory behind bridge: d5d00000-f5dfffff
>>         Capabilities: [40] Power Management version 2
>>         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
>>         Capabilities: [60] Express PCI/PCI-X to PCI-Express Bridge, MSI 00
>>
>> 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation G96
>> [GeForce 9400 GT] [10de:0641] (rev a1) (prog-if 00 [VGA controller])
>>         Subsystem: Jaton Corp Device [1b13:0641]
>>         Flags: bus master, fast devsel, latency 0, IRQ 11
>>         Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
>>         Memory at e0000000 (64-bit, prefetchable) [size=256M]
>>         Memory at f8000000 (64-bit, non-prefetchable) [size=32M]
>>         I/O ports at fc80 [size=128]
>>         [virtual] Expansion ROM at d5d00000 [disabled] [size=512K]
>>         Capabilities: [60] Power Management version 3
>>         Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
>>         Capabilities: [78] Express Endpoint, MSI 00
>>         Capabilities: [b4] Vendor Specific Information: Len=14 <?>
>>         Kernel driver in use: nouveau
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-pci" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>>
>
>
> --
> Thanks!
> Yijing
>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to check for proper MSI support?
       [not found]   ` <CALhae2jRz8hL0bwySAbP7r+vJGOG5aif4GA_Yjp0inGAwz5JEA@mail.gmail.com>
@ 2014-07-04  2:35     ` Yijing Wang
  2014-07-04  2:43       ` Ilia Mirkin
  2014-07-04  2:45       ` Brian Becker
  0 siblings, 2 replies; 16+ messages in thread
From: Yijing Wang @ 2014-07-04  2:35 UTC (permalink / raw)
  To: Brian Becker; +Cc: Ilia Mirkin, linux-pci, nouveau@lists.freedesktop.org

Hi Brian,
   From your 01:00.0 VGA compatible controller PCI config register, it supports 1 MSI vector, so I think this
card has no problem. But you didn't answer what's the pci_enable_msi() return during it enable MSI fail.

You can check PCI bus whether support MSI like:

cat /sys/bus/pci/devices/00:0e.0/msi_bus

Other, do you call pci_enable_device() before pci_enable_msi() ?

On 2014/7/4 8:35, Brian Becker wrote:
> I mistakenly only replied to Yijing Wang the first time. Here are the further details.
> 
> uname -a: Linux p5-133 3.15.2-p5-133 #1 Thu Jun 26 22:56:27 EDT 2014 i586 GNU/Linux
> 
> Here is the output from lspci -vvvxxx:
> 
> root@p5-133:~# cat lspci.txt
> 00:00.0 Host bridge: Intel Corporation 430FX - 82437FX TSC [Triton I] (rev 01)
>         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-
>         Latency: 64
> 00: 86 80 2d 12 06 00 00 22 01 00 00 06 00 40 00 00
> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 50: 88 00 41 00 00 00 00 03 49 10 55 55 55 05 55 05
> 60: 08 10 18 20 20 00 00 00 0f 00 00 00 00 00 00 00
> 70: 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 00
> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00
> 
> 00:07.0 ISA bridge: Intel Corporation 82371FB PIIX ISA [Triton I] (rev 02)
>         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-
>         Latency: 0
> 00: 86 80 2e 12 0f 00 80 02 02 00 01 06 00 00 80 00
> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 40: 00 00 00 00 00 00 00 00 00 00 00 00 4d 00 60 00
> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 60: 0b 0b 0b 09 00 00 00 00 00 f2 05 00 00 00 00 00
> 70: 0f 80 00 00 00 00 04 04 02 00 00 00 00 00 00 00
> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> a0: 03 00 e0 00 02 d0 00 a0 13 00 00 00 00 00 00 00
> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> f0: 00 00 00 00 00 00 00 00 08 02 00 00 00 00 00 00
> 
> 00:07.1 IDE interface: Intel Corporation 82371FB PIIX IDE [Triton I] (rev 02) (prog-if 80 [Master])
>         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-
>         Latency: 64
>         Region 0: [virtual] Memory at 000001f0 (32-bit, non-prefetchable) [size=8]
>         Region 1: [virtual] Memory at 000003f0 (type 3, non-prefetchable) [size=1]
>         Region 2: [virtual] Memory at 00000170 (32-bit, non-prefetchable) [size=8]
>         Region 3: [virtual] Memory at 00000370 (type 3, non-prefetchable) [size=1]
>         Region 4: I/O ports at ef80 [size=16]
>         Kernel driver in use: pata_oldpiix
> 00: 86 80 30 12 05 00 80 02 02 80 01 01 00 40 00 00
> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 20: 81 ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 40: 36 a3 07 a3 00 00 00 00 00 00 00 00 00 00 00 00
> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> f0: 00 00 00 00 00 00 00 00 08 02 00 00 00 00 00 00
> 
> 00:0e.0 PCI bridge: PLX Technology, Inc. PEX8112 x1 Lane PCI Express-to-PCI Bridge (rev aa) (prog-if 00 [Normal decode])
>         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-
>         Latency: 66, Cache Line Size: 32 bytes
> 
>         Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
>         I/O behind bridge: 0000f000-0000ffff
>         Memory behind bridge: f5e00000-fbffffff
>         Prefetchable memory behind bridge: d5d00000-f5dfffff
>         Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
>         BridgeCtl: Parity+ SERR+ NoISA- VGA+ MAbort- >Reset- FastB2B-
>                 PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
> 
>         Capabilities: [40] Power Management version 2
>                 Flags: PMEClk- DSI- D1+ D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold-
> )
>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
> 
>         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
>                 Address: 0000000000000000  Data: 0000
>         Capabilities: [60] Express (v1) PCI/PCI-X to PCI-Express Bridge, MSI 00
>                 DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
>                         ExtTag- RBE- FLReset-
>                 DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
>                         RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- BrConfRtry-
>                         MaxPayload 128 bytes, MaxReadReq 512 bytes
>                 DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
>                 LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <1us, L1 <16us
>                         ClockPM- Surprise- LLActRep- BwNot-
>                 LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk-
>                         ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
>                 LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
> 00: b5 10 12 81 17 01 30 02 aa 00 04 06 08 42 01 00
> 10: 00 00 00 00 00 00 00 00 00 01 01 00 f0 f0 00 00
> 20: e0 f5 f0 fb d0 d5 d0 f5 00 00 00 00 00 00 00 00
> 30: 00 00 00 00 40 00 00 00 00 00 00 00 00 01 0b 00
> 40: 01 50 02 5a 00 00 00 00 10 28 0e 00 00 00 00 00
> 50: 05 60 80 00 00 00 00 00 00 00 00 00 00 00 00 00
> 60: 10 00 81 00 00 00 00 00 00 20 00 00 11 4c 02 00
> 70: 00 00 11 00 80 0c 00 00 00 00 40 00 00 00 00 00
> 80: 00 00 00 00 00 00 00 00 33 00 00 00 00 00 00 00
> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 
> 00:0f.0 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03) (prog-if 10 [OHCI])
>         Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
>         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-
>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>         Interrupt: pin B routed to IRQ 9
>         Region 0: Memory at ffbeb000 (32-bit, non-prefetchable) [size=4K]
>         Capabilities: [60] Power Management version 2
>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold+)
>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>         Kernel driver in use: ohci-pci
> 00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 40 80 00
> 10: 00 b0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
> 30: 00 00 00 00 60 00 00 00 00 00 00 00 09 02 00 50
> 40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 
> 00:0f.1 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03) (prog-if 10 [OHCI])
>         Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
>         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-
>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>         Interrupt: pin C routed to IRQ 11
>         Region 0: Memory at ffbec000 (32-bit, non-prefetchable) [size=4K]
>         Capabilities: [60] Power Management version 2
>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold+)
>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>         Kernel driver in use: ohci-pci
> 00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 40 80 00
> 10: 00 c0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
> 30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 03 00 50
> 40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 
> 00:0f.2 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03) (prog-if 10 [OHCI])
>         Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
>         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-
>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>         Interrupt: pin D routed to IRQ 11
>         Region 0: Memory at ffbed000 (32-bit, non-prefetchable) [size=4K]
>         Capabilities: [60] Power Management version 2
>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold+)
>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>         Kernel driver in use: ohci-pci
> 00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 40 80 00
> 10: 00 d0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
> 30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 04 00 50
> 40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 
> 00:0f.3 USB controller: ULi Electronics Inc. USB 2.0 Controller (rev 01) (prog-if 20 [EHCI])
>         Subsystem: ULi Electronics Inc. Device 5272
>         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-
>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>         Interrupt: pin A routed to IRQ 11
>         Region 0: Memory at ffbefc00 (32-bit, non-prefetchable) [size=256]
>         Capabilities: [50] Power Management version 2
>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>         Capabilities: [58] Debug port: BAR=1 offset=0090
>         Kernel driver in use: ehci-pci
> 00: b9 10 39 52 16 01 b0 02 01 20 03 0c 08 40 80 00
> 10: 00 fc be ff 00 00 00 00 00 00 00 00 00 00 00 00
> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 72 52
> 30: 00 00 00 00 50 00 00 00 00 00 00 00 0b 01 00 50
> 40: 01 02 00 ee 00 00 10 c4 00 00 00 00 00 00 00 00
> 50: 01 58 02 c8 00 00 00 00 0a 00 90 20 00 00 00 00
> 60: 20 20 7f 00 00 00 00 00 00 00 00 00 00 00 00 00
> 70: 01 00 00 00 00 00 00 c0 00 00 00 00 00 00 00 00
> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 
> 00:10.0 RAID bus controller: Silicon Image, Inc. PCI0680 Ultra ATA-133 Host Controller (rev 02)
>         Subsystem: Silicon Image, Inc. Winic W-680 (Silicon Image 680 based)
>         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-
>         Latency: 64, Cache Line Size: 4 bytes
>         Interrupt: pin A routed to IRQ 9
>         Region 0: I/O ports at eff0 [size=8]
>         Region 1: I/O ports at efe4 [size=4]
>         Region 2: I/O ports at efa8 [size=8]
>         Region 3: I/O ports at efe0 [size=4]
>         Region 4: I/O ports at ef90 [size=16]
>         Region 5: Memory at ffbeec00 (32-bit, non-prefetchable) [size=256]
>         [virtual] Expansion ROM at 08000000 [disabled] [size=512K]
>         Capabilities: [60] Power Management version 2
>                 Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=2 PME-
>         Kernel driver in use: pata_sil680
> 00: 95 10 80 06 07 01 90 02 02 00 04 01 01 40 00 00
> 10: f1 ef 00 00 e5 ef 00 00 a9 ef 00 00 e1 ef 00 00
> 20: 91 ef 00 00 00 ec be ff 00 00 00 00 95 10 80 36
> 30: 00 00 00 00 60 00 00 00 00 00 00 00 09 01 00 00
> 40: 00 00 00 00 90 14 19 08 00 00 00 00 00 00 00 00
> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 60: 01 00 22 06 00 40 00 64 00 00 00 00 00 00 00 00
> 70: 08 00 00 00 00 70 57 07 00 00 00 00 00 00 00 00
> 80: 03 00 00 00 00 00 00 00 00 00 11 00 d9 7d ff 7b
> 90: 00 fe 00 0d ff ff ff 3b 33 00 00 19 ff 00 00 00
> a0: 00 62 c1 10 c1 10 8a 32 c1 10 92 43 07 40 09 40
> b0: 01 60 8a 32 8a 32 8a 32 92 43 92 43 09 40 09 40
> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 
> 01:00.0 VGA compatible controller: NVIDIA Corporation G96 [GeForce 9400 GT] (rev a1) (prog-if 00 [VGA controller])
>         Subsystem: Jaton Corp Device 0641
>         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-
>         Latency: 0, Cache Line Size: 32 bytes
>         Interrupt: pin A routed to IRQ 11
>         Region 0: Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
>         Region 1: Memory at e0000000 (64-bit, prefetchable) [size=256M]
>         Region 3: Memory at f8000000 (64-bit, non-prefetchable) [size=32M]
>         Region 5: I/O ports at fc80 [size=128]
> 
>         [virtual] Expansion ROM at d5d00000 [disabled] [size=512K]
>         Capabilities: [60] Power Management version 3
>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
> 
>         Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
>                 Address: 0000000000000000  Data: 0000
>         Capabilities: [78] Express (v1) Endpoint, MSI 00
>                 DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <512ns, L1 <4us
>                         ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
>                 DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
>                         RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
>                         MaxPayload 128 bytes, MaxReadReq 512 bytes
>                 DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
>                 LnkCap: Port #0, Speed 2.5GT/s, Width x16, ASPM L0s L1, Latency L0 <512ns, L1 <1us
>                         ClockPM- Surprise- LLActRep- BwNot-
>                 LnkCtl: ASPM Disabled; RCB 128 bytes Disabled- Retrain- CommClk-
>                         ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
>                 LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
> 
>         Capabilities: [b4] Vendor Specific Information: Len=14 <?>
>         Kernel driver in use: nouveau
> 00: de 10 41 06 07 01 10 00 a1 00 00 03 08 00 00 00
> 10: 00 00 00 fb 0c 00 00 e0 00 00 00 00 04 00 00 f8
> 20: 00 00 00 00 81 fc 00 00 00 00 00 00 13 1b 41 06
> 30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 01 00 00
> 40: 13 1b 41 06 00 00 00 00 00 00 00 00 00 00 00 00
> 50: 01 00 00 00 01 00 00 00 ce d6 23 00 00 00 00 00
> 60: 01 68 03 00 00 00 00 00 05 78 80 00 00 00 00 00
> 70: 00 00 00 00 00 00 00 00 10 b4 01 00 e0 84 64 00
> 80: 10 28 00 00 01 3d 00 00 08 00 11 10 00 00 00 00
> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> b0: 00 00 00 00 09 00 14 01 00 00 00 00 00 00 00 00
> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 
> 
> 
> On Thu, Jul 3, 2014 at 1:58 AM, Yijing Wang <wangyijing@huawei.com <mailto:wangyijing@huawei.com>> wrote:
> 
>     On 2014/7/3 11:20, Ilia Mirkin wrote:
>     > Hello,
>     >
>     > A user (cc'd) reported that nouveau's enabling of MSI causes the card
>     > to not work on his setup [1]. I think the situation is that MSI is
>     > just not supported by the underlying motherboard, even though the
>     > card, and probably bridge, support it just fine. It's a very old
>     > board. The nouveau code does:
> 
> 
>     What is the kernel version running in your board ?
> 
>     >
>     > pmc->use_msi = pci_enable_msi(device->pdev) == 0;
> 
>     Driver call pci_enable_msi() and always return 0 ?
> 
>     >
>     > Does it need to do more checking than that before trying to enable MSI
>     > on the device? Could it be that the linux pci subsystem is missing on
>     > inheriting MSI capabilities somewhere?
> 
>     pci_enable_msi() will checking your device whether it supports MSI.
>     Can you provide the detailed lspci information ? eg. lspci -vvvxxx ?
> 
> 
>     >
>     >   -ilia
>     >
>     > [1]
>     >
>     > 00:00.0 Host bridge [0600]: Intel Corporation 430FX - 82437FX TSC
>     > [Triton I] [8086:122d] (rev 01)
>     >         Flags: bus master, medium devsel, latency 64
>     >
>     > 00:0e.0 PCI bridge [0604]: PLX Technology, Inc. PEX8112 x1 Lane PCI
>     > Express-to-PCI Bridge [10b5:8112] (rev aa) (prog-if 00 [Normal
>     > decode])
>     >         Flags: bus master, 66MHz, medium devsel, latency 66
>     >         Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
>     >         I/O behind bridge: 0000f000-0000ffff
>     >         Memory behind bridge: f5e00000-fbffffff
>     >         Prefetchable memory behind bridge: d5d00000-f5dfffff
>     >         Capabilities: [40] Power Management version 2
>     >         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
>     >         Capabilities: [60] Express PCI/PCI-X to PCI-Express Bridge, MSI 00
>     >
>     > 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation G96
>     > [GeForce 9400 GT] [10de:0641] (rev a1) (prog-if 00 [VGA controller])
>     >         Subsystem: Jaton Corp Device [1b13:0641]
>     >         Flags: bus master, fast devsel, latency 0, IRQ 11
>     >         Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
>     >         Memory at e0000000 (64-bit, prefetchable) [size=256M]
>     >         Memory at f8000000 (64-bit, non-prefetchable) [size=32M]
>     >         I/O ports at fc80 [size=128]
>     >         [virtual] Expansion ROM at d5d00000 [disabled] [size=512K]
>     >         Capabilities: [60] Power Management version 3
>     >         Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
>     >         Capabilities: [78] Express Endpoint, MSI 00
>     >         Capabilities: [b4] Vendor Specific Information: Len=14 <?>
>     >         Kernel driver in use: nouveau
>     > --
>     > To unsubscribe from this list: send the line "unsubscribe linux-pci" in
>     > the body of a message to majordomo@vger.kernel.org <mailto:majordomo@vger.kernel.org>
>     > More majordomo info at  http://vger.kernel.org/majordomo-info.html
>     >
>     >
> 
> 
>     --
>     Thanks!
>     Yijing
> 
> 


-- 
Thanks!
Yijing


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to check for proper MSI support?
  2014-07-04  2:35     ` Yijing Wang
@ 2014-07-04  2:43       ` Ilia Mirkin
  2014-07-04  3:09         ` Yijing Wang
  2014-07-04  2:45       ` Brian Becker
  1 sibling, 1 reply; 16+ messages in thread
From: Ilia Mirkin @ 2014-07-04  2:43 UTC (permalink / raw)
  To: Yijing Wang; +Cc: Brian Becker, linux-pci, nouveau@lists.freedesktop.org

On Thu, Jul 3, 2014 at 10:35 PM, Yijing Wang <wangyijing@huawei.com> wrote:
> Hi Brian,
>    From your 01:00.0 VGA compatible controller PCI config register, it supports 1 MSI vector, so I think this
> card has no problem. But you didn't answer what's the pci_enable_msi() return during it enable MSI fail.
>
> You can check PCI bus whether support MSI like:
>
> cat /sys/bus/pci/devices/00:0e.0/msi_bus
>
> Other, do you call pci_enable_device() before pci_enable_msi() ?

Yes, the device is enabled. nouveau does generally work for most
people :) And it works fine here if MSI is forced off.

The problem here is that pci_enable_msi() succeeds, but it probably
shouldn't. I don't know all the details about MSI, but doesn't the CPU
or (L)APIC have to support it? In this case, it's a P200MMX on a 430FX
chipset board. Both quite ancient...

So given that the PCI device itself supports MSI, how do we tell that
it shouldn't actually get turned on?

  -ilia

>
> On 2014/7/4 8:35, Brian Becker wrote:
>> I mistakenly only replied to Yijing Wang the first time. Here are the further details.
>>
>> uname -a: Linux p5-133 3.15.2-p5-133 #1 Thu Jun 26 22:56:27 EDT 2014 i586 GNU/Linux
>>
>> Here is the output from lspci -vvvxxx:
>>
>> root@p5-133:~# cat lspci.txt
>> 00:00.0 Host bridge: Intel Corporation 430FX - 82437FX TSC [Triton I] (rev 01)
>>         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-
>>         Latency: 64
>> 00: 86 80 2d 12 06 00 00 22 01 00 00 06 00 40 00 00
>> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 50: 88 00 41 00 00 00 00 03 49 10 55 55 55 05 55 05
>> 60: 08 10 18 20 20 00 00 00 0f 00 00 00 00 00 00 00
>> 70: 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00
>>
>> 00:07.0 ISA bridge: Intel Corporation 82371FB PIIX ISA [Triton I] (rev 02)
>>         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-
>>         Latency: 0
>> 00: 86 80 2e 12 0f 00 80 02 02 00 01 06 00 00 80 00
>> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 40: 00 00 00 00 00 00 00 00 00 00 00 00 4d 00 60 00
>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 60: 0b 0b 0b 09 00 00 00 00 00 f2 05 00 00 00 00 00
>> 70: 0f 80 00 00 00 00 04 04 02 00 00 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 03 00 e0 00 02 d0 00 a0 13 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 08 02 00 00 00 00 00 00
>>
>> 00:07.1 IDE interface: Intel Corporation 82371FB PIIX IDE [Triton I] (rev 02) (prog-if 80 [Master])
>>         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-
>>         Latency: 64
>>         Region 0: [virtual] Memory at 000001f0 (32-bit, non-prefetchable) [size=8]
>>         Region 1: [virtual] Memory at 000003f0 (type 3, non-prefetchable) [size=1]
>>         Region 2: [virtual] Memory at 00000170 (32-bit, non-prefetchable) [size=8]
>>         Region 3: [virtual] Memory at 00000370 (type 3, non-prefetchable) [size=1]
>>         Region 4: I/O ports at ef80 [size=16]
>>         Kernel driver in use: pata_oldpiix
>> 00: 86 80 30 12 05 00 80 02 02 80 01 01 00 40 00 00
>> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 20: 81 ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 40: 36 a3 07 a3 00 00 00 00 00 00 00 00 00 00 00 00
>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 08 02 00 00 00 00 00 00
>>
>> 00:0e.0 PCI bridge: PLX Technology, Inc. PEX8112 x1 Lane PCI Express-to-PCI Bridge (rev aa) (prog-if 00 [Normal decode])
>>         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-
>>         Latency: 66, Cache Line Size: 32 bytes
>>
>>         Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
>>         I/O behind bridge: 0000f000-0000ffff
>>         Memory behind bridge: f5e00000-fbffffff
>>         Prefetchable memory behind bridge: d5d00000-f5dfffff
>>         Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
>>         BridgeCtl: Parity+ SERR+ NoISA- VGA+ MAbort- >Reset- FastB2B-
>>                 PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
>>
>>         Capabilities: [40] Power Management version 2
>>                 Flags: PMEClk- DSI- D1+ D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold-
>> )
>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>
>>         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
>>                 Address: 0000000000000000  Data: 0000
>>         Capabilities: [60] Express (v1) PCI/PCI-X to PCI-Express Bridge, MSI 00
>>                 DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
>>                         ExtTag- RBE- FLReset-
>>                 DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
>>                         RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- BrConfRtry-
>>                         MaxPayload 128 bytes, MaxReadReq 512 bytes
>>                 DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
>>                 LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <1us, L1 <16us
>>                         ClockPM- Surprise- LLActRep- BwNot-
>>                 LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk-
>>                         ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
>>                 LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
>> 00: b5 10 12 81 17 01 30 02 aa 00 04 06 08 42 01 00
>> 10: 00 00 00 00 00 00 00 00 00 01 01 00 f0 f0 00 00
>> 20: e0 f5 f0 fb d0 d5 d0 f5 00 00 00 00 00 00 00 00
>> 30: 00 00 00 00 40 00 00 00 00 00 00 00 00 01 0b 00
>> 40: 01 50 02 5a 00 00 00 00 10 28 0e 00 00 00 00 00
>> 50: 05 60 80 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 60: 10 00 81 00 00 00 00 00 00 20 00 00 11 4c 02 00
>> 70: 00 00 11 00 80 0c 00 00 00 00 40 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 33 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>
>> 00:0f.0 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03) (prog-if 10 [OHCI])
>>         Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
>>         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-
>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>         Interrupt: pin B routed to IRQ 9
>>         Region 0: Memory at ffbeb000 (32-bit, non-prefetchable) [size=4K]
>>         Capabilities: [60] Power Management version 2
>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold+)
>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>         Kernel driver in use: ohci-pci
>> 00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 40 80 00
>> 10: 00 b0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 09 02 00 50
>> 40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>
>> 00:0f.1 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03) (prog-if 10 [OHCI])
>>         Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
>>         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-
>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>         Interrupt: pin C routed to IRQ 11
>>         Region 0: Memory at ffbec000 (32-bit, non-prefetchable) [size=4K]
>>         Capabilities: [60] Power Management version 2
>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold+)
>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>         Kernel driver in use: ohci-pci
>> 00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 40 80 00
>> 10: 00 c0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 03 00 50
>> 40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>
>> 00:0f.2 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03) (prog-if 10 [OHCI])
>>         Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
>>         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-
>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>         Interrupt: pin D routed to IRQ 11
>>         Region 0: Memory at ffbed000 (32-bit, non-prefetchable) [size=4K]
>>         Capabilities: [60] Power Management version 2
>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold+)
>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>         Kernel driver in use: ohci-pci
>> 00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 40 80 00
>> 10: 00 d0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 04 00 50
>> 40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>
>> 00:0f.3 USB controller: ULi Electronics Inc. USB 2.0 Controller (rev 01) (prog-if 20 [EHCI])
>>         Subsystem: ULi Electronics Inc. Device 5272
>>         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-
>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>         Interrupt: pin A routed to IRQ 11
>>         Region 0: Memory at ffbefc00 (32-bit, non-prefetchable) [size=256]
>>         Capabilities: [50] Power Management version 2
>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>         Capabilities: [58] Debug port: BAR=1 offset=0090
>>         Kernel driver in use: ehci-pci
>> 00: b9 10 39 52 16 01 b0 02 01 20 03 0c 08 40 80 00
>> 10: 00 fc be ff 00 00 00 00 00 00 00 00 00 00 00 00
>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 72 52
>> 30: 00 00 00 00 50 00 00 00 00 00 00 00 0b 01 00 50
>> 40: 01 02 00 ee 00 00 10 c4 00 00 00 00 00 00 00 00
>> 50: 01 58 02 c8 00 00 00 00 0a 00 90 20 00 00 00 00
>> 60: 20 20 7f 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 70: 01 00 00 00 00 00 00 c0 00 00 00 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>
>> 00:10.0 RAID bus controller: Silicon Image, Inc. PCI0680 Ultra ATA-133 Host Controller (rev 02)
>>         Subsystem: Silicon Image, Inc. Winic W-680 (Silicon Image 680 based)
>>         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-
>>         Latency: 64, Cache Line Size: 4 bytes
>>         Interrupt: pin A routed to IRQ 9
>>         Region 0: I/O ports at eff0 [size=8]
>>         Region 1: I/O ports at efe4 [size=4]
>>         Region 2: I/O ports at efa8 [size=8]
>>         Region 3: I/O ports at efe0 [size=4]
>>         Region 4: I/O ports at ef90 [size=16]
>>         Region 5: Memory at ffbeec00 (32-bit, non-prefetchable) [size=256]
>>         [virtual] Expansion ROM at 08000000 [disabled] [size=512K]
>>         Capabilities: [60] Power Management version 2
>>                 Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=2 PME-
>>         Kernel driver in use: pata_sil680
>> 00: 95 10 80 06 07 01 90 02 02 00 04 01 01 40 00 00
>> 10: f1 ef 00 00 e5 ef 00 00 a9 ef 00 00 e1 ef 00 00
>> 20: 91 ef 00 00 00 ec be ff 00 00 00 00 95 10 80 36
>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 09 01 00 00
>> 40: 00 00 00 00 90 14 19 08 00 00 00 00 00 00 00 00
>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 60: 01 00 22 06 00 40 00 64 00 00 00 00 00 00 00 00
>> 70: 08 00 00 00 00 70 57 07 00 00 00 00 00 00 00 00
>> 80: 03 00 00 00 00 00 00 00 00 00 11 00 d9 7d ff 7b
>> 90: 00 fe 00 0d ff ff ff 3b 33 00 00 19 ff 00 00 00
>> a0: 00 62 c1 10 c1 10 8a 32 c1 10 92 43 07 40 09 40
>> b0: 01 60 8a 32 8a 32 8a 32 92 43 92 43 09 40 09 40
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>
>> 01:00.0 VGA compatible controller: NVIDIA Corporation G96 [GeForce 9400 GT] (rev a1) (prog-if 00 [VGA controller])
>>         Subsystem: Jaton Corp Device 0641
>>         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-
>>         Latency: 0, Cache Line Size: 32 bytes
>>         Interrupt: pin A routed to IRQ 11
>>         Region 0: Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
>>         Region 1: Memory at e0000000 (64-bit, prefetchable) [size=256M]
>>         Region 3: Memory at f8000000 (64-bit, non-prefetchable) [size=32M]
>>         Region 5: I/O ports at fc80 [size=128]
>>
>>         [virtual] Expansion ROM at d5d00000 [disabled] [size=512K]
>>         Capabilities: [60] Power Management version 3
>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>
>>         Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
>>                 Address: 0000000000000000  Data: 0000
>>         Capabilities: [78] Express (v1) Endpoint, MSI 00
>>                 DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <512ns, L1 <4us
>>                         ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
>>                 DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
>>                         RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
>>                         MaxPayload 128 bytes, MaxReadReq 512 bytes
>>                 DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
>>                 LnkCap: Port #0, Speed 2.5GT/s, Width x16, ASPM L0s L1, Latency L0 <512ns, L1 <1us
>>                         ClockPM- Surprise- LLActRep- BwNot-
>>                 LnkCtl: ASPM Disabled; RCB 128 bytes Disabled- Retrain- CommClk-
>>                         ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
>>                 LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
>>
>>         Capabilities: [b4] Vendor Specific Information: Len=14 <?>
>>         Kernel driver in use: nouveau
>> 00: de 10 41 06 07 01 10 00 a1 00 00 03 08 00 00 00
>> 10: 00 00 00 fb 0c 00 00 e0 00 00 00 00 04 00 00 f8
>> 20: 00 00 00 00 81 fc 00 00 00 00 00 00 13 1b 41 06
>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 01 00 00
>> 40: 13 1b 41 06 00 00 00 00 00 00 00 00 00 00 00 00
>> 50: 01 00 00 00 01 00 00 00 ce d6 23 00 00 00 00 00
>> 60: 01 68 03 00 00 00 00 00 05 78 80 00 00 00 00 00
>> 70: 00 00 00 00 00 00 00 00 10 b4 01 00 e0 84 64 00
>> 80: 10 28 00 00 01 3d 00 00 08 00 11 10 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 09 00 14 01 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>
>>
>>
>> On Thu, Jul 3, 2014 at 1:58 AM, Yijing Wang <wangyijing@huawei.com <mailto:wangyijing@huawei.com>> wrote:
>>
>>     On 2014/7/3 11:20, Ilia Mirkin wrote:
>>     > Hello,
>>     >
>>     > A user (cc'd) reported that nouveau's enabling of MSI causes the card
>>     > to not work on his setup [1]. I think the situation is that MSI is
>>     > just not supported by the underlying motherboard, even though the
>>     > card, and probably bridge, support it just fine. It's a very old
>>     > board. The nouveau code does:
>>
>>
>>     What is the kernel version running in your board ?
>>
>>     >
>>     > pmc->use_msi = pci_enable_msi(device->pdev) == 0;
>>
>>     Driver call pci_enable_msi() and always return 0 ?
>>
>>     >
>>     > Does it need to do more checking than that before trying to enable MSI
>>     > on the device? Could it be that the linux pci subsystem is missing on
>>     > inheriting MSI capabilities somewhere?
>>
>>     pci_enable_msi() will checking your device whether it supports MSI.
>>     Can you provide the detailed lspci information ? eg. lspci -vvvxxx ?
>>
>>
>>     >
>>     >   -ilia
>>     >
>>     > [1]
>>     >
>>     > 00:00.0 Host bridge [0600]: Intel Corporation 430FX - 82437FX TSC
>>     > [Triton I] [8086:122d] (rev 01)
>>     >         Flags: bus master, medium devsel, latency 64
>>     >
>>     > 00:0e.0 PCI bridge [0604]: PLX Technology, Inc. PEX8112 x1 Lane PCI
>>     > Express-to-PCI Bridge [10b5:8112] (rev aa) (prog-if 00 [Normal
>>     > decode])
>>     >         Flags: bus master, 66MHz, medium devsel, latency 66
>>     >         Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
>>     >         I/O behind bridge: 0000f000-0000ffff
>>     >         Memory behind bridge: f5e00000-fbffffff
>>     >         Prefetchable memory behind bridge: d5d00000-f5dfffff
>>     >         Capabilities: [40] Power Management version 2
>>     >         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
>>     >         Capabilities: [60] Express PCI/PCI-X to PCI-Express Bridge, MSI 00
>>     >
>>     > 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation G96
>>     > [GeForce 9400 GT] [10de:0641] (rev a1) (prog-if 00 [VGA controller])
>>     >         Subsystem: Jaton Corp Device [1b13:0641]
>>     >         Flags: bus master, fast devsel, latency 0, IRQ 11
>>     >         Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
>>     >         Memory at e0000000 (64-bit, prefetchable) [size=256M]
>>     >         Memory at f8000000 (64-bit, non-prefetchable) [size=32M]
>>     >         I/O ports at fc80 [size=128]
>>     >         [virtual] Expansion ROM at d5d00000 [disabled] [size=512K]
>>     >         Capabilities: [60] Power Management version 3
>>     >         Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
>>     >         Capabilities: [78] Express Endpoint, MSI 00
>>     >         Capabilities: [b4] Vendor Specific Information: Len=14 <?>
>>     >         Kernel driver in use: nouveau
>>     > --
>>     > To unsubscribe from this list: send the line "unsubscribe linux-pci" in
>>     > the body of a message to majordomo@vger.kernel.org <mailto:majordomo@vger.kernel.org>
>>     > More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>     >
>>     >
>>
>>
>>     --
>>     Thanks!
>>     Yijing
>>
>>
>
>
> --
> Thanks!
> Yijing
>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to check for proper MSI support?
  2014-07-04  2:35     ` Yijing Wang
  2014-07-04  2:43       ` Ilia Mirkin
@ 2014-07-04  2:45       ` Brian Becker
  2014-07-04  3:13         ` Yijing Wang
  1 sibling, 1 reply; 16+ messages in thread
From: Brian Becker @ 2014-07-04  2:45 UTC (permalink / raw)
  To: Yijing Wang; +Cc: Ilia Mirkin, linux-pci, nouveau@lists.freedesktop.org

Yijing,

cat /sys/bus/pci/devices/0000\:00\:0e.0/msi_bus returns 1, suggesting
that it supports MSI. However, this "00:0e.0 PCI bridge: PLX
Technology, Inc. PEX8112 x1 Lane PCI Express-to-PCI Bridge (rev aa)"
is a component of the addin card. Wouldn't the lack of support for MSI
by the chipset "00:00.0 Host bridge: Intel Corporation 430FX - 82437FX
TSC [Triton I] (rev 01)" preclude the use of MSI with buses attached
via a bridge?

Thanks,
Brian

On Thu, Jul 3, 2014 at 10:35 PM, Yijing Wang <wangyijing@huawei.com> wrote:
> Hi Brian,
>    From your 01:00.0 VGA compatible controller PCI config register, it supports 1 MSI vector, so I think this
> card has no problem. But you didn't answer what's the pci_enable_msi() return during it enable MSI fail.
>
> You can check PCI bus whether support MSI like:
>
> cat /sys/bus/pci/devices/00:0e.0/msi_bus
>
> Other, do you call pci_enable_device() before pci_enable_msi() ?
>
> On 2014/7/4 8:35, Brian Becker wrote:
>> I mistakenly only replied to Yijing Wang the first time. Here are the further details.
>>
>> uname -a: Linux p5-133 3.15.2-p5-133 #1 Thu Jun 26 22:56:27 EDT 2014 i586 GNU/Linux
>>
>> Here is the output from lspci -vvvxxx:
>>
>> root@p5-133:~# cat lspci.txt
>> 00:00.0 Host bridge: Intel Corporation 430FX - 82437FX TSC [Triton I] (rev 01)
>>         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-
>>         Latency: 64
>> 00: 86 80 2d 12 06 00 00 22 01 00 00 06 00 40 00 00
>> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 50: 88 00 41 00 00 00 00 03 49 10 55 55 55 05 55 05
>> 60: 08 10 18 20 20 00 00 00 0f 00 00 00 00 00 00 00
>> 70: 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00
>>
>> 00:07.0 ISA bridge: Intel Corporation 82371FB PIIX ISA [Triton I] (rev 02)
>>         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-
>>         Latency: 0
>> 00: 86 80 2e 12 0f 00 80 02 02 00 01 06 00 00 80 00
>> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 40: 00 00 00 00 00 00 00 00 00 00 00 00 4d 00 60 00
>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 60: 0b 0b 0b 09 00 00 00 00 00 f2 05 00 00 00 00 00
>> 70: 0f 80 00 00 00 00 04 04 02 00 00 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 03 00 e0 00 02 d0 00 a0 13 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 08 02 00 00 00 00 00 00
>>
>> 00:07.1 IDE interface: Intel Corporation 82371FB PIIX IDE [Triton I] (rev 02) (prog-if 80 [Master])
>>         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-
>>         Latency: 64
>>         Region 0: [virtual] Memory at 000001f0 (32-bit, non-prefetchable) [size=8]
>>         Region 1: [virtual] Memory at 000003f0 (type 3, non-prefetchable) [size=1]
>>         Region 2: [virtual] Memory at 00000170 (32-bit, non-prefetchable) [size=8]
>>         Region 3: [virtual] Memory at 00000370 (type 3, non-prefetchable) [size=1]
>>         Region 4: I/O ports at ef80 [size=16]
>>         Kernel driver in use: pata_oldpiix
>> 00: 86 80 30 12 05 00 80 02 02 80 01 01 00 40 00 00
>> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 20: 81 ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 40: 36 a3 07 a3 00 00 00 00 00 00 00 00 00 00 00 00
>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 08 02 00 00 00 00 00 00
>>
>> 00:0e.0 PCI bridge: PLX Technology, Inc. PEX8112 x1 Lane PCI Express-to-PCI Bridge (rev aa) (prog-if 00 [Normal decode])
>>         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-
>>         Latency: 66, Cache Line Size: 32 bytes
>>
>>         Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
>>         I/O behind bridge: 0000f000-0000ffff
>>         Memory behind bridge: f5e00000-fbffffff
>>         Prefetchable memory behind bridge: d5d00000-f5dfffff
>>         Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
>>         BridgeCtl: Parity+ SERR+ NoISA- VGA+ MAbort- >Reset- FastB2B-
>>                 PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
>>
>>         Capabilities: [40] Power Management version 2
>>                 Flags: PMEClk- DSI- D1+ D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold-
>> )
>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>
>>         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
>>                 Address: 0000000000000000  Data: 0000
>>         Capabilities: [60] Express (v1) PCI/PCI-X to PCI-Express Bridge, MSI 00
>>                 DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
>>                         ExtTag- RBE- FLReset-
>>                 DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
>>                         RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- BrConfRtry-
>>                         MaxPayload 128 bytes, MaxReadReq 512 bytes
>>                 DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
>>                 LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <1us, L1 <16us
>>                         ClockPM- Surprise- LLActRep- BwNot-
>>                 LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk-
>>                         ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
>>                 LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
>> 00: b5 10 12 81 17 01 30 02 aa 00 04 06 08 42 01 00
>> 10: 00 00 00 00 00 00 00 00 00 01 01 00 f0 f0 00 00
>> 20: e0 f5 f0 fb d0 d5 d0 f5 00 00 00 00 00 00 00 00
>> 30: 00 00 00 00 40 00 00 00 00 00 00 00 00 01 0b 00
>> 40: 01 50 02 5a 00 00 00 00 10 28 0e 00 00 00 00 00
>> 50: 05 60 80 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 60: 10 00 81 00 00 00 00 00 00 20 00 00 11 4c 02 00
>> 70: 00 00 11 00 80 0c 00 00 00 00 40 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 33 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>
>> 00:0f.0 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03) (prog-if 10 [OHCI])
>>         Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
>>         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-
>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>         Interrupt: pin B routed to IRQ 9
>>         Region 0: Memory at ffbeb000 (32-bit, non-prefetchable) [size=4K]
>>         Capabilities: [60] Power Management version 2
>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold+)
>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>         Kernel driver in use: ohci-pci
>> 00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 40 80 00
>> 10: 00 b0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 09 02 00 50
>> 40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>
>> 00:0f.1 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03) (prog-if 10 [OHCI])
>>         Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
>>         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-
>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>         Interrupt: pin C routed to IRQ 11
>>         Region 0: Memory at ffbec000 (32-bit, non-prefetchable) [size=4K]
>>         Capabilities: [60] Power Management version 2
>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold+)
>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>         Kernel driver in use: ohci-pci
>> 00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 40 80 00
>> 10: 00 c0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 03 00 50
>> 40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>
>> 00:0f.2 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03) (prog-if 10 [OHCI])
>>         Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
>>         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-
>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>         Interrupt: pin D routed to IRQ 11
>>         Region 0: Memory at ffbed000 (32-bit, non-prefetchable) [size=4K]
>>         Capabilities: [60] Power Management version 2
>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold+)
>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>         Kernel driver in use: ohci-pci
>> 00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 40 80 00
>> 10: 00 d0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 04 00 50
>> 40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>
>> 00:0f.3 USB controller: ULi Electronics Inc. USB 2.0 Controller (rev 01) (prog-if 20 [EHCI])
>>         Subsystem: ULi Electronics Inc. Device 5272
>>         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-
>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>         Interrupt: pin A routed to IRQ 11
>>         Region 0: Memory at ffbefc00 (32-bit, non-prefetchable) [size=256]
>>         Capabilities: [50] Power Management version 2
>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>         Capabilities: [58] Debug port: BAR=1 offset=0090
>>         Kernel driver in use: ehci-pci
>> 00: b9 10 39 52 16 01 b0 02 01 20 03 0c 08 40 80 00
>> 10: 00 fc be ff 00 00 00 00 00 00 00 00 00 00 00 00
>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 72 52
>> 30: 00 00 00 00 50 00 00 00 00 00 00 00 0b 01 00 50
>> 40: 01 02 00 ee 00 00 10 c4 00 00 00 00 00 00 00 00
>> 50: 01 58 02 c8 00 00 00 00 0a 00 90 20 00 00 00 00
>> 60: 20 20 7f 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 70: 01 00 00 00 00 00 00 c0 00 00 00 00 00 00 00 00
>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>
>> 00:10.0 RAID bus controller: Silicon Image, Inc. PCI0680 Ultra ATA-133 Host Controller (rev 02)
>>         Subsystem: Silicon Image, Inc. Winic W-680 (Silicon Image 680 based)
>>         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-
>>         Latency: 64, Cache Line Size: 4 bytes
>>         Interrupt: pin A routed to IRQ 9
>>         Region 0: I/O ports at eff0 [size=8]
>>         Region 1: I/O ports at efe4 [size=4]
>>         Region 2: I/O ports at efa8 [size=8]
>>         Region 3: I/O ports at efe0 [size=4]
>>         Region 4: I/O ports at ef90 [size=16]
>>         Region 5: Memory at ffbeec00 (32-bit, non-prefetchable) [size=256]
>>         [virtual] Expansion ROM at 08000000 [disabled] [size=512K]
>>         Capabilities: [60] Power Management version 2
>>                 Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=2 PME-
>>         Kernel driver in use: pata_sil680
>> 00: 95 10 80 06 07 01 90 02 02 00 04 01 01 40 00 00
>> 10: f1 ef 00 00 e5 ef 00 00 a9 ef 00 00 e1 ef 00 00
>> 20: 91 ef 00 00 00 ec be ff 00 00 00 00 95 10 80 36
>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 09 01 00 00
>> 40: 00 00 00 00 90 14 19 08 00 00 00 00 00 00 00 00
>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> 60: 01 00 22 06 00 40 00 64 00 00 00 00 00 00 00 00
>> 70: 08 00 00 00 00 70 57 07 00 00 00 00 00 00 00 00
>> 80: 03 00 00 00 00 00 00 00 00 00 11 00 d9 7d ff 7b
>> 90: 00 fe 00 0d ff ff ff 3b 33 00 00 19 ff 00 00 00
>> a0: 00 62 c1 10 c1 10 8a 32 c1 10 92 43 07 40 09 40
>> b0: 01 60 8a 32 8a 32 8a 32 92 43 92 43 09 40 09 40
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>
>> 01:00.0 VGA compatible controller: NVIDIA Corporation G96 [GeForce 9400 GT] (rev a1) (prog-if 00 [VGA controller])
>>         Subsystem: Jaton Corp Device 0641
>>         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-
>>         Latency: 0, Cache Line Size: 32 bytes
>>         Interrupt: pin A routed to IRQ 11
>>         Region 0: Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
>>         Region 1: Memory at e0000000 (64-bit, prefetchable) [size=256M]
>>         Region 3: Memory at f8000000 (64-bit, non-prefetchable) [size=32M]
>>         Region 5: I/O ports at fc80 [size=128]
>>
>>         [virtual] Expansion ROM at d5d00000 [disabled] [size=512K]
>>         Capabilities: [60] Power Management version 3
>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>
>>         Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
>>                 Address: 0000000000000000  Data: 0000
>>         Capabilities: [78] Express (v1) Endpoint, MSI 00
>>                 DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <512ns, L1 <4us
>>                         ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
>>                 DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
>>                         RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
>>                         MaxPayload 128 bytes, MaxReadReq 512 bytes
>>                 DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
>>                 LnkCap: Port #0, Speed 2.5GT/s, Width x16, ASPM L0s L1, Latency L0 <512ns, L1 <1us
>>                         ClockPM- Surprise- LLActRep- BwNot-
>>                 LnkCtl: ASPM Disabled; RCB 128 bytes Disabled- Retrain- CommClk-
>>                         ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
>>                 LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
>>
>>         Capabilities: [b4] Vendor Specific Information: Len=14 <?>
>>         Kernel driver in use: nouveau
>> 00: de 10 41 06 07 01 10 00 a1 00 00 03 08 00 00 00
>> 10: 00 00 00 fb 0c 00 00 e0 00 00 00 00 04 00 00 f8
>> 20: 00 00 00 00 81 fc 00 00 00 00 00 00 13 1b 41 06
>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 01 00 00
>> 40: 13 1b 41 06 00 00 00 00 00 00 00 00 00 00 00 00
>> 50: 01 00 00 00 01 00 00 00 ce d6 23 00 00 00 00 00
>> 60: 01 68 03 00 00 00 00 00 05 78 80 00 00 00 00 00
>> 70: 00 00 00 00 00 00 00 00 10 b4 01 00 e0 84 64 00
>> 80: 10 28 00 00 01 3d 00 00 08 00 11 10 00 00 00 00
>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> b0: 00 00 00 00 09 00 14 01 00 00 00 00 00 00 00 00
>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>
>>
>>
>> On Thu, Jul 3, 2014 at 1:58 AM, Yijing Wang <wangyijing@huawei.com <mailto:wangyijing@huawei.com>> wrote:
>>
>>     On 2014/7/3 11:20, Ilia Mirkin wrote:
>>     > Hello,
>>     >
>>     > A user (cc'd) reported that nouveau's enabling of MSI causes the card
>>     > to not work on his setup [1]. I think the situation is that MSI is
>>     > just not supported by the underlying motherboard, even though the
>>     > card, and probably bridge, support it just fine. It's a very old
>>     > board. The nouveau code does:
>>
>>
>>     What is the kernel version running in your board ?
>>
>>     >
>>     > pmc->use_msi = pci_enable_msi(device->pdev) == 0;
>>
>>     Driver call pci_enable_msi() and always return 0 ?
>>
>>     >
>>     > Does it need to do more checking than that before trying to enable MSI
>>     > on the device? Could it be that the linux pci subsystem is missing on
>>     > inheriting MSI capabilities somewhere?
>>
>>     pci_enable_msi() will checking your device whether it supports MSI.
>>     Can you provide the detailed lspci information ? eg. lspci -vvvxxx ?
>>
>>
>>     >
>>     >   -ilia
>>     >
>>     > [1]
>>     >
>>     > 00:00.0 Host bridge [0600]: Intel Corporation 430FX - 82437FX TSC
>>     > [Triton I] [8086:122d] (rev 01)
>>     >         Flags: bus master, medium devsel, latency 64
>>     >
>>     > 00:0e.0 PCI bridge [0604]: PLX Technology, Inc. PEX8112 x1 Lane PCI
>>     > Express-to-PCI Bridge [10b5:8112] (rev aa) (prog-if 00 [Normal
>>     > decode])
>>     >         Flags: bus master, 66MHz, medium devsel, latency 66
>>     >         Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
>>     >         I/O behind bridge: 0000f000-0000ffff
>>     >         Memory behind bridge: f5e00000-fbffffff
>>     >         Prefetchable memory behind bridge: d5d00000-f5dfffff
>>     >         Capabilities: [40] Power Management version 2
>>     >         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
>>     >         Capabilities: [60] Express PCI/PCI-X to PCI-Express Bridge, MSI 00
>>     >
>>     > 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation G96
>>     > [GeForce 9400 GT] [10de:0641] (rev a1) (prog-if 00 [VGA controller])
>>     >         Subsystem: Jaton Corp Device [1b13:0641]
>>     >         Flags: bus master, fast devsel, latency 0, IRQ 11
>>     >         Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
>>     >         Memory at e0000000 (64-bit, prefetchable) [size=256M]
>>     >         Memory at f8000000 (64-bit, non-prefetchable) [size=32M]
>>     >         I/O ports at fc80 [size=128]
>>     >         [virtual] Expansion ROM at d5d00000 [disabled] [size=512K]
>>     >         Capabilities: [60] Power Management version 3
>>     >         Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
>>     >         Capabilities: [78] Express Endpoint, MSI 00
>>     >         Capabilities: [b4] Vendor Specific Information: Len=14 <?>
>>     >         Kernel driver in use: nouveau
>>     > --
>>     > To unsubscribe from this list: send the line "unsubscribe linux-pci" in
>>     > the body of a message to majordomo@vger.kernel.org <mailto:majordomo@vger.kernel.org>
>>     > More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>     >
>>     >
>>
>>
>>     --
>>     Thanks!
>>     Yijing
>>
>>
>
>
> --
> Thanks!
> Yijing
>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to check for proper MSI support?
  2014-07-04  2:43       ` Ilia Mirkin
@ 2014-07-04  3:09         ` Yijing Wang
  2014-07-04  3:30           ` Ilia Mirkin
  0 siblings, 1 reply; 16+ messages in thread
From: Yijing Wang @ 2014-07-04  3:09 UTC (permalink / raw)
  To: Ilia Mirkin; +Cc: Brian Becker, linux-pci, nouveau@lists.freedesktop.org

On 2014/7/4 10:43, Ilia Mirkin wrote:
> On Thu, Jul 3, 2014 at 10:35 PM, Yijing Wang <wangyijing@huawei.com> wrote:
>> Hi Brian,
>>    From your 01:00.0 VGA compatible controller PCI config register, it supports 1 MSI vector, so I think this
>> card has no problem. But you didn't answer what's the pci_enable_msi() return during it enable MSI fail.
>>
>> You can check PCI bus whether support MSI like:
>>
>> cat /sys/bus/pci/devices/00:0e.0/msi_bus
>>
>> Other, do you call pci_enable_device() before pci_enable_msi() ?
> 
> Yes, the device is enabled. nouveau does generally work for most
> people :) And it works fine here if MSI is forced off.
>
> The problem here is that pci_enable_msi() succeeds, but it probably

It's some strange, pci_enable_msi() succeeds, but there is nothing in MSI address and data register

        Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
                Address: 0000000000000000  Data: 0000
Because the address and data is invalid, so MSI can not work.

Because you said pci_enable_msi() return 0 which indicates success, so I guess the device
current power state is not D0, because checking code in __write_msi_msi.

void __write_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
{
    if (entry->dev->current_state != PCI_D0) {
        /* Don't touch the hardware now */
    } else if (entry->msi_attrib.is_msix) {
        void __iomem *base;
        base = entry->mask_base +
            entry->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE;

        writel(msg->address_lo, base + PCI_MSIX_ENTRY_LOWER_ADDR);
        writel(msg->address_hi, base + PCI_MSIX_ENTRY_UPPER_ADDR);
        writel(msg->data, base + PCI_MSIX_ENTRY_DATA);
    ......

> shouldn't. I don't know all the details about MSI, but doesn't the CPU
> or (L)APIC have to support it? In this case, it's a P200MMX on a 430FX
> chipset board. Both quite ancient...

MSI in x86 always send to specific interrupt address(0xfeexxxx), most x86 CPU
should support MSI, but I am not sure, I don't know hardware much.

> 
> So given that the PCI device itself supports MSI, how do we tell that
> it shouldn't actually get turned on?

Generally, some message in dmesg like:
[   17.322311] ahci 0000:00:1f.2: irq 119 for MSI/MSI-X
[   17.322319] ahci 0000:00:1f.2: irq 120 for MSI/MSI-X
[   17.322326] ahci 0000:00:1f.2: irq 121 for MSI/MSI-X
[   17.322333] ahci 0000:00:1f.2: irq 122 for MSI/MSI-X
[   17.322339] ahci 0000:00:1f.2: irq 123 for MSI/MSI-X

Also you can check /proc/interrupts I think.

> 
>   -ilia
> 
>>
>> On 2014/7/4 8:35, Brian Becker wrote:
>>> I mistakenly only replied to Yijing Wang the first time. Here are the further details.
>>>
>>> uname -a: Linux p5-133 3.15.2-p5-133 #1 Thu Jun 26 22:56:27 EDT 2014 i586 GNU/Linux
>>>
>>> Here is the output from lspci -vvvxxx:
>>>
>>> root@p5-133:~# cat lspci.txt
>>> 00:00.0 Host bridge: Intel Corporation 430FX - 82437FX TSC [Triton I] (rev 01)
>>>         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-
>>>         Latency: 64
>>> 00: 86 80 2d 12 06 00 00 22 01 00 00 06 00 40 00 00
>>> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 50: 88 00 41 00 00 00 00 03 49 10 55 55 55 05 55 05
>>> 60: 08 10 18 20 20 00 00 00 0f 00 00 00 00 00 00 00
>>> 70: 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00
>>>
>>> 00:07.0 ISA bridge: Intel Corporation 82371FB PIIX ISA [Triton I] (rev 02)
>>>         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-
>>>         Latency: 0
>>> 00: 86 80 2e 12 0f 00 80 02 02 00 01 06 00 00 80 00
>>> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 40: 00 00 00 00 00 00 00 00 00 00 00 00 4d 00 60 00
>>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 60: 0b 0b 0b 09 00 00 00 00 00 f2 05 00 00 00 00 00
>>> 70: 0f 80 00 00 00 00 04 04 02 00 00 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 03 00 e0 00 02 d0 00 a0 13 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 08 02 00 00 00 00 00 00
>>>
>>> 00:07.1 IDE interface: Intel Corporation 82371FB PIIX IDE [Triton I] (rev 02) (prog-if 80 [Master])
>>>         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-
>>>         Latency: 64
>>>         Region 0: [virtual] Memory at 000001f0 (32-bit, non-prefetchable) [size=8]
>>>         Region 1: [virtual] Memory at 000003f0 (type 3, non-prefetchable) [size=1]
>>>         Region 2: [virtual] Memory at 00000170 (32-bit, non-prefetchable) [size=8]
>>>         Region 3: [virtual] Memory at 00000370 (type 3, non-prefetchable) [size=1]
>>>         Region 4: I/O ports at ef80 [size=16]
>>>         Kernel driver in use: pata_oldpiix
>>> 00: 86 80 30 12 05 00 80 02 02 80 01 01 00 40 00 00
>>> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 20: 81 ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 40: 36 a3 07 a3 00 00 00 00 00 00 00 00 00 00 00 00
>>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 08 02 00 00 00 00 00 00
>>>
>>> 00:0e.0 PCI bridge: PLX Technology, Inc. PEX8112 x1 Lane PCI Express-to-PCI Bridge (rev aa) (prog-if 00 [Normal decode])
>>>         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-
>>>         Latency: 66, Cache Line Size: 32 bytes
>>>
>>>         Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
>>>         I/O behind bridge: 0000f000-0000ffff
>>>         Memory behind bridge: f5e00000-fbffffff
>>>         Prefetchable memory behind bridge: d5d00000-f5dfffff
>>>         Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
>>>         BridgeCtl: Parity+ SERR+ NoISA- VGA+ MAbort- >Reset- FastB2B-
>>>                 PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
>>>
>>>         Capabilities: [40] Power Management version 2
>>>                 Flags: PMEClk- DSI- D1+ D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold-
>>> )
>>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>>
>>>         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
>>>                 Address: 0000000000000000  Data: 0000
>>>         Capabilities: [60] Express (v1) PCI/PCI-X to PCI-Express Bridge, MSI 00
>>>                 DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
>>>                         ExtTag- RBE- FLReset-
>>>                 DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
>>>                         RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- BrConfRtry-
>>>                         MaxPayload 128 bytes, MaxReadReq 512 bytes
>>>                 DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
>>>                 LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <1us, L1 <16us
>>>                         ClockPM- Surprise- LLActRep- BwNot-
>>>                 LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk-
>>>                         ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
>>>                 LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
>>> 00: b5 10 12 81 17 01 30 02 aa 00 04 06 08 42 01 00
>>> 10: 00 00 00 00 00 00 00 00 00 01 01 00 f0 f0 00 00
>>> 20: e0 f5 f0 fb d0 d5 d0 f5 00 00 00 00 00 00 00 00
>>> 30: 00 00 00 00 40 00 00 00 00 00 00 00 00 01 0b 00
>>> 40: 01 50 02 5a 00 00 00 00 10 28 0e 00 00 00 00 00
>>> 50: 05 60 80 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 60: 10 00 81 00 00 00 00 00 00 20 00 00 11 4c 02 00
>>> 70: 00 00 11 00 80 0c 00 00 00 00 40 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 33 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>
>>> 00:0f.0 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03) (prog-if 10 [OHCI])
>>>         Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
>>>         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-
>>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>>         Interrupt: pin B routed to IRQ 9
>>>         Region 0: Memory at ffbeb000 (32-bit, non-prefetchable) [size=4K]
>>>         Capabilities: [60] Power Management version 2
>>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold+)
>>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>>         Kernel driver in use: ohci-pci
>>> 00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 40 80 00
>>> 10: 00 b0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
>>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
>>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 09 02 00 50
>>> 40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
>>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
>>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>
>>> 00:0f.1 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03) (prog-if 10 [OHCI])
>>>         Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
>>>         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-
>>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>>         Interrupt: pin C routed to IRQ 11
>>>         Region 0: Memory at ffbec000 (32-bit, non-prefetchable) [size=4K]
>>>         Capabilities: [60] Power Management version 2
>>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold+)
>>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>>         Kernel driver in use: ohci-pci
>>> 00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 40 80 00
>>> 10: 00 c0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
>>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
>>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 03 00 50
>>> 40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
>>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
>>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>
>>> 00:0f.2 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03) (prog-if 10 [OHCI])
>>>         Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
>>>         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-
>>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>>         Interrupt: pin D routed to IRQ 11
>>>         Region 0: Memory at ffbed000 (32-bit, non-prefetchable) [size=4K]
>>>         Capabilities: [60] Power Management version 2
>>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold+)
>>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>>         Kernel driver in use: ohci-pci
>>> 00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 40 80 00
>>> 10: 00 d0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
>>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
>>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 04 00 50
>>> 40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
>>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
>>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>
>>> 00:0f.3 USB controller: ULi Electronics Inc. USB 2.0 Controller (rev 01) (prog-if 20 [EHCI])
>>>         Subsystem: ULi Electronics Inc. Device 5272
>>>         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-
>>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>>         Interrupt: pin A routed to IRQ 11
>>>         Region 0: Memory at ffbefc00 (32-bit, non-prefetchable) [size=256]
>>>         Capabilities: [50] Power Management version 2
>>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
>>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>>         Capabilities: [58] Debug port: BAR=1 offset=0090
>>>         Kernel driver in use: ehci-pci
>>> 00: b9 10 39 52 16 01 b0 02 01 20 03 0c 08 40 80 00
>>> 10: 00 fc be ff 00 00 00 00 00 00 00 00 00 00 00 00
>>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 72 52
>>> 30: 00 00 00 00 50 00 00 00 00 00 00 00 0b 01 00 50
>>> 40: 01 02 00 ee 00 00 10 c4 00 00 00 00 00 00 00 00
>>> 50: 01 58 02 c8 00 00 00 00 0a 00 90 20 00 00 00 00
>>> 60: 20 20 7f 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 70: 01 00 00 00 00 00 00 c0 00 00 00 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>
>>> 00:10.0 RAID bus controller: Silicon Image, Inc. PCI0680 Ultra ATA-133 Host Controller (rev 02)
>>>         Subsystem: Silicon Image, Inc. Winic W-680 (Silicon Image 680 based)
>>>         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-
>>>         Latency: 64, Cache Line Size: 4 bytes
>>>         Interrupt: pin A routed to IRQ 9
>>>         Region 0: I/O ports at eff0 [size=8]
>>>         Region 1: I/O ports at efe4 [size=4]
>>>         Region 2: I/O ports at efa8 [size=8]
>>>         Region 3: I/O ports at efe0 [size=4]
>>>         Region 4: I/O ports at ef90 [size=16]
>>>         Region 5: Memory at ffbeec00 (32-bit, non-prefetchable) [size=256]
>>>         [virtual] Expansion ROM at 08000000 [disabled] [size=512K]
>>>         Capabilities: [60] Power Management version 2
>>>                 Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
>>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=2 PME-
>>>         Kernel driver in use: pata_sil680
>>> 00: 95 10 80 06 07 01 90 02 02 00 04 01 01 40 00 00
>>> 10: f1 ef 00 00 e5 ef 00 00 a9 ef 00 00 e1 ef 00 00
>>> 20: 91 ef 00 00 00 ec be ff 00 00 00 00 95 10 80 36
>>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 09 01 00 00
>>> 40: 00 00 00 00 90 14 19 08 00 00 00 00 00 00 00 00
>>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 60: 01 00 22 06 00 40 00 64 00 00 00 00 00 00 00 00
>>> 70: 08 00 00 00 00 70 57 07 00 00 00 00 00 00 00 00
>>> 80: 03 00 00 00 00 00 00 00 00 00 11 00 d9 7d ff 7b
>>> 90: 00 fe 00 0d ff ff ff 3b 33 00 00 19 ff 00 00 00
>>> a0: 00 62 c1 10 c1 10 8a 32 c1 10 92 43 07 40 09 40
>>> b0: 01 60 8a 32 8a 32 8a 32 92 43 92 43 09 40 09 40
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>
>>> 01:00.0 VGA compatible controller: NVIDIA Corporation G96 [GeForce 9400 GT] (rev a1) (prog-if 00 [VGA controller])
>>>         Subsystem: Jaton Corp Device 0641
>>>         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-
>>>         Latency: 0, Cache Line Size: 32 bytes
>>>         Interrupt: pin A routed to IRQ 11
>>>         Region 0: Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
>>>         Region 1: Memory at e0000000 (64-bit, prefetchable) [size=256M]
>>>         Region 3: Memory at f8000000 (64-bit, non-prefetchable) [size=32M]
>>>         Region 5: I/O ports at fc80 [size=128]
>>>
>>>         [virtual] Expansion ROM at d5d00000 [disabled] [size=512K]
>>>         Capabilities: [60] Power Management version 3
>>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
>>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>>
>>>         Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
>>>                 Address: 0000000000000000  Data: 0000
>>>         Capabilities: [78] Express (v1) Endpoint, MSI 00
>>>                 DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <512ns, L1 <4us
>>>                         ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
>>>                 DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
>>>                         RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
>>>                         MaxPayload 128 bytes, MaxReadReq 512 bytes
>>>                 DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
>>>                 LnkCap: Port #0, Speed 2.5GT/s, Width x16, ASPM L0s L1, Latency L0 <512ns, L1 <1us
>>>                         ClockPM- Surprise- LLActRep- BwNot-
>>>                 LnkCtl: ASPM Disabled; RCB 128 bytes Disabled- Retrain- CommClk-
>>>                         ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
>>>                 LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
>>>
>>>         Capabilities: [b4] Vendor Specific Information: Len=14 <?>
>>>         Kernel driver in use: nouveau
>>> 00: de 10 41 06 07 01 10 00 a1 00 00 03 08 00 00 00
>>> 10: 00 00 00 fb 0c 00 00 e0 00 00 00 00 04 00 00 f8
>>> 20: 00 00 00 00 81 fc 00 00 00 00 00 00 13 1b 41 06
>>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 01 00 00
>>> 40: 13 1b 41 06 00 00 00 00 00 00 00 00 00 00 00 00
>>> 50: 01 00 00 00 01 00 00 00 ce d6 23 00 00 00 00 00
>>> 60: 01 68 03 00 00 00 00 00 05 78 80 00 00 00 00 00
>>> 70: 00 00 00 00 00 00 00 00 10 b4 01 00 e0 84 64 00
>>> 80: 10 28 00 00 01 3d 00 00 08 00 11 10 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 09 00 14 01 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>
>>>
>>>
>>> On Thu, Jul 3, 2014 at 1:58 AM, Yijing Wang <wangyijing@huawei.com <mailto:wangyijing@huawei.com>> wrote:
>>>
>>>     On 2014/7/3 11:20, Ilia Mirkin wrote:
>>>     > Hello,
>>>     >
>>>     > A user (cc'd) reported that nouveau's enabling of MSI causes the card
>>>     > to not work on his setup [1]. I think the situation is that MSI is
>>>     > just not supported by the underlying motherboard, even though the
>>>     > card, and probably bridge, support it just fine. It's a very old
>>>     > board. The nouveau code does:
>>>
>>>
>>>     What is the kernel version running in your board ?
>>>
>>>     >
>>>     > pmc->use_msi = pci_enable_msi(device->pdev) == 0;
>>>
>>>     Driver call pci_enable_msi() and always return 0 ?
>>>
>>>     >
>>>     > Does it need to do more checking than that before trying to enable MSI
>>>     > on the device? Could it be that the linux pci subsystem is missing on
>>>     > inheriting MSI capabilities somewhere?
>>>
>>>     pci_enable_msi() will checking your device whether it supports MSI.
>>>     Can you provide the detailed lspci information ? eg. lspci -vvvxxx ?
>>>
>>>
>>>     >
>>>     >   -ilia
>>>     >
>>>     > [1]
>>>     >
>>>     > 00:00.0 Host bridge [0600]: Intel Corporation 430FX - 82437FX TSC
>>>     > [Triton I] [8086:122d] (rev 01)
>>>     >         Flags: bus master, medium devsel, latency 64
>>>     >
>>>     > 00:0e.0 PCI bridge [0604]: PLX Technology, Inc. PEX8112 x1 Lane PCI
>>>     > Express-to-PCI Bridge [10b5:8112] (rev aa) (prog-if 00 [Normal
>>>     > decode])
>>>     >         Flags: bus master, 66MHz, medium devsel, latency 66
>>>     >         Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
>>>     >         I/O behind bridge: 0000f000-0000ffff
>>>     >         Memory behind bridge: f5e00000-fbffffff
>>>     >         Prefetchable memory behind bridge: d5d00000-f5dfffff
>>>     >         Capabilities: [40] Power Management version 2
>>>     >         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
>>>     >         Capabilities: [60] Express PCI/PCI-X to PCI-Express Bridge, MSI 00
>>>     >
>>>     > 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation G96
>>>     > [GeForce 9400 GT] [10de:0641] (rev a1) (prog-if 00 [VGA controller])
>>>     >         Subsystem: Jaton Corp Device [1b13:0641]
>>>     >         Flags: bus master, fast devsel, latency 0, IRQ 11
>>>     >         Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
>>>     >         Memory at e0000000 (64-bit, prefetchable) [size=256M]
>>>     >         Memory at f8000000 (64-bit, non-prefetchable) [size=32M]
>>>     >         I/O ports at fc80 [size=128]
>>>     >         [virtual] Expansion ROM at d5d00000 [disabled] [size=512K]
>>>     >         Capabilities: [60] Power Management version 3
>>>     >         Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
>>>     >         Capabilities: [78] Express Endpoint, MSI 00
>>>     >         Capabilities: [b4] Vendor Specific Information: Len=14 <?>
>>>     >         Kernel driver in use: nouveau
>>>     > --
>>>     > To unsubscribe from this list: send the line "unsubscribe linux-pci" in
>>>     > the body of a message to majordomo@vger.kernel.org <mailto:majordomo@vger.kernel.org>
>>>     > More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>     >
>>>     >
>>>
>>>
>>>     --
>>>     Thanks!
>>>     Yijing
>>>
>>>
>>
>>
>> --
>> Thanks!
>> Yijing
>>
> 
> .
> 


-- 
Thanks!
Yijing


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to check for proper MSI support?
  2014-07-04  2:45       ` Brian Becker
@ 2014-07-04  3:13         ` Yijing Wang
  0 siblings, 0 replies; 16+ messages in thread
From: Yijing Wang @ 2014-07-04  3:13 UTC (permalink / raw)
  To: Brian Becker; +Cc: Ilia Mirkin, linux-pci, nouveau@lists.freedesktop.org

On 2014/7/4 10:45, Brian Becker wrote:
> Yijing,
> 
> cat /sys/bus/pci/devices/0000\:00\:0e.0/msi_bus returns 1, suggesting
> that it supports MSI. However, this "00:0e.0 PCI bridge: PLX
> Technology, Inc. PEX8112 x1 Lane PCI Express-to-PCI Bridge (rev aa)"
> is a component of the addin card. Wouldn't the lack of support for MSI
> by the chipset "00:00.0 Host bridge: Intel Corporation 430FX - 82437FX
> TSC [Triton I] (rev 01)" preclude the use of MSI with buses attached
> via a bridge?

We have no ways to check host bridge whether support MSI routing to CPU, BIOS
is responsible for setting and config this in their private registers located in IOH.
This is transparent to OS I think.

> 
> Thanks,
> Brian
> 
> On Thu, Jul 3, 2014 at 10:35 PM, Yijing Wang <wangyijing@huawei.com> wrote:
>> Hi Brian,
>>    From your 01:00.0 VGA compatible controller PCI config register, it supports 1 MSI vector, so I think this
>> card has no problem. But you didn't answer what's the pci_enable_msi() return during it enable MSI fail.
>>
>> You can check PCI bus whether support MSI like:
>>
>> cat /sys/bus/pci/devices/00:0e.0/msi_bus
>>
>> Other, do you call pci_enable_device() before pci_enable_msi() ?
>>
>> On 2014/7/4 8:35, Brian Becker wrote:
>>> I mistakenly only replied to Yijing Wang the first time. Here are the further details.
>>>
>>> uname -a: Linux p5-133 3.15.2-p5-133 #1 Thu Jun 26 22:56:27 EDT 2014 i586 GNU/Linux
>>>
>>> Here is the output from lspci -vvvxxx:
>>>
>>> root@p5-133:~# cat lspci.txt
>>> 00:00.0 Host bridge: Intel Corporation 430FX - 82437FX TSC [Triton I] (rev 01)
>>>         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-
>>>         Latency: 64
>>> 00: 86 80 2d 12 06 00 00 22 01 00 00 06 00 40 00 00
>>> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 50: 88 00 41 00 00 00 00 03 49 10 55 55 55 05 55 05
>>> 60: 08 10 18 20 20 00 00 00 0f 00 00 00 00 00 00 00
>>> 70: 00 00 0a 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00
>>>
>>> 00:07.0 ISA bridge: Intel Corporation 82371FB PIIX ISA [Triton I] (rev 02)
>>>         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-
>>>         Latency: 0
>>> 00: 86 80 2e 12 0f 00 80 02 02 00 01 06 00 00 80 00
>>> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 40: 00 00 00 00 00 00 00 00 00 00 00 00 4d 00 60 00
>>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 60: 0b 0b 0b 09 00 00 00 00 00 f2 05 00 00 00 00 00
>>> 70: 0f 80 00 00 00 00 04 04 02 00 00 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 03 00 e0 00 02 d0 00 a0 13 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 08 02 00 00 00 00 00 00
>>>
>>> 00:07.1 IDE interface: Intel Corporation 82371FB PIIX IDE [Triton I] (rev 02) (prog-if 80 [Master])
>>>         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-
>>>         Latency: 64
>>>         Region 0: [virtual] Memory at 000001f0 (32-bit, non-prefetchable) [size=8]
>>>         Region 1: [virtual] Memory at 000003f0 (type 3, non-prefetchable) [size=1]
>>>         Region 2: [virtual] Memory at 00000170 (32-bit, non-prefetchable) [size=8]
>>>         Region 3: [virtual] Memory at 00000370 (type 3, non-prefetchable) [size=1]
>>>         Region 4: I/O ports at ef80 [size=16]
>>>         Kernel driver in use: pata_oldpiix
>>> 00: 86 80 30 12 05 00 80 02 02 80 01 01 00 40 00 00
>>> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 20: 81 ef 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 40: 36 a3 07 a3 00 00 00 00 00 00 00 00 00 00 00 00
>>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 08 02 00 00 00 00 00 00
>>>
>>> 00:0e.0 PCI bridge: PLX Technology, Inc. PEX8112 x1 Lane PCI Express-to-PCI Bridge (rev aa) (prog-if 00 [Normal decode])
>>>         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-
>>>         Latency: 66, Cache Line Size: 32 bytes
>>>
>>>         Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
>>>         I/O behind bridge: 0000f000-0000ffff
>>>         Memory behind bridge: f5e00000-fbffffff
>>>         Prefetchable memory behind bridge: d5d00000-f5dfffff
>>>         Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- <SERR- <PERR-
>>>         BridgeCtl: Parity+ SERR+ NoISA- VGA+ MAbort- >Reset- FastB2B-
>>>                 PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
>>>
>>>         Capabilities: [40] Power Management version 2
>>>                 Flags: PMEClk- DSI- D1+ D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold-
>>> )
>>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>>
>>>         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
>>>                 Address: 0000000000000000  Data: 0000
>>>         Capabilities: [60] Express (v1) PCI/PCI-X to PCI-Express Bridge, MSI 00
>>>                 DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
>>>                         ExtTag- RBE- FLReset-
>>>                 DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
>>>                         RlxdOrd- ExtTag- PhantFunc- AuxPwr- NoSnoop- BrConfRtry-
>>>                         MaxPayload 128 bytes, MaxReadReq 512 bytes
>>>                 DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
>>>                 LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Latency L0 <1us, L1 <16us
>>>                         ClockPM- Surprise- LLActRep- BwNot-
>>>                 LnkCtl: ASPM Disabled; Disabled- Retrain- CommClk-
>>>                         ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
>>>                 LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
>>> 00: b5 10 12 81 17 01 30 02 aa 00 04 06 08 42 01 00
>>> 10: 00 00 00 00 00 00 00 00 00 01 01 00 f0 f0 00 00
>>> 20: e0 f5 f0 fb d0 d5 d0 f5 00 00 00 00 00 00 00 00
>>> 30: 00 00 00 00 40 00 00 00 00 00 00 00 00 01 0b 00
>>> 40: 01 50 02 5a 00 00 00 00 10 28 0e 00 00 00 00 00
>>> 50: 05 60 80 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 60: 10 00 81 00 00 00 00 00 00 20 00 00 11 4c 02 00
>>> 70: 00 00 11 00 80 0c 00 00 00 00 40 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 33 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>
>>> 00:0f.0 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03) (prog-if 10 [OHCI])
>>>         Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
>>>         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-
>>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>>         Interrupt: pin B routed to IRQ 9
>>>         Region 0: Memory at ffbeb000 (32-bit, non-prefetchable) [size=4K]
>>>         Capabilities: [60] Power Management version 2
>>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold+)
>>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>>         Kernel driver in use: ohci-pci
>>> 00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 40 80 00
>>> 10: 00 b0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
>>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
>>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 09 02 00 50
>>> 40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
>>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
>>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>
>>> 00:0f.1 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03) (prog-if 10 [OHCI])
>>>         Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
>>>         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-
>>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>>         Interrupt: pin C routed to IRQ 11
>>>         Region 0: Memory at ffbec000 (32-bit, non-prefetchable) [size=4K]
>>>         Capabilities: [60] Power Management version 2
>>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold+)
>>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>>         Kernel driver in use: ohci-pci
>>> 00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 40 80 00
>>> 10: 00 c0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
>>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
>>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 03 00 50
>>> 40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
>>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
>>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>
>>> 00:0f.2 USB controller: ULi Electronics Inc. USB 1.1 Controller (rev 03) (prog-if 10 [OHCI])
>>>         Subsystem: ULi Electronics Inc. ASRock 939Dual-SATA2 Motherboard
>>>         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-
>>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>>         Interrupt: pin D routed to IRQ 11
>>>         Region 0: Memory at ffbed000 (32-bit, non-prefetchable) [size=4K]
>>>         Capabilities: [60] Power Management version 2
>>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1+,D2-,D3hot+,D3cold+)
>>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>>         Kernel driver in use: ohci-pci
>>> 00: b9 10 37 52 17 01 b0 02 03 10 03 0c 08 40 80 00
>>> 10: 00 d0 be ff 00 00 00 00 00 00 00 00 00 00 00 00
>>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 37 52
>>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 04 00 50
>>> 40: 00 00 1f 00 e0 02 00 00 00 00 00 00 00 00 00 00
>>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 60: 01 00 02 d8 00 00 00 00 00 00 00 00 00 00 00 00
>>> 70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>
>>> 00:0f.3 USB controller: ULi Electronics Inc. USB 2.0 Controller (rev 01) (prog-if 20 [EHCI])
>>>         Subsystem: ULi Electronics Inc. Device 5272
>>>         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-
>>>         Latency: 64 (20000ns max), Cache Line Size: 32 bytes
>>>         Interrupt: pin A routed to IRQ 11
>>>         Region 0: Memory at ffbefc00 (32-bit, non-prefetchable) [size=256]
>>>         Capabilities: [50] Power Management version 2
>>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
>>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>>         Capabilities: [58] Debug port: BAR=1 offset=0090
>>>         Kernel driver in use: ehci-pci
>>> 00: b9 10 39 52 16 01 b0 02 01 20 03 0c 08 40 80 00
>>> 10: 00 fc be ff 00 00 00 00 00 00 00 00 00 00 00 00
>>> 20: 00 00 00 00 00 00 00 00 00 00 00 00 b9 10 72 52
>>> 30: 00 00 00 00 50 00 00 00 00 00 00 00 0b 01 00 50
>>> 40: 01 02 00 ee 00 00 10 c4 00 00 00 00 00 00 00 00
>>> 50: 01 58 02 c8 00 00 00 00 0a 00 90 20 00 00 00 00
>>> 60: 20 20 7f 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 70: 01 00 00 00 00 00 00 c0 00 00 00 00 00 00 00 00
>>> 80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>
>>> 00:10.0 RAID bus controller: Silicon Image, Inc. PCI0680 Ultra ATA-133 Host Controller (rev 02)
>>>         Subsystem: Silicon Image, Inc. Winic W-680 (Silicon Image 680 based)
>>>         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-
>>>         Latency: 64, Cache Line Size: 4 bytes
>>>         Interrupt: pin A routed to IRQ 9
>>>         Region 0: I/O ports at eff0 [size=8]
>>>         Region 1: I/O ports at efe4 [size=4]
>>>         Region 2: I/O ports at efa8 [size=8]
>>>         Region 3: I/O ports at efe0 [size=4]
>>>         Region 4: I/O ports at ef90 [size=16]
>>>         Region 5: Memory at ffbeec00 (32-bit, non-prefetchable) [size=256]
>>>         [virtual] Expansion ROM at 08000000 [disabled] [size=512K]
>>>         Capabilities: [60] Power Management version 2
>>>                 Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
>>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=2 PME-
>>>         Kernel driver in use: pata_sil680
>>> 00: 95 10 80 06 07 01 90 02 02 00 04 01 01 40 00 00
>>> 10: f1 ef 00 00 e5 ef 00 00 a9 ef 00 00 e1 ef 00 00
>>> 20: 91 ef 00 00 00 ec be ff 00 00 00 00 95 10 80 36
>>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 09 01 00 00
>>> 40: 00 00 00 00 90 14 19 08 00 00 00 00 00 00 00 00
>>> 50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> 60: 01 00 22 06 00 40 00 64 00 00 00 00 00 00 00 00
>>> 70: 08 00 00 00 00 70 57 07 00 00 00 00 00 00 00 00
>>> 80: 03 00 00 00 00 00 00 00 00 00 11 00 d9 7d ff 7b
>>> 90: 00 fe 00 0d ff ff ff 3b 33 00 00 19 ff 00 00 00
>>> a0: 00 62 c1 10 c1 10 8a 32 c1 10 92 43 07 40 09 40
>>> b0: 01 60 8a 32 8a 32 8a 32 92 43 92 43 09 40 09 40
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>
>>> 01:00.0 VGA compatible controller: NVIDIA Corporation G96 [GeForce 9400 GT] (rev a1) (prog-if 00 [VGA controller])
>>>         Subsystem: Jaton Corp Device 0641
>>>         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-
>>>         Latency: 0, Cache Line Size: 32 bytes
>>>         Interrupt: pin A routed to IRQ 11
>>>         Region 0: Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
>>>         Region 1: Memory at e0000000 (64-bit, prefetchable) [size=256M]
>>>         Region 3: Memory at f8000000 (64-bit, non-prefetchable) [size=32M]
>>>         Region 5: I/O ports at fc80 [size=128]
>>>
>>>         [virtual] Expansion ROM at d5d00000 [disabled] [size=512K]
>>>         Capabilities: [60] Power Management version 3
>>>                 Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
>>>                 Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
>>>
>>>         Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
>>>                 Address: 0000000000000000  Data: 0000
>>>         Capabilities: [78] Express (v1) Endpoint, MSI 00
>>>                 DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <512ns, L1 <4us
>>>                         ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
>>>                 DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
>>>                         RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
>>>                         MaxPayload 128 bytes, MaxReadReq 512 bytes
>>>                 DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
>>>                 LnkCap: Port #0, Speed 2.5GT/s, Width x16, ASPM L0s L1, Latency L0 <512ns, L1 <1us
>>>                         ClockPM- Surprise- LLActRep- BwNot-
>>>                 LnkCtl: ASPM Disabled; RCB 128 bytes Disabled- Retrain- CommClk-
>>>                         ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
>>>                 LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
>>>
>>>         Capabilities: [b4] Vendor Specific Information: Len=14 <?>
>>>         Kernel driver in use: nouveau
>>> 00: de 10 41 06 07 01 10 00 a1 00 00 03 08 00 00 00
>>> 10: 00 00 00 fb 0c 00 00 e0 00 00 00 00 04 00 00 f8
>>> 20: 00 00 00 00 81 fc 00 00 00 00 00 00 13 1b 41 06
>>> 30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 01 00 00
>>> 40: 13 1b 41 06 00 00 00 00 00 00 00 00 00 00 00 00
>>> 50: 01 00 00 00 01 00 00 00 ce d6 23 00 00 00 00 00
>>> 60: 01 68 03 00 00 00 00 00 05 78 80 00 00 00 00 00
>>> 70: 00 00 00 00 00 00 00 00 10 b4 01 00 e0 84 64 00
>>> 80: 10 28 00 00 01 3d 00 00 08 00 11 10 00 00 00 00
>>> 90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> b0: 00 00 00 00 09 00 14 01 00 00 00 00 00 00 00 00
>>> c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>> f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>>>
>>>
>>>
>>> On Thu, Jul 3, 2014 at 1:58 AM, Yijing Wang <wangyijing@huawei.com <mailto:wangyijing@huawei.com>> wrote:
>>>
>>>     On 2014/7/3 11:20, Ilia Mirkin wrote:
>>>     > Hello,
>>>     >
>>>     > A user (cc'd) reported that nouveau's enabling of MSI causes the card
>>>     > to not work on his setup [1]. I think the situation is that MSI is
>>>     > just not supported by the underlying motherboard, even though the
>>>     > card, and probably bridge, support it just fine. It's a very old
>>>     > board. The nouveau code does:
>>>
>>>
>>>     What is the kernel version running in your board ?
>>>
>>>     >
>>>     > pmc->use_msi = pci_enable_msi(device->pdev) == 0;
>>>
>>>     Driver call pci_enable_msi() and always return 0 ?
>>>
>>>     >
>>>     > Does it need to do more checking than that before trying to enable MSI
>>>     > on the device? Could it be that the linux pci subsystem is missing on
>>>     > inheriting MSI capabilities somewhere?
>>>
>>>     pci_enable_msi() will checking your device whether it supports MSI.
>>>     Can you provide the detailed lspci information ? eg. lspci -vvvxxx ?
>>>
>>>
>>>     >
>>>     >   -ilia
>>>     >
>>>     > [1]
>>>     >
>>>     > 00:00.0 Host bridge [0600]: Intel Corporation 430FX - 82437FX TSC
>>>     > [Triton I] [8086:122d] (rev 01)
>>>     >         Flags: bus master, medium devsel, latency 64
>>>     >
>>>     > 00:0e.0 PCI bridge [0604]: PLX Technology, Inc. PEX8112 x1 Lane PCI
>>>     > Express-to-PCI Bridge [10b5:8112] (rev aa) (prog-if 00 [Normal
>>>     > decode])
>>>     >         Flags: bus master, 66MHz, medium devsel, latency 66
>>>     >         Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
>>>     >         I/O behind bridge: 0000f000-0000ffff
>>>     >         Memory behind bridge: f5e00000-fbffffff
>>>     >         Prefetchable memory behind bridge: d5d00000-f5dfffff
>>>     >         Capabilities: [40] Power Management version 2
>>>     >         Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
>>>     >         Capabilities: [60] Express PCI/PCI-X to PCI-Express Bridge, MSI 00
>>>     >
>>>     > 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation G96
>>>     > [GeForce 9400 GT] [10de:0641] (rev a1) (prog-if 00 [VGA controller])
>>>     >         Subsystem: Jaton Corp Device [1b13:0641]
>>>     >         Flags: bus master, fast devsel, latency 0, IRQ 11
>>>     >         Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
>>>     >         Memory at e0000000 (64-bit, prefetchable) [size=256M]
>>>     >         Memory at f8000000 (64-bit, non-prefetchable) [size=32M]
>>>     >         I/O ports at fc80 [size=128]
>>>     >         [virtual] Expansion ROM at d5d00000 [disabled] [size=512K]
>>>     >         Capabilities: [60] Power Management version 3
>>>     >         Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
>>>     >         Capabilities: [78] Express Endpoint, MSI 00
>>>     >         Capabilities: [b4] Vendor Specific Information: Len=14 <?>
>>>     >         Kernel driver in use: nouveau
>>>     > --
>>>     > To unsubscribe from this list: send the line "unsubscribe linux-pci" in
>>>     > the body of a message to majordomo@vger.kernel.org <mailto:majordomo@vger.kernel.org>
>>>     > More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>     >
>>>     >
>>>
>>>
>>>     --
>>>     Thanks!
>>>     Yijing
>>>
>>>
>>
>>
>> --
>> Thanks!
>> Yijing
>>
> 
> .
> 


-- 
Thanks!
Yijing


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to check for proper MSI support?
  2014-07-04  3:09         ` Yijing Wang
@ 2014-07-04  3:30           ` Ilia Mirkin
  2014-07-04  3:56             ` Yijing Wang
  0 siblings, 1 reply; 16+ messages in thread
From: Ilia Mirkin @ 2014-07-04  3:30 UTC (permalink / raw)
  To: Yijing Wang; +Cc: Brian Becker, linux-pci, nouveau@lists.freedesktop.org

On Thu, Jul 3, 2014 at 11:09 PM, Yijing Wang <wangyijing@huawei.com> wrote:
> On 2014/7/4 10:43, Ilia Mirkin wrote:
>> On Thu, Jul 3, 2014 at 10:35 PM, Yijing Wang <wangyijing@huawei.com> wrote:
>>> Hi Brian,
>>>    From your 01:00.0 VGA compatible controller PCI config register, it supports 1 MSI vector, so I think this
>>> card has no problem. But you didn't answer what's the pci_enable_msi() return during it enable MSI fail.
>>>
>>> You can check PCI bus whether support MSI like:
>>>
>>> cat /sys/bus/pci/devices/00:0e.0/msi_bus
>>>
>>> Other, do you call pci_enable_device() before pci_enable_msi() ?
>>
>> Yes, the device is enabled. nouveau does generally work for most
>> people :) And it works fine here if MSI is forced off.
>>
>> The problem here is that pci_enable_msi() succeeds, but it probably
>
> It's some strange, pci_enable_msi() succeeds, but there is nothing in MSI address and data register
>
>         Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
>                 Address: 0000000000000000  Data: 0000
> Because the address and data is invalid, so MSI can not work.
>
> Because you said pci_enable_msi() return 0 which indicates success, so I guess the device
> current power state is not D0, because checking code in __write_msi_msi.
>
> void __write_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
> {
>     if (entry->dev->current_state != PCI_D0) {
>         /* Don't touch the hardware now */
>     } else if (entry->msi_attrib.is_msix) {
>         void __iomem *base;
>         base = entry->mask_base +
>             entry->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE;
>
>         writel(msg->address_lo, base + PCI_MSIX_ENTRY_LOWER_ADDR);
>         writel(msg->address_hi, base + PCI_MSIX_ENTRY_UPPER_ADDR);
>         writel(msg->data, base + PCI_MSIX_ENTRY_DATA);
>     ......
>
>> shouldn't. I don't know all the details about MSI, but doesn't the CPU
>> or (L)APIC have to support it? In this case, it's a P200MMX on a 430FX
>> chipset board. Both quite ancient...
>
> MSI in x86 always send to specific interrupt address(0xfeexxxx), most x86 CPU
> should support MSI, but I am not sure, I don't know hardware much.

To put things in perspective, P200MMX was released in early 1997. It
looks like the PCI 2.2 spec, which defines MSI, was released in late
1998. The 430FX chipset only supports PCI 2.0.

>
>>
>> So given that the PCI device itself supports MSI, how do we tell that
>> it shouldn't actually get turned on?
>
> Generally, some message in dmesg like:
> [   17.322311] ahci 0000:00:1f.2: irq 119 for MSI/MSI-X
> [   17.322319] ahci 0000:00:1f.2: irq 120 for MSI/MSI-X
> [   17.322326] ahci 0000:00:1f.2: irq 121 for MSI/MSI-X
> [   17.322333] ahci 0000:00:1f.2: irq 122 for MSI/MSI-X
> [   17.322339] ahci 0000:00:1f.2: irq 123 for MSI/MSI-X
>
> Also you can check /proc/interrupts I think.

I must not have made my question clear. Let me try again:

There is a NVIDIA G96 GPU (which is PCIe only) hanging off of a PCIe
<-> PCI bridge (all on one card), which is plugged into a motherboard
with the 430FX chipset (PCI 2.0 supported).

The GPU PCI device, of course, has full support for MSI. However my
understanding is that MSI won't actually work here. This is confirmed
by the fact that if we let nouveau enable MSI, the device doesn't work
(presumably due to lack of interrupt delivery, although I admit to not
having debugged it that far). How do I, as a nouveau driver developer,
know not to call pci_enable_msi? Or alternatively how can
pci_enable_msi be taught not to succeed in this case?

Thanks,

  -ilia

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to check for proper MSI support?
  2014-07-04  3:30           ` Ilia Mirkin
@ 2014-07-04  3:56             ` Yijing Wang
  2014-07-04  4:32               ` Ilia Mirkin
  0 siblings, 1 reply; 16+ messages in thread
From: Yijing Wang @ 2014-07-04  3:56 UTC (permalink / raw)
  To: Ilia Mirkin; +Cc: Brian Becker, linux-pci, nouveau@lists.freedesktop.org

On 2014/7/4 11:30, Ilia Mirkin wrote:
> On Thu, Jul 3, 2014 at 11:09 PM, Yijing Wang <wangyijing@huawei.com> wrote:
>> On 2014/7/4 10:43, Ilia Mirkin wrote:
>>> On Thu, Jul 3, 2014 at 10:35 PM, Yijing Wang <wangyijing@huawei.com> wrote:
>>>> Hi Brian,
>>>>    From your 01:00.0 VGA compatible controller PCI config register, it supports 1 MSI vector, so I think this
>>>> card has no problem. But you didn't answer what's the pci_enable_msi() return during it enable MSI fail.
>>>>
>>>> You can check PCI bus whether support MSI like:
>>>>
>>>> cat /sys/bus/pci/devices/00:0e.0/msi_bus
>>>>
>>>> Other, do you call pci_enable_device() before pci_enable_msi() ?
>>>
>>> Yes, the device is enabled. nouveau does generally work for most
>>> people :) And it works fine here if MSI is forced off.
>>>
>>> The problem here is that pci_enable_msi() succeeds, but it probably
>>
>> It's some strange, pci_enable_msi() succeeds, but there is nothing in MSI address and data register
>>
>>         Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
>>                 Address: 0000000000000000  Data: 0000
>> Because the address and data is invalid, so MSI can not work.
>>
>> Because you said pci_enable_msi() return 0 which indicates success, so I guess the device
>> current power state is not D0, because checking code in __write_msi_msi.
>>
>> void __write_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
>> {
>>     if (entry->dev->current_state != PCI_D0) {
>>         /* Don't touch the hardware now */
>>     } else if (entry->msi_attrib.is_msix) {
>>         void __iomem *base;
>>         base = entry->mask_base +
>>             entry->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE;
>>
>>         writel(msg->address_lo, base + PCI_MSIX_ENTRY_LOWER_ADDR);
>>         writel(msg->address_hi, base + PCI_MSIX_ENTRY_UPPER_ADDR);
>>         writel(msg->data, base + PCI_MSIX_ENTRY_DATA);
>>     ......
>>
>>> shouldn't. I don't know all the details about MSI, but doesn't the CPU
>>> or (L)APIC have to support it? In this case, it's a P200MMX on a 430FX
>>> chipset board. Both quite ancient...
>>
>> MSI in x86 always send to specific interrupt address(0xfeexxxx), most x86 CPU
>> should support MSI, but I am not sure, I don't know hardware much.
> 
> To put things in perspective, P200MMX was released in early 1997. It
> looks like the PCI 2.2 spec, which defines MSI, was released in late
> 1998. The 430FX chipset only supports PCI 2.0.

Maybe you are right, the chipset can not support MSI...

But why after your call pci_enable_msi(), the MSI address and data register is nothing initialized.


> 
>>
>>>
>>> So given that the PCI device itself supports MSI, how do we tell that
>>> it shouldn't actually get turned on?
>>
>> Generally, some message in dmesg like:
>> [   17.322311] ahci 0000:00:1f.2: irq 119 for MSI/MSI-X
>> [   17.322319] ahci 0000:00:1f.2: irq 120 for MSI/MSI-X
>> [   17.322326] ahci 0000:00:1f.2: irq 121 for MSI/MSI-X
>> [   17.322333] ahci 0000:00:1f.2: irq 122 for MSI/MSI-X
>> [   17.322339] ahci 0000:00:1f.2: irq 123 for MSI/MSI-X
>>
>> Also you can check /proc/interrupts I think.
> 
> I must not have made my question clear. Let me try again:
> 
> There is a NVIDIA G96 GPU (which is PCIe only) hanging off of a PCIe
> <-> PCI bridge (all on one card), which is plugged into a motherboard
> with the 430FX chipset (PCI 2.0 supported).
> 
> The GPU PCI device, of course, has full support for MSI. However my
> understanding is that MSI won't actually work here. This is confirmed
> by the fact that if we let nouveau enable MSI, the device doesn't work
> (presumably due to lack of interrupt delivery, although I admit to not
> having debugged it that far). How do I, as a nouveau driver developer,
> know not to call pci_enable_msi? Or alternatively how can
> pci_enable_msi be taught not to succeed in this case?

You can set bus_flags or global pci_msi_enable flag by add quirk function.
You can refer to examples in drivers/pci/quirk.c

Linux support some broken chipsets or devices to disable msi during device initialization by add quirk.

> 
> Thanks,
> 
>   -ilia
> 
> .
> 


-- 
Thanks!
Yijing


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to check for proper MSI support?
  2014-07-04  3:56             ` Yijing Wang
@ 2014-07-04  4:32               ` Ilia Mirkin
  2014-07-04  5:59                 ` Yijing Wang
  2014-07-05 22:21                 ` Bjorn Helgaas
  0 siblings, 2 replies; 16+ messages in thread
From: Ilia Mirkin @ 2014-07-04  4:32 UTC (permalink / raw)
  To: Yijing Wang, Bjorn Helgaas
  Cc: Brian Becker, linux-pci, nouveau@lists.freedesktop.org

On Thu, Jul 3, 2014 at 11:56 PM, Yijing Wang <wangyijing@huawei.com> wrote:
> On 2014/7/4 11:30, Ilia Mirkin wrote:
>> On Thu, Jul 3, 2014 at 11:09 PM, Yijing Wang <wangyijing@huawei.com> wrote:
>>> On 2014/7/4 10:43, Ilia Mirkin wrote:
>>>> On Thu, Jul 3, 2014 at 10:35 PM, Yijing Wang <wangyijing@huawei.com> wrote:
>>>>> Hi Brian,
>>>>>    From your 01:00.0 VGA compatible controller PCI config register, it supports 1 MSI vector, so I think this
>>>>> card has no problem. But you didn't answer what's the pci_enable_msi() return during it enable MSI fail.
>>>>>
>>>>> You can check PCI bus whether support MSI like:
>>>>>
>>>>> cat /sys/bus/pci/devices/00:0e.0/msi_bus
>>>>>
>>>>> Other, do you call pci_enable_device() before pci_enable_msi() ?
>>>>
>>>> Yes, the device is enabled. nouveau does generally work for most
>>>> people :) And it works fine here if MSI is forced off.
>>>>
>>>> The problem here is that pci_enable_msi() succeeds, but it probably
>>>
>>> It's some strange, pci_enable_msi() succeeds, but there is nothing in MSI address and data register
>>>
>>>         Capabilities: [68] MSI: Enable- Count=1/1 Maskable- 64bit+
>>>                 Address: 0000000000000000  Data: 0000
>>> Because the address and data is invalid, so MSI can not work.
>>>
>>> Because you said pci_enable_msi() return 0 which indicates success, so I guess the device
>>> current power state is not D0, because checking code in __write_msi_msi.
>>>
>>> void __write_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
>>> {
>>>     if (entry->dev->current_state != PCI_D0) {
>>>         /* Don't touch the hardware now */
>>>     } else if (entry->msi_attrib.is_msix) {
>>>         void __iomem *base;
>>>         base = entry->mask_base +
>>>             entry->msi_attrib.entry_nr * PCI_MSIX_ENTRY_SIZE;
>>>
>>>         writel(msg->address_lo, base + PCI_MSIX_ENTRY_LOWER_ADDR);
>>>         writel(msg->address_hi, base + PCI_MSIX_ENTRY_UPPER_ADDR);
>>>         writel(msg->data, base + PCI_MSIX_ENTRY_DATA);
>>>     ......
>>>
>>>> shouldn't. I don't know all the details about MSI, but doesn't the CPU
>>>> or (L)APIC have to support it? In this case, it's a P200MMX on a 430FX
>>>> chipset board. Both quite ancient...
>>>
>>> MSI in x86 always send to specific interrupt address(0xfeexxxx), most x86 CPU
>>> should support MSI, but I am not sure, I don't know hardware much.
>>
>> To put things in perspective, P200MMX was released in early 1997. It
>> looks like the PCI 2.2 spec, which defines MSI, was released in late
>> 1998. The 430FX chipset only supports PCI 2.0.
>
> Maybe you are right, the chipset can not support MSI...
>
> But why after your call pci_enable_msi(), the MSI address and data register is nothing initialized.

The lspci output you saw was not with pci_enable_msi having been run
-- it was in the working configuration, where nouveau is told not to
enable MSI.

>
>
>>
>>>
>>>>
>>>> So given that the PCI device itself supports MSI, how do we tell that
>>>> it shouldn't actually get turned on?
>>>
>>> Generally, some message in dmesg like:
>>> [   17.322311] ahci 0000:00:1f.2: irq 119 for MSI/MSI-X
>>> [   17.322319] ahci 0000:00:1f.2: irq 120 for MSI/MSI-X
>>> [   17.322326] ahci 0000:00:1f.2: irq 121 for MSI/MSI-X
>>> [   17.322333] ahci 0000:00:1f.2: irq 122 for MSI/MSI-X
>>> [   17.322339] ahci 0000:00:1f.2: irq 123 for MSI/MSI-X
>>>
>>> Also you can check /proc/interrupts I think.
>>
>> I must not have made my question clear. Let me try again:
>>
>> There is a NVIDIA G96 GPU (which is PCIe only) hanging off of a PCIe
>> <-> PCI bridge (all on one card), which is plugged into a motherboard
>> with the 430FX chipset (PCI 2.0 supported).
>>
>> The GPU PCI device, of course, has full support for MSI. However my
>> understanding is that MSI won't actually work here. This is confirmed
>> by the fact that if we let nouveau enable MSI, the device doesn't work
>> (presumably due to lack of interrupt delivery, although I admit to not
>> having debugged it that far). How do I, as a nouveau driver developer,
>> know not to call pci_enable_msi? Or alternatively how can
>> pci_enable_msi be taught not to succeed in this case?
>
> You can set bus_flags or global pci_msi_enable flag by add quirk function.
> You can refer to examples in drivers/pci/quirk.c
>
> Linux support some broken chipsets or devices to disable msi during device initialization by add quirk.

So let me get this straight -- you're suggesting I add a quirk for
every PCI chipset that doesn't support MSI? There are probably
hundreds of these... anything made before 1999 or so, and probably a
bunch since then too. There _has_ to be a way to do this generically.
Is the PCI spec version anywhere in the root hub?

Perhaps we can check if every bridge on the way to the CPU has the MSI
capability (including the root hub)? (And naturally _that_ won't
work... on my sandybridge laptop, the host bridge doesn't have the MSI
cap but the system most definitely supports MSI.)

Adding Bjorn... perhaps you know? Some of the info has been stripped
out by now, you can see the full lspci -vvvxxx at
http://marc.info/?l=linux-pci&m=140443441730503&w=2

  -ilia

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to check for proper MSI support?
  2014-07-04  4:32               ` Ilia Mirkin
@ 2014-07-04  5:59                 ` Yijing Wang
  2014-07-04  6:26                   ` Brian Becker
  2014-07-05 22:21                 ` Bjorn Helgaas
  1 sibling, 1 reply; 16+ messages in thread
From: Yijing Wang @ 2014-07-04  5:59 UTC (permalink / raw)
  To: Ilia Mirkin, Bjorn Helgaas
  Cc: Brian Becker, linux-pci, nouveau@lists.freedesktop.org

>>> There is a NVIDIA G96 GPU (which is PCIe only) hanging off of a PCIe
>>> <-> PCI bridge (all on one card), which is plugged into a motherboard
>>> with the 430FX chipset (PCI 2.0 supported).
>>>
>>> The GPU PCI device, of course, has full support for MSI. However my
>>> understanding is that MSI won't actually work here. This is confirmed
>>> by the fact that if we let nouveau enable MSI, the device doesn't work
>>> (presumably due to lack of interrupt delivery, although I admit to not
>>> having debugged it that far). How do I, as a nouveau driver developer,
>>> know not to call pci_enable_msi? Or alternatively how can
>>> pci_enable_msi be taught not to succeed in this case?
>>
>> You can set bus_flags or global pci_msi_enable flag by add quirk function.
>> You can refer to examples in drivers/pci/quirk.c
>>
>> Linux support some broken chipsets or devices to disable msi during device initialization by add quirk.
> 
> So let me get this straight -- you're suggesting I add a quirk for
> every PCI chipset that doesn't support MSI? There are probably
> hundreds of these... anything made before 1999 or so, and probably a
> bunch since then too. There _has_ to be a way to do this generically.
> Is the PCI spec version anywhere in the root hub?

There is no register to identify PCI spec version in PCI config space registers.
If your platform boot up with ACPI, you can setting ACPI FADT boot flag to disable MSI,
you can refer to this in ACPI 5.2.9.3 chapter "Fixed ACPI Description Table Boot Architecture Flags"


> 
> Perhaps we can check if every bridge on the way to the CPU has the MSI
> capability (including the root hub)? (And naturally _that_ won't
> work... on my sandybridge laptop, the host bridge doesn't have the MSI
> cap but the system most definitely supports MSI.)
> 
> Adding Bjorn... perhaps you know? Some of the info has been stripped
> out by now, you can see the full lspci -vvvxxx at
> http://marc.info/?l=linux-pci&m=140443441730503&w=2
> 
>   -ilia
> 
> .
> 


-- 
Thanks!
Yijing


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to check for proper MSI support?
  2014-07-04  5:59                 ` Yijing Wang
@ 2014-07-04  6:26                   ` Brian Becker
  2014-07-04  7:01                     ` Yijing Wang
  0 siblings, 1 reply; 16+ messages in thread
From: Brian Becker @ 2014-07-04  6:26 UTC (permalink / raw)
  To: Yijing Wang
  Cc: Ilia Mirkin, Bjorn Helgaas, linux-pci,
	nouveau@lists.freedesktop.org

I am booting a kernel with CONFIG_ACPI=n on a platform which does not
support ACPI.

-Brian

On Fri, Jul 4, 2014 at 1:59 AM, Yijing Wang <wangyijing@huawei.com> wrote:
>>>> There is a NVIDIA G96 GPU (which is PCIe only) hanging off of a PCIe
>>>> <-> PCI bridge (all on one card), which is plugged into a motherboard
>>>> with the 430FX chipset (PCI 2.0 supported).
>>>>
>>>> The GPU PCI device, of course, has full support for MSI. However my
>>>> understanding is that MSI won't actually work here. This is confirmed
>>>> by the fact that if we let nouveau enable MSI, the device doesn't work
>>>> (presumably due to lack of interrupt delivery, although I admit to not
>>>> having debugged it that far). How do I, as a nouveau driver developer,
>>>> know not to call pci_enable_msi? Or alternatively how can
>>>> pci_enable_msi be taught not to succeed in this case?
>>>
>>> You can set bus_flags or global pci_msi_enable flag by add quirk function.
>>> You can refer to examples in drivers/pci/quirk.c
>>>
>>> Linux support some broken chipsets or devices to disable msi during device initialization by add quirk.
>>
>> So let me get this straight -- you're suggesting I add a quirk for
>> every PCI chipset that doesn't support MSI? There are probably
>> hundreds of these... anything made before 1999 or so, and probably a
>> bunch since then too. There _has_ to be a way to do this generically.
>> Is the PCI spec version anywhere in the root hub?
>
> There is no register to identify PCI spec version in PCI config space registers.
> If your platform boot up with ACPI, you can setting ACPI FADT boot flag to disable MSI,
> you can refer to this in ACPI 5.2.9.3 chapter "Fixed ACPI Description Table Boot Architecture Flags"
>
>
>>
>> Perhaps we can check if every bridge on the way to the CPU has the MSI
>> capability (including the root hub)? (And naturally _that_ won't
>> work... on my sandybridge laptop, the host bridge doesn't have the MSI
>> cap but the system most definitely supports MSI.)
>>
>> Adding Bjorn... perhaps you know? Some of the info has been stripped
>> out by now, you can see the full lspci -vvvxxx at
>> http://marc.info/?l=linux-pci&m=140443441730503&w=2
>>
>>   -ilia
>>
>> .
>>
>
>
> --
> Thanks!
> Yijing
>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to check for proper MSI support?
  2014-07-04  6:26                   ` Brian Becker
@ 2014-07-04  7:01                     ` Yijing Wang
  0 siblings, 0 replies; 16+ messages in thread
From: Yijing Wang @ 2014-07-04  7:01 UTC (permalink / raw)
  To: Brian Becker
  Cc: Ilia Mirkin, Bjorn Helgaas, linux-pci,
	nouveau@lists.freedesktop.org

On 2014/7/4 14:26, Brian Becker wrote:
> I am booting a kernel with CONFIG_ACPI=n on a platform which does not
> support ACPI.

Hmmm, so my suggestion is
1. Add quirk to detect 430FX chipset, if detected, disable MSI in this platform.
or

2. Append boot argument pci=nomsi in OS command line when the OS running on your old platform.

Maybe other guys has some advices. :)




> 
> On Fri, Jul 4, 2014 at 1:59 AM, Yijing Wang <wangyijing@huawei.com> wrote:
>>>>> There is a NVIDIA G96 GPU (which is PCIe only) hanging off of a PCIe
>>>>> <-> PCI bridge (all on one card), which is plugged into a motherboard
>>>>> with the 430FX chipset (PCI 2.0 supported).
>>>>>
>>>>> The GPU PCI device, of course, has full support for MSI. However my
>>>>> understanding is that MSI won't actually work here. This is confirmed
>>>>> by the fact that if we let nouveau enable MSI, the device doesn't work
>>>>> (presumably due to lack of interrupt delivery, although I admit to not
>>>>> having debugged it that far). How do I, as a nouveau driver developer,
>>>>> know not to call pci_enable_msi? Or alternatively how can
>>>>> pci_enable_msi be taught not to succeed in this case?
>>>>
>>>> You can set bus_flags or global pci_msi_enable flag by add quirk function.
>>>> You can refer to examples in drivers/pci/quirk.c
>>>>
>>>> Linux support some broken chipsets or devices to disable msi during device initialization by add quirk.
>>>
>>> So let me get this straight -- you're suggesting I add a quirk for
>>> every PCI chipset that doesn't support MSI? There are probably
>>> hundreds of these... anything made before 1999 or so, and probably a
>>> bunch since then too. There _has_ to be a way to do this generically.
>>> Is the PCI spec version anywhere in the root hub?
>>
>> There is no register to identify PCI spec version in PCI config space registers.
>> If your platform boot up with ACPI, you can setting ACPI FADT boot flag to disable MSI,
>> you can refer to this in ACPI 5.2.9.3 chapter "Fixed ACPI Description Table Boot Architecture Flags"
>>
>>
>>>
>>> Perhaps we can check if every bridge on the way to the CPU has the MSI
>>> capability (including the root hub)? (And naturally _that_ won't
>>> work... on my sandybridge laptop, the host bridge doesn't have the MSI
>>> cap but the system most definitely supports MSI.)
>>>
>>> Adding Bjorn... perhaps you know? Some of the info has been stripped
>>> out by now, you can see the full lspci -vvvxxx at
>>> http://marc.info/?l=linux-pci&m=140443441730503&w=2
>>>
>>>   -ilia
>>>
>>> .
>>>
>>
>>
>> --
>> Thanks!
>> Yijing
>>
> 
> .
> 


-- 
Thanks!
Yijing


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to check for proper MSI support?
  2014-07-04  4:32               ` Ilia Mirkin
  2014-07-04  5:59                 ` Yijing Wang
@ 2014-07-05 22:21                 ` Bjorn Helgaas
  2014-07-05 23:04                   ` Brian Becker
  1 sibling, 1 reply; 16+ messages in thread
From: Bjorn Helgaas @ 2014-07-05 22:21 UTC (permalink / raw)
  To: Ilia Mirkin
  Cc: Yijing Wang, Brian Becker, linux-pci@vger.kernel.org,
	nouveau@lists.freedesktop.org

On Thu, Jul 3, 2014 at 10:32 PM, Ilia Mirkin <imirkin@alum.mit.edu> wrote:
> So let me get this straight -- you're suggesting I add a quirk for
> every PCI chipset that doesn't support MSI? There are probably
> hundreds of these... anything made before 1999 or so, and probably a
> bunch since then too. There _has_ to be a way to do this generically.
> Is the PCI spec version anywhere in the root hub?
>
> Perhaps we can check if every bridge on the way to the CPU has the MSI
> capability (including the root hub)? (And naturally _that_ won't
> work... on my sandybridge laptop, the host bridge doesn't have the MSI
> cap but the system most definitely supports MSI.)
>
> Adding Bjorn... perhaps you know? Some of the info has been stripped
> out by now, you can see the full lspci -vvvxxx at
> http://marc.info/?l=linux-pci&m=140443441730503&w=2

Huh, this stinks.  We don't really have a good way of figuring out
whether the system chipset supports MSI.  The ACPI FADT "MSI Not
Supported" bit (ACPI_FADT_NO_MSI) was added to the ACPI v3.0b spec in
October 2006, so that won't help the systems that predate that or
don't have ACPI.

We have quirks for some Serverworks, ATI, and VIA chipsets that
basically do the same as booting with "pci=nomsi".  But as you say,
it's unreasonable to add quirks for all old systems.

Brian, can you open a report at http://bugzilla.kernel.org and attach
a complete dmesg log, /proc/cpuinfo contents, and "lspci -vvv" output?

If I understand correctly, you have a P200MMX with a 430FX chipset.
I'm not a hardware guy, but sounds like that might be a 200MHz Pentium
with MMX (P54CS), which does have an integrated LAPIC, according to
wikipedia.

>From the PCI host bridge's perspective, an incoming MSI just looks
like a normal DMA write.  As long as that write reaches the CPU LAPIC,
it should work fine.  There's not really any specific MSI support
required, except to route the incoming write to the CPU LAPIC.  So
it's possible that a bridge designed before MSI was added to the PCI
spec might be able to support MSI.

But I don't know how much value there is in MSI on such old systems.
Maybe we could default to disabling MSI on BIOS dates before 1998 or
something.

Bjorn

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: How to check for proper MSI support?
  2014-07-05 22:21                 ` Bjorn Helgaas
@ 2014-07-05 23:04                   ` Brian Becker
  0 siblings, 0 replies; 16+ messages in thread
From: Brian Becker @ 2014-07-05 23:04 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Ilia Mirkin, Yijing Wang, linux-pci@vger.kernel.org,
	nouveau@lists.freedesktop.org

Bjorn,

I went ahead and sent a report to
https://bugzilla.kernel.org/show_bug.cgi?id=79531. It does not appear
that my system supports APIC/LAPIC, from the dmesg logs which claim
that APIC is hardware disabled or not available. Perhaps the BIOS is
allowed to disable it, or is required to enable it, and the BIOS does
indeed predate the installed CPU.

Thanks,
Brian Becker

On Sat, Jul 5, 2014 at 6:21 PM, Bjorn Helgaas <bhelgaas@google.com> wrote:
> On Thu, Jul 3, 2014 at 10:32 PM, Ilia Mirkin <imirkin@alum.mit.edu> wrote:
>> So let me get this straight -- you're suggesting I add a quirk for
>> every PCI chipset that doesn't support MSI? There are probably
>> hundreds of these... anything made before 1999 or so, and probably a
>> bunch since then too. There _has_ to be a way to do this generically.
>> Is the PCI spec version anywhere in the root hub?
>>
>> Perhaps we can check if every bridge on the way to the CPU has the MSI
>> capability (including the root hub)? (And naturally _that_ won't
>> work... on my sandybridge laptop, the host bridge doesn't have the MSI
>> cap but the system most definitely supports MSI.)
>>
>> Adding Bjorn... perhaps you know? Some of the info has been stripped
>> out by now, you can see the full lspci -vvvxxx at
>> http://marc.info/?l=linux-pci&m=140443441730503&w=2
>
> Huh, this stinks.  We don't really have a good way of figuring out
> whether the system chipset supports MSI.  The ACPI FADT "MSI Not
> Supported" bit (ACPI_FADT_NO_MSI) was added to the ACPI v3.0b spec in
> October 2006, so that won't help the systems that predate that or
> don't have ACPI.
>
> We have quirks for some Serverworks, ATI, and VIA chipsets that
> basically do the same as booting with "pci=nomsi".  But as you say,
> it's unreasonable to add quirks for all old systems.
>
> Brian, can you open a report at http://bugzilla.kernel.org and attach
> a complete dmesg log, /proc/cpuinfo contents, and "lspci -vvv" output?
>
> If I understand correctly, you have a P200MMX with a 430FX chipset.
> I'm not a hardware guy, but sounds like that might be a 200MHz Pentium
> with MMX (P54CS), which does have an integrated LAPIC, according to
> wikipedia.
>
> From the PCI host bridge's perspective, an incoming MSI just looks
> like a normal DMA write.  As long as that write reaches the CPU LAPIC,
> it should work fine.  There's not really any specific MSI support
> required, except to route the incoming write to the CPU LAPIC.  So
> it's possible that a bridge designed before MSI was added to the PCI
> spec might be able to support MSI.
>
> But I don't know how much value there is in MSI on such old systems.
> Maybe we could default to disabling MSI on BIOS dates before 1998 or
> something.
>
> Bjorn

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2014-07-05 23:04 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-03  3:20 How to check for proper MSI support? Ilia Mirkin
2014-07-03  5:58 ` Yijing Wang
2014-07-04  0:40   ` Brian Becker
     [not found]   ` <CALhae2jRz8hL0bwySAbP7r+vJGOG5aif4GA_Yjp0inGAwz5JEA@mail.gmail.com>
2014-07-04  2:35     ` Yijing Wang
2014-07-04  2:43       ` Ilia Mirkin
2014-07-04  3:09         ` Yijing Wang
2014-07-04  3:30           ` Ilia Mirkin
2014-07-04  3:56             ` Yijing Wang
2014-07-04  4:32               ` Ilia Mirkin
2014-07-04  5:59                 ` Yijing Wang
2014-07-04  6:26                   ` Brian Becker
2014-07-04  7:01                     ` Yijing Wang
2014-07-05 22:21                 ` Bjorn Helgaas
2014-07-05 23:04                   ` Brian Becker
2014-07-04  2:45       ` Brian Becker
2014-07-04  3:13         ` Yijing Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).