From: Greg Kroah-Hartman Date: Mon, 11 Nov 2019 13:25:02 +0000 (+0100) Subject: 4.14-stable patches X-Git-Tag: v4.4.201~23 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=097ff5103bd40c13cffc514bba39bc5add1414cf;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: pci-tegra-enable-relaxed-ordering-only-for-tegra20-tegra30.patch --- diff --git a/queue-4.14/pci-tegra-enable-relaxed-ordering-only-for-tegra20-tegra30.patch b/queue-4.14/pci-tegra-enable-relaxed-ordering-only-for-tegra20-tegra30.patch new file mode 100644 index 00000000000..9f4be064ad8 --- /dev/null +++ b/queue-4.14/pci-tegra-enable-relaxed-ordering-only-for-tegra20-tegra30.patch @@ -0,0 +1,66 @@ +From 7be142caabc4780b13a522c485abc806de5c4114 Mon Sep 17 00:00:00 2001 +From: Vidya Sagar +Date: Thu, 4 Jul 2019 20:34:28 +0530 +Subject: PCI: tegra: Enable Relaxed Ordering only for Tegra20 & Tegra30 + +From: Vidya Sagar + +commit 7be142caabc4780b13a522c485abc806de5c4114 upstream. + +The PCI Tegra controller conversion to a device tree configurable +driver in commit d1523b52bff3 ("PCI: tegra: Move PCIe driver +to drivers/pci/host") implied that code for the driver can be +compiled in for a kernel supporting multiple platforms. + +Unfortunately, a blind move of the code did not check that some of the +quirks that were applied in arch/arm (eg enabling Relaxed Ordering on +all PCI devices - since the quirk hook erroneously matches PCI_ANY_ID +for both Vendor-ID and Device-ID) are now applied in all kernels that +compile the PCI Tegra controlled driver, DT and ACPI alike. + +This is completely wrong, in that enablement of Relaxed Ordering is only +required by default in Tegra20 platforms as described in the Tegra20 +Technical Reference Manual (available at +https://developer.nvidia.com/embedded/downloads#?search=tegra%202 in +Section 34.1, where it is mentioned that Relaxed Ordering bit needs to +be enabled in its root ports to avoid deadlock in hardware) and in the +Tegra30 platforms for the same reasons (unfortunately not documented +in the TRM). + +There is no other strict requirement on PCI devices Relaxed Ordering +enablement on any other Tegra platforms or PCI host bridge driver. + +Fix this quite upsetting situation by limiting the vendor and device IDs +to which the Relaxed Ordering quirk applies to the root ports in +question, reported above. + +Signed-off-by: Vidya Sagar +[lorenzo.pieralisi@arm.com: completely rewrote the commit log/fixes tag] +Signed-off-by: Lorenzo Pieralisi +Acked-by: Thierry Reding +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/pci/host/pci-tegra.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +--- a/drivers/pci/host/pci-tegra.c ++++ b/drivers/pci/host/pci-tegra.c +@@ -607,12 +607,15 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NV + DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, 0x0e1c, tegra_pcie_fixup_class); + DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, 0x0e1d, tegra_pcie_fixup_class); + +-/* Tegra PCIE requires relaxed ordering */ ++/* Tegra20 and Tegra30 PCIE requires relaxed ordering */ + static void tegra_pcie_relax_enable(struct pci_dev *dev) + { + pcie_capability_set_word(dev, PCI_EXP_DEVCTL, PCI_EXP_DEVCTL_RELAX_EN); + } +-DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, tegra_pcie_relax_enable); ++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0bf0, tegra_pcie_relax_enable); ++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0bf1, tegra_pcie_relax_enable); ++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0e1c, tegra_pcie_relax_enable); ++DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0e1d, tegra_pcie_relax_enable); + + static int tegra_pcie_request_resources(struct tegra_pcie *pcie) + { diff --git a/queue-4.14/series b/queue-4.14/series index 88f9993d8d0..2851e76b789 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -65,3 +65,4 @@ lib-scatterlist-introduce-sgl_alloc-and-sgl_free.patch usbip-fix-vhci_urb_enqueue-urb-null-transfer-buffer-error-path.patch usbip-stub_rx-fix-static-checker-warning-on-unnecessary-checks.patch usbip-implement-sg-support-to-vhci-hcd-and-stub-driver.patch +pci-tegra-enable-relaxed-ordering-only-for-tegra20-tegra30.patch