[PATCH v9 0/3] PCI: Configure Root Port MPS during host probing
From: Hans Zhang <18255117159@163.com>
Date: 2026-09-16 15:39:55
Also in:
linux-amlogic, linux-pci, linux-rockchip, lkml
Current PCIe enumeration configures each device's Maximum Payload Size (MPS) top-down to match its upstream bridge. Root Ports, however, return early from pci_configure_mps() because they have no upstream bridge, so their MPS may remain at firmware defaults and fail to use the controller's full capability. There is also a hierarchy problem when a device's MPS Supported (MPSS) is smaller than the MPS already programmed above it. The existing reduction only lowers a Root Port. If a Switch is in between, the Switch ports keep the larger MPS and the endpoint is left mismatched, which can cause Malformed TLPs. This series addresses both issues: 1. Patch 1 fixes pci_configure_mps() so that when a device's MPSS is smaller than the MPS already in use above it, the whole Root Port hierarchy is reduced as necessary, including Switch ports and already-programmed sibling devices. 2. Patch 2 safely initializes Root Port MPS to its maximum supported value during host probing. Patch 1 ensures this larger initial value is reduced again when downstream devices require a smaller MPS. PCIE_BUS_TUNE_OFF and PCIE_BUS_PEER2PEER are left untouched. 3. Patch 3 removes the now-redundant Meson PCIe driver MPS programming and cleans up the resulting dead macros and misleading MRRS helper name. --- Changes in v9: - Add patch 1 to reduce the whole Root Port hierarchy when a downstream device has a smaller MPSS, addressing the Switch case reported by sashiko. - Patch 2 keeps the Root Port max-MPS initialization, adds error handling, and relies on patch 1 for later reduction. - Patch 3 drops PCIE_CAP_MAX_PAYLOAD_SIZE and MAX_PAYLOAD_SIZE, renames meson_size_to_payload() to meson_size_to_mrrs(), and updates the warning. Changes in v8: https://patchwork.kernel.org/project/linux-pci/patch/20260911132145.211380-1-18255117159@163.com/ - Rebase to v7.3-rc1. Changes in v7: https://patchwork.kernel.org/project/linux-pci/cover/20251127170908.14850-1-18255117159@163.com/ - Exclude PCIE_BUS_PEER2PEER mode from Root Port MPS configuration - Remove redundant check for upstream bridge (Root Ports don't have one) - Improve commit message and code comments as per Bjorn. Changes for v6: https://patchwork.kernel.org/project/linux-pci/patch/20251104165125.174168-1-18255117159@163.com/ - Modify the commit message and comments. (Bjorn) - Patch 1/2 code logic: Add !bridge check to configure MPS only for Root Ports without an upstream bridge (root bridges), avoiding incorrect handling of non-root-bridge Root Ports (Niklas). Changes for v5: https://patchwork.kernel.org/project/linux-pci/patch/20250620155507.1022099-1-18255117159@163.com/ - Use pcie_set_mps directly instead of pcie_write_mps. - The patch 1 commit message were modified. Changes for v4: https://patchwork.kernel.org/project/linux-pci/patch/20250510155607.390687-1-18255117159@163.com/ - The patch [v4 1/2] add a comment to explain why it was done this way. - The patch [v4 2/2] have not been modified. - Drop patch [v3 3/3]. The Maintainer of the pci-aardvark.c file suggests that this patch cannot be submitted. In addition, Mani also suggests dropping this patch until this series of issues is resolved. Changes for v3: https://patchwork.kernel.org/project/linux-pci/patch/20250506173439.292460-1-18255117159@163.com/ - The new split is patch 2/3 and 3/3. - Modify the patch 1/3 according to Niklas' suggestion. Changes for v2: https://patchwork.kernel.org/project/linux-pci/patch/20250425095708.32662-1-18255117159@163.com/ - According to the Maintainer's suggestion, limit the setting of MPS changes to platforms with controller drivers. - Delete the MPS code set by the SOC manufacturer. --- Hans Zhang (3): PCI: Match the hierarchy's MPS to a device's MPSS as necessary PCI: Configure Root Port MPS during host probing PCI: dwc: Remove redundant MPS configuration drivers/pci/controller/dwc/pci-meson.c | 25 ++---------- drivers/pci/probe.c | 53 ++++++++++++++++++++++++-- 2 files changed, 52 insertions(+), 26 deletions(-) base-commit: 08df884136f1c1197bab2a27814404fd329d9aac -- 2.34.1