Re: [PATCH] PCI: Disable NoSnoop and Relaxed ordering for Intel wireless BE200

"Grumbach, Emmanuel" <[email protected]> Thu, 30 Jul 2026 20:16:33 +0000
Newsgroups dev.linux.lists.sashiko-reviews,org.kernel.vger.linux-pci
Message-ID <[email protected]>
On Thu, 2026-07-30 at 15:08 -0500, Bjorn Helgaas wrote:
> On Thu, Jul 30, 2026 at 06:45:29PM +0000, Grumbach, Emmanuel wrote:
> > On Thu, 2026-07-30 at 12:28 -0500, Bjorn Helgaas wrote:
> > > On Thu, Jul 30, 2026 at 10:21:06AM +0530, Manikanta Maddireddy
> > > wrote:
> > > > On 29/07/26 12:19 pm, Grumbach, Emmanuel wrote:
> > > > > On Tue, 2026-07-28 at 15:18 -0500, Bjorn Helgaas wrote:
> > > > > > On Tue, Jul 28, 2026 at 07:47:04PM +0000, Grumbach,
> > > > > > Emmanuel
> > > > > > wrote:
> > > > > > > On Tue, 2026-07-28 at 14:24 -0500, Bjorn Helgaas wrote:
> > > > > > > > On Tue, Jul 28, 2026 at 06:21:23PM +0000, Grumbach,
> > > > > > > > Emmanuel
> > > > > > > > wrote:
> > > > > > > > > On Tue, 2026-07-28 at 13:03 -0500, Bjorn Helgaas
> > > > > > > > > wrote:
> > > > > > > > > ...
> > > > > > > > 
> > > > > > > > > > AFAICS we still don't know why Tegra264 would set
> > > > > > > > > > NoSnoop and/or RlxdOrd in the MMIO read.
> > > > > > > > > 
> > > > > > > > > Me neither but... I can't comment on that. And de-
> > > > > > > > > facto,
> > > > > > > > > once it does that, the BE200 replies with the NoSnoop
> > > > > > > > > and
> > > > > > > > > RlxOrd clear in the TLP which is then considered as a
> > > > > > > > > malformed TLP.
> > > > > > > > > 
> > > > > > > > > > Unless iwlwifi asked for NoSnoop and/or RlxdOrd to
> > > > > > > > > > be
> > > > > > > > > > set, I think it's a potential problem for drivers
> > > > > > > > > > if
> > > > > > > > > > Tegra264 sets them.
> > > > > > > > > 
> > > > > > > > > I ... don't think we would do that. The driver would
> > > > > > > > > certainly not do that... Regarding the hardware
> > > > > > > > > itself, I
> > > > > > > > > can't comment, but I can check internally.
> > > > > > > > 
> > > > > > > > Forgot to ask, can you collect the output of "sudo
> > > > > > > > lspci
> > > > > > > > -vv", at least for the RP and the BE200?
> > > > > > > > 
> > > > > > > > And maybe the dmesg log when booted with
> > > > > > > > "log_buf_len=16M
> > > > > > > > pci=earlydump" as well, so we can see if attributes
> > > > > > > > were
> > > > > > > > enabled by a bootloader?
> > > > > > > 
> > > > > > > I assume you want all this without the quirk, right?
> > > > > > 
> > > > > > Right.
> > > > > 
> > > > > Attached.
> > > > > Note that we used an out-of-tree driver in those attempts so
> > > > > the
> > > > > kernel is tainted, but this does not impact the issue we're
> > > > > discussing here.
> > > > 
> > > > PCI_EXP_DEVCTL_RELAX_EN and PCI_EXP_DEVCTL_NOSNOOP_EN are set
> > > > by HW
> > > > default value, this is inline with PCIe spec. It says "the
> > > > default
> > > > value of this bit is 1b" in both cases.
> > > 
> > > Huh, you're right.  I was assuming 0b was the default, but indeed
> > > 1b
> > > is the default unless they're hardwired to 0.  And they're both
> > > set
> > > to
> > > 1b on my x86 (AMD) Root Ports as well.  
> > 
> > Not on my Intel Root port:
> > 
> > 00:1d.0 PCI bridge: Intel Corporation Alder Lake PCI Express Root
> > Port 
> > 
> > <Snip>
> > 
> >         Capabilities: [40] Express (v2) Root Port (Slot+),
> > IntMsgNum 0
> >                 DevCap: MaxPayload 256 bytes, PhantFunc 0
> >                         ExtTag- RBE+ TEE-IO-
> >                 DevCtl: CorrErr- NonFatalErr- FatalErr- UnsupReq-
> >                         RlxdOrd- ExtTag- PhantFunc- AuxPwr-
> > NoSnoop-
> >                         MaxPayload 128 bytes, MaxReadReq 128 bytes
> 
> Super interesting.

Every one and his own areas of interest ;)

> 
> I guess Alder Lake isn't one of the RPs affected by
> quirk_relaxedordering_disable()?  I think 87e09cdec4da ("PCI: Disable
> Relaxed Ordering for some Intel processors") added all the existing
> uses of that quirk for Intel RPs, and the commit log only mentions
> Broadwell and Haswell.

Well... that commit is from 2017. Alder lake was shipped in 2021.

> 
> I wonder if the PCI core should disable RO and NoSnoop on Root Ports
> across the board?
> 
> I think this would mainly affect MMIO accesses performed by drivers,
> and I suspect drivers expect those writes to be performed in order,
> e.g., if the driver writes DMA descriptors to the device followed by
> a
> write to a doorbell, those should stay in order.  If the RP has RO
> enabled, those writes may be reordered.

As a device writer I'd say we'd be required to add a memory barrier in
that case, but we use writel usually.
Does that include a write vs write ordering? Hm...

> 
> > > So I would think we'd see this Malformed TLP error on pretty much
> > > every system with BE200 in it.
> > 
> > I guess that BE200 is almost only plugged into Intel systems which
> > is
> > why this bug went unnoticed until now..