]>
Commit | Line | Data |
---|---|---|
f85a50aa GKH |
1 | From 1b30dfd376e28e7f37eda5e2033f6823cdda222b Mon Sep 17 00:00:00 2001 |
2 | From: Sinan Kaya <okaya@codeaurora.org> | |
3 | Date: Tue, 10 Apr 2018 14:44:21 -0500 | |
4 | Subject: PCI: Mark Broadcom HT1100 and HT2000 Root Port Extended Tags as broken | |
5 | ||
6 | From: Sinan Kaya <okaya@codeaurora.org> | |
7 | ||
8 | commit 1b30dfd376e28e7f37eda5e2033f6823cdda222b upstream. | |
9 | ||
10 | Per PCIe r3.1, sec 2.2.6.2 and 7.8.4, a Requester may not use 8-bit Tags | |
11 | unless its Extended Tag Field Enable is set, but all Receivers/Completers | |
12 | must handle 8-bit Tags correctly regardless of their Extended Tag Field | |
13 | Enable. | |
14 | ||
15 | Some devices do not handle 8-bit Tags as Completers, so add a quirk for | |
16 | them. If we find such a device, we disable Extended Tags for the entire | |
17 | hierarchy to make peer-to-peer DMA possible. | |
18 | ||
19 | The Broadcom HT1100/HT2000/HT2100 seems to have issues with handling 8-bit | |
20 | tags. Mark it as broken. | |
21 | ||
22 | This 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 | ||
28 | Fixes: 60db3a4d8cc9 ("PCI: Enable PCIe Extended Tags if supported") | |
29 | Link: https://bugzilla.kernel.org/show_bug.cgi?id=196197 | |
30 | Signed-off-by: Sinan Kaya <okaya@codeaurora.org> | |
31 | Signed-off-by: Bjorn Helgaas <helgaas@kernel.org> | |
32 | CC: stable@vger.kernel.org # v4.11: 62ce94a7a5a5 PCI: Mark Broadcom HT2100 Root Port Extended Tags as broken | |
33 | CC: stable@vger.kernel.org # v4.11 | |
34 | Signed-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 | /* |