From: Bjorn Helgaas <helgaas@kernel.org>
To: linux-pci@vger.kernel.org
Cc: Jim Quinlan <james.quinlan@broadcom.com>,
Florian Fainelli <florian.fainelli@broadcom.com>,
Hans Zhang <18255117159@163.com>,
Niklas Cassel <cassel@kernel.org>,
bcm-kernel-feedback-list@broadcom.com,
linux-kernel@vger.kernel.org, Bjorn Helgaas <bhelgaas@google.com>
Subject: Re: [PATCH v1] PCI: Remove MPS/MRRS Kconfig settings
Date: Tue, 21 Apr 2026 13:06:09 -0500 [thread overview]
Message-ID: <20260421180609.GA313824@bhelgaas> (raw)
In-Reply-To: <20260403221144.GA429611@bhelgaas>
On Fri, Apr 03, 2026 at 05:11:44PM -0500, Bjorn Helgaas wrote:
> On Thu, Mar 26, 2026 at 05:13:11PM -0500, Bjorn Helgaas wrote:
> > This reverts b0e85c3c8554 ("PCI: Add Kconfig options for MPS/MRRS
> > strategy"), which allowed build-time selection of the "off", "default",
> > "safe", "performance", or "peer2peer" strategies for MPS and MRRS
> > configuration. These strategies can be selected at boot-time using the
> > "pci=pcie_bus_tune_*" kernel parameters.
> >
> > Per the discussion mentioned below, these Kconfig options were added to
> > work around a hardware defect in a WiFi device used in a cable modem. The
> > defect occurred only when the device was configured with MPS=128, and
> > Kconfig was a way to avoid that setting. It was easier for the modem
> > vendor to use Kconfig and update the kernel image than to change the kernel
> > parameters.
> >
> > Neither Kconfig nor kernel parameters are a complete solution because the
> > WiFi device may be used in other systems where it may be configured with
> > MPS=128 and be susceptible to the defect.
> >
> > Remove the Kconfig settings to simplify the MPS code. If we can identify
> > the WiFi device in question, we may be able to make a generic quirk to
> > avoid the problem on all system.
> >
> > This is not a fix and should not be backported to previous kernels.
> >
> > Link: https://lore.kernel.org/all/CA+-6iNzd0RJO0L021qz8CKrSviSst6QehY-QtJxz_-EVY0Hj0Q@mail.gmail.com
> > Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
>
> I applied this on pci/misc for v7.1.
I decided not to apply this for v7.1 because there wasn't much time
left in the cycle, but I applied it again on pci/enumeration for v7.2.
> > ---
> > drivers/pci/Kconfig | 62 ---------------------------------------------
> > drivers/pci/pci.c | 10 --------
> > 2 files changed, 72 deletions(-)
> >
> > diff --git a/drivers/pci/Kconfig b/drivers/pci/Kconfig
> > index e3f848ffb52a..f1330d219763 100644
> > --- a/drivers/pci/Kconfig
> > +++ b/drivers/pci/Kconfig
> > @@ -252,68 +252,6 @@ config PCI_DYNAMIC_OF_NODES
> > Once this option is selected, the device tree nodes will be generated
> > for all PCI bridges.
> >
> > -choice
> > - prompt "PCI Express hierarchy optimization setting"
> > - default PCIE_BUS_DEFAULT
> > - depends on PCI && EXPERT
> > - help
> > - MPS (Max Payload Size) and MRRS (Max Read Request Size) are PCIe
> > - device parameters that affect performance and the ability to
> > - support hotplug and peer-to-peer DMA.
> > -
> > - The following choices set the MPS and MRRS optimization strategy
> > - at compile-time. The choices are the same as those offered for
> > - the kernel command-line parameter 'pci', i.e.,
> > - 'pci=pcie_bus_tune_off', 'pci=pcie_bus_safe',
> > - 'pci=pcie_bus_perf', and 'pci=pcie_bus_peer2peer'.
> > -
> > - This is a compile-time setting and can be overridden by the above
> > - command-line parameters. If unsure, choose PCIE_BUS_DEFAULT.
> > -
> > -config PCIE_BUS_TUNE_OFF
> > - bool "Tune Off"
> > - depends on PCI
> > - help
> > - Use the BIOS defaults; don't touch MPS at all. This is the same
> > - as booting with 'pci=pcie_bus_tune_off'.
> > -
> > -config PCIE_BUS_DEFAULT
> > - bool "Default"
> > - depends on PCI
> > - help
> > - Default choice; ensure that the MPS matches upstream bridge.
> > -
> > -config PCIE_BUS_SAFE
> > - bool "Safe"
> > - depends on PCI
> > - help
> > - Use largest MPS that boot-time devices support. If you have a
> > - closed system with no possibility of adding new devices, this
> > - will use the largest MPS that's supported by all devices. This
> > - is the same as booting with 'pci=pcie_bus_safe'.
> > -
> > -config PCIE_BUS_PERFORMANCE
> > - bool "Performance"
> > - depends on PCI
> > - help
> > - Use MPS and MRRS for best performance. Ensure that a given
> > - device's MPS is no larger than its parent MPS, which allows us to
> > - keep all switches/bridges to the max MPS supported by their
> > - parent. This is the same as booting with 'pci=pcie_bus_perf'.
> > -
> > -config PCIE_BUS_PEER2PEER
> > - bool "Peer2peer"
> > - depends on PCI
> > - help
> > - Set MPS = 128 for all devices. MPS configuration effected by the
> > - other options could cause the MPS on one root port to be
> > - different than that of the MPS on another, which may cause
> > - hot-added devices or peer-to-peer DMA to fail. Set MPS to the
> > - smallest possible value (128B) system-wide to avoid these issues.
> > - This is the same as booting with 'pci=pcie_bus_peer2peer'.
> > -
> > -endchoice
> > -
> > config VGA_ARB
> > bool "VGA Arbitration" if EXPERT
> > default y
> > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> > index 8479c2e1f74f..274c6685344e 100644
> > --- a/drivers/pci/pci.c
> > +++ b/drivers/pci/pci.c
> > @@ -120,17 +120,7 @@ unsigned long pci_hotplug_bus_size = DEFAULT_HOTPLUG_BUS_SIZE;
> >
> >
> > /* PCIe MPS/MRRS strategy; can be overridden by kernel command-line param */
> > -#ifdef CONFIG_PCIE_BUS_TUNE_OFF
> > -enum pcie_bus_config_types pcie_bus_config = PCIE_BUS_TUNE_OFF;
> > -#elif defined CONFIG_PCIE_BUS_SAFE
> > -enum pcie_bus_config_types pcie_bus_config = PCIE_BUS_SAFE;
> > -#elif defined CONFIG_PCIE_BUS_PERFORMANCE
> > -enum pcie_bus_config_types pcie_bus_config = PCIE_BUS_PERFORMANCE;
> > -#elif defined CONFIG_PCIE_BUS_PEER2PEER
> > -enum pcie_bus_config_types pcie_bus_config = PCIE_BUS_PEER2PEER;
> > -#else
> > enum pcie_bus_config_types pcie_bus_config = PCIE_BUS_DEFAULT;
> > -#endif
> >
> > /*
> > * The default CLS is used if arch didn't set CLS explicitly and not
> > --
> > 2.51.0
> >
prev parent reply other threads:[~2026-04-21 18:06 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-26 22:13 [PATCH v1] PCI: Remove MPS/MRRS Kconfig settings Bjorn Helgaas
2026-04-03 22:11 ` Bjorn Helgaas
2026-04-21 18:06 ` Bjorn Helgaas [this message]
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=20260421180609.GA313824@bhelgaas \
--to=helgaas@kernel.org \
--cc=18255117159@163.com \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=bhelgaas@google.com \
--cc=cassel@kernel.org \
--cc=florian.fainelli@broadcom.com \
--cc=james.quinlan@broadcom.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
/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