]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/4.16.4/pci-mark-broadcom-ht1100-and-ht2000-root-port-extended-tags-as-broken.patch
Fixes for 4.19
[thirdparty/kernel/stable-queue.git] / releases / 4.16.4 / pci-mark-broadcom-ht1100-and-ht2000-root-port-extended-tags-as-broken.patch
CommitLineData
f85a50aa
GKH
1From 1b30dfd376e28e7f37eda5e2033f6823cdda222b Mon Sep 17 00:00:00 2001
2From: Sinan Kaya <okaya@codeaurora.org>
3Date: Tue, 10 Apr 2018 14:44:21 -0500
4Subject: PCI: Mark Broadcom HT1100 and HT2000 Root Port Extended Tags as broken
5
6From: Sinan Kaya <okaya@codeaurora.org>
7
8commit 1b30dfd376e28e7f37eda5e2033f6823cdda222b upstream.
9
10Per PCIe r3.1, sec 2.2.6.2 and 7.8.4, a Requester may not use 8-bit Tags
11unless its Extended Tag Field Enable is set, but all Receivers/Completers
12must handle 8-bit Tags correctly regardless of their Extended Tag Field
13Enable.
14
15Some devices do not handle 8-bit Tags as Completers, so add a quirk for
16them. If we find such a device, we disable Extended Tags for the entire
17hierarchy to make peer-to-peer DMA possible.
18
19The Broadcom HT1100/HT2000/HT2100 seems to have issues with handling 8-bit
20tags. Mark it as broken.
21
22This fixes Xorg hangs and unresponsive keyboards with errors like this:
23
24 radeon 0000:06:00.0: GPU lockup (current fence id 0x000000000000000e last fence id 0x0000000000000
25 [drm:r600_ring_test [radeon]] *ERROR* radeon: ring 0 test failed (scratch(0x8504)=0xCAFEDEAD)
26 [drm:r600_resume [radeon]] *ERROR* r600 startup failed on resume
27
28Fixes: 60db3a4d8cc9 ("PCI: Enable PCIe Extended Tags if supported")
29Link: https://bugzilla.kernel.org/show_bug.cgi?id=196197
30Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
31Signed-off-by: Bjorn Helgaas <helgaas@kernel.org>
32CC: stable@vger.kernel.org # v4.11: 62ce94a7a5a5 PCI: Mark Broadcom HT2100 Root Port Extended Tags as broken
33CC: stable@vger.kernel.org # v4.11
34Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
35
36---
37 drivers/pci/quirks.c | 4 ++++
38 1 file changed, 4 insertions(+)
39
40--- a/drivers/pci/quirks.c
41+++ b/drivers/pci/quirks.c
42@@ -4815,9 +4815,13 @@ static void quirk_no_ext_tags(struct pci
43
44 pci_walk_bus(bridge->bus, pci_configure_extended_tags, NULL);
45 }
46+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0132, quirk_no_ext_tags);
47 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0140, quirk_no_ext_tags);
48+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0141, quirk_no_ext_tags);
49 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0142, quirk_no_ext_tags);
50 DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0144, quirk_no_ext_tags);
51+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0420, quirk_no_ext_tags);
52+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0422, quirk_no_ext_tags);
53
54 #ifdef CONFIG_PCI_ATS
55 /*