• Stefan Mätje's avatar
    PCI: Work around Pericom PCIe-to-PCI bridge Retrain Link erratum · a04b9369
    Stefan Mätje authored
    commit 4ec73791 upstream.
    
    Due to an erratum in some Pericom PCIe-to-PCI bridges in reverse mode
    (conventional PCI on primary side, PCIe on downstream side), the Retrain
    Link bit needs to be cleared manually to allow the link training to
    complete successfully.
    
    If it is not cleared manually, the link training is continuously restarted
    and no devices below the PCI-to-PCIe bridge can be accessed.  That means
    drivers for devices below the bridge will be loaded but won't work and may
    even crash because the driver is only reading 0xffff.
    
    See the Pericom Errata Sheet PI7C9X111SLB_errata_rev1.2_102711.pdf for
    details.  Devices known as affected so far are: PI7C9X110, PI7C9X111SL,
    PI7C9X130.
    
    Add a new flag, clear_retrain_link, in struct pci_dev.  Quirks for affected
    devices set this bit.
    
    Note that pcie_retrain_link() lives in aspm.c because that's currently the
    only place we use it, but this erratum is not specific to ASPM, and we may
    retrain links for other reasons in the future.
    Signed-off-by: default avatarStefan Mätje <stefan.maetje@esd.eu>
    [bhelgaas: apply regardless of CONFIG_PCIEASPM]
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
    CC: stable@vger.kernel.org
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    a04b9369
aspm.c 37.4 KB