lkml.org 
[lkml]   [2018]   [Apr]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 105/164] PCI: Mark Broadcom HT1100 and HT2000 Root Port Extended Tags as broken
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Sinan Kaya <okaya@codeaurora.org>

    commit 1b30dfd376e28e7f37eda5e2033f6823cdda222b upstream.

    Per PCIe r3.1, sec 2.2.6.2 and 7.8.4, a Requester may not use 8-bit Tags
    unless its Extended Tag Field Enable is set, but all Receivers/Completers
    must handle 8-bit Tags correctly regardless of their Extended Tag Field
    Enable.

    Some devices do not handle 8-bit Tags as Completers, so add a quirk for
    them. If we find such a device, we disable Extended Tags for the entire
    hierarchy to make peer-to-peer DMA possible.

    The Broadcom HT1100/HT2000/HT2100 seems to have issues with handling 8-bit
    tags. Mark it as broken.

    This fixes Xorg hangs and unresponsive keyboards with errors like this:

    radeon 0000:06:00.0: GPU lockup (current fence id 0x000000000000000e last fence id 0x0000000000000
    [drm:r600_ring_test [radeon]] *ERROR* radeon: ring 0 test failed (scratch(0x8504)=0xCAFEDEAD)
    [drm:r600_resume [radeon]] *ERROR* r600 startup failed on resume

    Fixes: 60db3a4d8cc9 ("PCI: Enable PCIe Extended Tags if supported")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=196197
    Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
    Signed-off-by: Bjorn Helgaas <helgaas@kernel.org>
    CC: stable@vger.kernel.org # v4.11: 62ce94a7a5a5 PCI: Mark Broadcom HT2100 Root Port Extended Tags as broken
    CC: stable@vger.kernel.org # v4.11
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/pci/quirks.c | 4 ++++
    1 file changed, 4 insertions(+)

    --- a/drivers/pci/quirks.c
    +++ b/drivers/pci/quirks.c
    @@ -4806,9 +4806,13 @@ static void quirk_no_ext_tags(struct pci

    pci_walk_bus(bridge->bus, pci_configure_extended_tags, NULL);
    }
    +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0132, quirk_no_ext_tags);
    DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0140, quirk_no_ext_tags);
    +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0141, quirk_no_ext_tags);
    DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0142, quirk_no_ext_tags);
    DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0144, quirk_no_ext_tags);
    +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0420, quirk_no_ext_tags);
    +DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0422, quirk_no_ext_tags);

    #ifdef CONFIG_PCI_ATS
    /*

    \
     
     \ /
      Last update: 2018-04-22 16:10    [W:4.687 / U:0.384 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site