From: Mason <slash.tmp@free.fr>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: linux-pci <linux-pci@vger.kernel.org>,
Linux ARM <linux-arm-kernel@lists.infradead.org>,
Will Deacon <will.deacon@arm.com>,
David Daney <david.daney@cavium.com>,
Rob Herring <robh@kernel.org>,
Thierry Reding <treding@nvidia.com>,
Phuong Nguyen <phuong_nguyen@sigmadesigns.com>,
Thibaud Cornic <thibaud_cornic@sigmadesigns.com>
Subject: Re: Using the generic host PCIe driver
Date: Wed, 1 Mar 2017 16:18:51 +0100 [thread overview]
Message-ID: <347d4200-e089-60df-5f60-58d16efc7c4e@free.fr> (raw)
In-Reply-To: <20170227183534.GA12481@bhelgaas-glaptop.roam.corp.google.com>
On 27/02/2017 19:35, Bjorn Helgaas wrote:
> When I said the native drivers provide no real benefit, I meant that
> they do not provide any value-add functionality beyond what a generic
> driver like drivers/acpi/pci_root.c already does.
>
> Obviously there are many different host bridges and they have
> different programming models, so there has to be bridge-specific
> support *somewhere*. The question is whether that's in firmware, in
> Linux, or both. For ACPI systems, it's all in firmware.
>
> Systems with well-behaved hardware, i.e., it supports PCIe and ECAM
> without warts, firmware can initialize the bridge and tell the OS
> about it via DT, and the drivers/pci/pci-host-generic.c driver can do
> everything else.
>
> For systems that aren't so well-behaved, we'll need either a full
> native driver that knows how to program bridge window CSRs, set up
> interrupts, etc., or a simpler native driver that papers over warts
> like ECAM that doesn't work quite according to spec.
>
> It sounds like your system falls into the latter category.
Hello Bjorn,
Having worked around 3 HW bugs, things are starting to look
slightly more "normal". Here is my current boot log:
(I've added a few questions inline.)
[ 0.197669] PCI: CLS 0 bytes, default 64
Is it an error for Cache Line Size to be 0 here?
[ 0.652356] OF: PCI: host bridge /soc/pcie@50000000 ranges:
[ 0.652380] OF: PCI: No bus range found for /soc/pcie@50000000, using [bus 00-ff]
[ 0.652407] OF: PCI: Parsing ranges property...
[ 0.652494] OF: PCI: MEM 0xa0000000..0xa03fffff -> 0xa0000000
[ 0.655744] pci-host-generic 50000000.pcie: ECAM at [mem 0x50000000-0x5fffffff] for [bus 00-ff]
[ 0.656097] pci-host-generic 50000000.pcie: PCI host bridge to bus 0000:00
[ 0.656145] pci_bus 0000:00: root bus resource [bus 00-ff]
[ 0.656168] pci_bus 0000:00: root bus resource [mem 0xa0000000-0xa03fffff]
[ 0.656191] pci_bus 0000:00: scanning bus
[ 0.656257] pci 0000:00:00.0: [1105:8758] type 01 class 0x048000
[ 0.656314] pci 0000:00:00.0: calling tango_pcie_fixup_class+0x0/0x10
[ 0.656358] pci 0000:00:00.0: reg 0x10: [mem 0x00000000-0x00ffffff 64bit]
[ 0.656400] pci 0000:00:00.0: calling pci_fixup_ide_bases+0x0/0x40
[ 0.656451] pci 0000:00:00.0: supports D1 D2
[ 0.656468] pci 0000:00:00.0: PME# supported from D0 D1 D2 D3hot
[ 0.656486] pci 0000:00:00.0: PME# disabled
[ 0.656657] pci_bus 0000:00: fixups for bus
[ 0.656686] PCI: bus0: Fast back to back transfers disabled
[ 0.656707] pci 0000:00:00.0: scanning [bus 00-00] behind bridge, pass 0
[ 0.656725] pci 0000:00:00.0: bridge configuration invalid ([bus 00-00]), reconfiguring
[ 0.656753] pci 0000:00:00.0: scanning [bus 00-00] behind bridge, pass 1
[ 0.656845] pci_bus 0000:01: scanning bus
[ 0.656911] pci 0000:01:00.0: [1912:0014] type 00 class 0x0c0330
[ 0.656968] pci 0000:01:00.0: reg 0x10: [mem 0x00000000-0x00001fff 64bit]
[ 0.657065] pci 0000:01:00.0: calling pci_fixup_ide_bases+0x0/0x40
[ 0.657192] pci 0000:01:00.0: PME# supported from D0 D3hot D3cold
[ 0.657213] pci 0000:01:00.0: PME# disabled
[ 0.657495] pci_bus 0000:01: fixups for bus
[ 0.657521] PCI: bus1: Fast back to back transfers disabled
[ 0.657538] pci_bus 0000:01: bus scan returning with max=01
[ 0.657556] pci_bus 0000:01: busn_res: [bus 01-ff] end is updated to 01
[ 0.657575] pci_bus 0000:00: bus scan returning with max=01
[ 0.657593] pci 0000:00:00.0: fixup irq: got 0
[ 0.657608] pci 0000:00:00.0: assigning IRQ 00
[ 0.657651] pci 0000:01:00.0: fixup irq: got 20
[ 0.657667] pci 0000:01:00.0: assigning IRQ 20
This revision of the controller does not support legacy interrupt mode,
only MSI. I looked at the bindings for MSI:
https://www.kernel.org/doc/Documentation/devicetree/bindings/pci/pci-msi.txt
https://www.kernel.org/doc/Documentation/devicetree/bindings/interrupt-controller/msi.txt
But it is not clear to me if I need to write a specific driver
for the MSI controller, or if there is some kind of generic
support? If the latter, what are the required properties?
A "door-bell" address? Anything else?
[ 0.657711] pci 0000:00:00.0: BAR 0: no space for [mem size 0x01000000 64bit]
[ 0.657731] pci 0000:00:00.0: BAR 0: failed to assign [mem size 0x01000000 64bit]
[ 0.657755] pci 0000:00:00.0: BAR 8: assigned [mem 0xa0000000-0xa00fffff]
[ 0.657776] pci 0000:01:00.0: BAR 0: assigned [mem 0xa0000000-0xa0001fff 64bit]
These 4 statements sound fishy.
[ 0.657813] pci 0000:00:00.0: PCI bridge to [bus 01]
[ 0.657831] pci 0000:00:00.0: bridge window [mem 0xa0000000-0xa00fffff]
[ 0.657904] pcieport 0000:00:00.0: enabling device (0140 -> 0142)
[ 0.657931] pcieport 0000:00:00.0: enabling bus mastering
[ 0.658058] pci 0000:01:00.0: calling quirk_usb_early_handoff+0x0/0x790
[ 0.658088] pci 0000:01:00.0: enabling device (0140 -> 0142)
[ 0.663235] pci 0000:01:00.0: xHCI HW not ready after 5 sec (HC bug?) status = 0x1e7fffd0
[ 0.679283] pci 0000:01:00.0: xHCI HW did not halt within 16000 usec status = 0x1e7fffd0
The PCIe card is a USB3 adapter. I suppose it's not working
because MSI is not properly configured.
# /usr/sbin/lspci -v
00:00.0 PCI bridge: Sigma Designs, Inc. Device 8758 (rev 01) (prog-if 00 [Normal decode])
Flags: bus master, fast devsel, latency 0
Memory at <unassigned> (64-bit, non-prefetchable)
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
I/O behind bridge: 00000000-00000fff
Memory behind bridge: a0000000-a00fffff
Prefetchable memory behind bridge: 00000000-000fffff
Capabilities: [50] MSI: Enable- Count=1/4 Maskable- 64bit+
Capabilities: [78] Power Management version 3
Capabilities: [80] Express Root Port (Slot-), MSI 03
Capabilities: [100] Virtual Channel
Capabilities: [800] Advanced Error Reporting
Kernel driver in use: pcieport
01:00.0 USB controller: Renesas Technology Corp. uPD720201 USB 3.0 Host Controller (rev 03) (prog-if 30 [XHCI])
Flags: fast devsel, IRQ 20
Memory at a0000000 (64-bit, non-prefetchable) [size=8K]
Capabilities: [50] Power Management version 3
Capabilities: [70] MSI: Enable- Count=1/8 Maskable- 64bit+
Capabilities: [90] MSI-X: Enable- Count=8 Masked-
Capabilities: [a0] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [150] Latency Tolerance Reporting
What does "Capabilities: [50] MSI: Enable- Count=1/4 Maskable- 64bit+" mean?
http://man7.org/linux/man-pages/man8/lspci.8.html
For reference only, below is the extra verbose output.
# /usr/sbin/lspci -vvv
00:00.0 PCI bridge: Sigma Designs, Inc. Device 8758 (rev 01) (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=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Region 0: Memory at <unassigned> (64-bit, non-prefetchable)
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
I/O behind bridge: 00000000-00000fff
Memory behind bridge: a0000000-a00fffff
Prefetchable memory behind bridge: 00000000-000fffff
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: [50] MSI: Enable- Count=1/4 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [78] 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=3 PME-
Capabilities: [80] Express (v2) Root Port (Slot-), MSI 03
DevCap: MaxPayload 256 bytes, PhantFunc 0
ExtTag- RBE+
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 #1, Speed 5GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <2us, L1 <4us
ClockPM- Surprise- LLActRep- BwNot+
LnkCtl: ASPM Disabled; RCB 128 bytes Disabled- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 5GT/s, Width x1, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
RootCtl: ErrCorrectable- ErrNon-Fatal- ErrFatal- PMEIntEna- CRSVisible-
RootCap: CRSVisible-
RootSta: PME ReqID 0000, PMEStatus- PMEPending-
DevCap2: Completion Timeout: Range B, TimeoutDis-, LTR-, OBFF Not Supported ARIFwd-
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled ARIFwd-
LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete-, EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-
Capabilities: [100 v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntryBits=1
Arb: Fixed- WRR32- WRR64- WRR128-
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
Status: NegoPending- InProgress-
Capabilities: [800 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn-
Kernel driver in use: pcieport
01:00.0 USB controller: Renesas Technology Corp. uPD720201 USB 3.0 Host Controller (rev 03) (prog-if 30 [XHCI])
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr+ Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 20
Region 0: Memory at a0000000 (64-bit, non-prefetchable) [size=8K]
Capabilities: [50] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [70] MSI: Enable- Count=1/8 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [90] MSI-X: Enable- Count=8 Masked-
Vector table: BAR=0 offset=00001000
PBA: BAR=0 offset=00001080
Capabilities: [a0] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
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 5GT/s, Width x1, ASPM L0s L1, Exit Latency L0s <4us, L1 unlimited
ClockPM+ Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Not Supported, TimeoutDis+, LTR+, OBFF Not Supported
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete-, EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 00, GenCap- CGenEn- ChkCap- ChkEn-
Capabilities: [150 v1] Latency Tolerance Reporting
Max snoop latency: 0ns
Max no snoop latency: 0ns
Regards.
next prev parent reply other threads:[~2017-03-01 15:18 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-27 16:14 Using the generic host PCIe driver Mason
2017-02-27 16:44 ` Bjorn Helgaas
2017-02-27 17:02 ` Mason
2017-02-27 18:35 ` Bjorn Helgaas
2017-03-01 15:18 ` Mason [this message]
2017-03-01 16:18 ` Bjorn Helgaas
2017-03-01 16:36 ` Marc Zyngier
2017-03-03 11:26 ` Mason
2017-03-03 16:41 ` Marc Zyngier
2017-03-03 16:53 ` Mason
2017-03-03 17:08 ` Marc Zyngier
2017-03-01 18:05 ` Mason
2017-03-01 21:57 ` Bjorn Helgaas
2017-03-03 12:44 ` Mason
2017-03-03 15:46 ` Bjorn Helgaas
2017-03-03 17:18 ` Mason
2017-03-03 20:04 ` Bjorn Helgaas
2017-03-03 23:23 ` Mason
2017-03-04 9:35 ` Ard Biesheuvel
2017-03-04 10:56 ` Mason
2017-03-04 11:45 ` Ard Biesheuvel
2017-03-04 13:07 ` Mason
2017-03-04 13:49 ` Ard Biesheuvel
2017-03-04 14:33 ` Mason
2017-03-04 10:50 ` Marc Zyngier
2017-03-06 16:12 ` Mason
2017-03-06 16:57 ` Mason
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=347d4200-e089-60df-5f60-58d16efc7c4e@free.fr \
--to=slash.tmp@free.fr \
--cc=david.daney@cavium.com \
--cc=helgaas@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-pci@vger.kernel.org \
--cc=phuong_nguyen@sigmadesigns.com \
--cc=robh@kernel.org \
--cc=thibaud_cornic@sigmadesigns.com \
--cc=treding@nvidia.com \
--cc=will.deacon@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).