lkml.org 
[lkml]   [2020]   [Aug]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 007/149] PCI/ASPM: Disable ASPM on ASMedia ASM1083/1085 PCIe-to-PCI bridge
    Date
    From: Robert Hancock <hancockrwd@gmail.com>

    commit b361663c5a40c8bc758b7f7f2239f7a192180e7c upstream.

    Recently ASPM handling was changed to allow ASPM on PCIe-to-PCI/PCI-X
    bridges. Unfortunately the ASMedia ASM1083/1085 PCIe to PCI bridge device
    doesn't seem to function properly with ASPM enabled. On an Asus PRIME
    H270-PRO motherboard, it causes errors like these:

    pcieport 0000:00:1c.0: AER: PCIe Bus Error: severity=Corrected, type=Data Link Layer, (Transmitter ID)
    pcieport 0000:00:1c.0: AER: device [8086:a292] error status/mask=00003000/00002000
    pcieport 0000:00:1c.0: AER: [12] Timeout
    pcieport 0000:00:1c.0: AER: Corrected error received: 0000:00:1c.0
    pcieport 0000:00:1c.0: AER: can't find device of ID00e0

    In addition to flooding the kernel log, this also causes the machine to
    wake up immediately after suspend is initiated.

    The device advertises ASPM L0s and L1 support in the Link Capabilities
    register, but the ASMedia web page for ASM1083 [1] claims "No PCIe ASPM
    support".

    Windows 10 (build 2004) enables L0s, but it also logs correctable PCIe
    errors.

    Add a quirk to disable ASPM for this device.

    [1] https://www.asmedia.com.tw/eng/e_show_products.php?cate_index=169&item=114

    [bhelgaas: commit log]
    Fixes: 66ff14e59e8a ("PCI/ASPM: Allow ASPM on links to PCIe-to-PCI/PCI-X Bridges")
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=208667
    Link: https://lore.kernel.org/r/20200722021803.17958-1-hancockrwd@gmail.com
    Signed-off-by: Robert Hancock <hancockrwd@gmail.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

    --- a/drivers/pci/quirks.c
    +++ b/drivers/pci/quirks.c
    @@ -2273,6 +2273,19 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AM
    DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, 0xa238, quirk_disable_msi);
    DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x5a3f, quirk_disable_msi);

    +static void quirk_disable_aspm_l0s_l1(struct pci_dev *dev)
    +{
    + dev_info(&dev->dev, "Disabling ASPM L0s/L1\n");
    + pci_disable_link_state(dev, PCIE_LINK_STATE_L0S | PCIE_LINK_STATE_L1);
    +}
    +
    +/*
    + * ASM1083/1085 PCIe-PCI bridge devices cause AER timeout errors on the
    + * upstream PCIe root port when ASPM is enabled. At least L0s mode is affected;
    + * disable both L0s and L1 for now to be safe.
    + */
    +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ASMEDIA, 0x1080, quirk_disable_aspm_l0s_l1);
    +
    /*
    * The APC bridge device in AMD 780 family northbridges has some random
    * OEM subsystem ID in its vendor ID register (erratum 18), so instead

    \
     
     \ /
      Last update: 2020-08-20 12:40    [W:5.670 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site