Skip to content

Commit ebfde15

Browse files
Vidya Sagarkwilczynski
authored andcommitted
Revert "PCI: tegra194: Enable support for 256 Byte payload"
After commit 4fb8e46 ("PCI: tegra194: Enable support for 256 Byte payload"), we initialize MPS=256 for tegra194 Root Ports before enumerating the hierarchy. Consider an Endpoint that supports only MPS=128. In the default situation (CONFIG_PCIE_BUS_DEFAULT set and no "pci=pcie_bus_*" parameter), Linux tries to configure the MPS of every device to match the upstream bridge. If the Endpoint is directly below the Root Port, Linux can reduce the Root Port MPS to 128 to match the Endpoint. But if there's a switch in the middle, Linux doesn't reduce the Root Port MPS because other devices below the switch may already be configured with MPS larger than 128. This scenario results in uncorrectable Malformed TLP errors if the Root Port sends TLPs with payloads larger than 128 bytes. These errors can be avoided by using the "pci=pcie_bus_safe" parameter, but it doesn't seem to be a good idea to always have this parameter even for basic functionality to work. Revert commit 4fb8e46 ("PCI: tegra194: Enable support for 256 Byte payload") so the Root Ports default to MPS=128, which all devices support. If peer-to-peer DMA is not required, one can use "pci=pcie_bus_perf" to get the benefit of larger MPS settings. [bhelgaas: commit log; kwilczynski: retain "u16 val_16" declaration at the top, add missing acked by tag] Fixes: 4fb8e46 ("PCI: tegra194: Enable support for 256 Byte payload") Link: https://lore.kernel.org/linux-pci/20230619102604.3735001-1-vidyas@nvidia.com Signed-off-by: Vidya Sagar <vidyas@nvidia.com> Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org> Acked-by: Jon Hunter <jonathanh@nvidia.com> Cc: stable@vger.kernel.org # v6.0-rc1+
1 parent 06c2afb commit ebfde15

File tree

1 file changed

+0
-10
lines changed

1 file changed

+0
-10
lines changed

drivers/pci/controller/dwc/pcie-tegra194.c

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -900,11 +900,6 @@ static int tegra_pcie_dw_host_init(struct dw_pcie_rp *pp)
900900
pcie->pcie_cap_base = dw_pcie_find_capability(&pcie->pci,
901901
PCI_CAP_ID_EXP);
902902

903-
val_16 = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_DEVCTL);
904-
val_16 &= ~PCI_EXP_DEVCTL_PAYLOAD;
905-
val_16 |= PCI_EXP_DEVCTL_PAYLOAD_256B;
906-
dw_pcie_writew_dbi(pci, pcie->pcie_cap_base + PCI_EXP_DEVCTL, val_16);
907-
908903
val = dw_pcie_readl_dbi(pci, PCI_IO_BASE);
909904
val &= ~(IO_BASE_IO_DECODE | IO_BASE_IO_DECODE_BIT8);
910905
dw_pcie_writel_dbi(pci, PCI_IO_BASE, val);
@@ -1887,11 +1882,6 @@ static void pex_ep_event_pex_rst_deassert(struct tegra_pcie_dw *pcie)
18871882
pcie->pcie_cap_base = dw_pcie_find_capability(&pcie->pci,
18881883
PCI_CAP_ID_EXP);
18891884

1890-
val_16 = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base + PCI_EXP_DEVCTL);
1891-
val_16 &= ~PCI_EXP_DEVCTL_PAYLOAD;
1892-
val_16 |= PCI_EXP_DEVCTL_PAYLOAD_256B;
1893-
dw_pcie_writew_dbi(pci, pcie->pcie_cap_base + PCI_EXP_DEVCTL, val_16);
1894-
18951885
/* Clear Slot Clock Configuration bit if SRNS configuration */
18961886
if (pcie->enable_srns) {
18971887
val_16 = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base +

0 commit comments

Comments
 (0)