aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/quirks.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/quirks.c')
-rw-r--r--drivers/pci/quirks.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 92b52ebd0eb6..12d489395fad 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -1730,6 +1730,48 @@ static void __devinit quirk_via_cx700_pci_parking_caching(struct pci_dev *dev)
1730} 1730}
1731DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_VIA, 0x324e, quirk_via_cx700_pci_parking_caching); 1731DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_VIA, 0x324e, quirk_via_cx700_pci_parking_caching);
1732 1732
1733/*
1734 * For Broadcom 5706, 5708, 5709 rev. A nics, any read beyond the
1735 * VPD end tag will hang the device. This problem was initially
1736 * observed when a vpd entry was created in sysfs
1737 * ('/sys/bus/pci/devices/<id>/vpd'). A read to this sysfs entry
1738 * will dump 32k of data. Reading a full 32k will cause an access
1739 * beyond the VPD end tag causing the device to hang. Once the device
1740 * is hung, the bnx2 driver will not be able to reset the device.
1741 * We believe that it is legal to read beyond the end tag and
1742 * therefore the solution is to limit the read/write length.
1743 */
1744static void __devinit quirk_brcm_570x_limit_vpd(struct pci_dev *dev)
1745{
1746 /* Only disable the VPD capability for 5706, 5708, and 5709 rev. A */
1747 if ((dev->device == PCI_DEVICE_ID_NX2_5706) ||
1748 (dev->device == PCI_DEVICE_ID_NX2_5708) ||
1749 ((dev->device == PCI_DEVICE_ID_NX2_5709) &&
1750 (dev->revision & 0xf0) == 0x0)) {
1751 if (dev->vpd)
1752 dev->vpd->len = 0x80;
1753 }
1754}
1755
1756DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM,
1757 PCI_DEVICE_ID_NX2_5706,
1758 quirk_brcm_570x_limit_vpd);
1759DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM,
1760 PCI_DEVICE_ID_NX2_5706S,
1761 quirk_brcm_570x_limit_vpd);
1762DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM,
1763 PCI_DEVICE_ID_NX2_5708,
1764 quirk_brcm_570x_limit_vpd);
1765DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM,
1766 PCI_DEVICE_ID_NX2_5708S,
1767 quirk_brcm_570x_limit_vpd);
1768DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM,
1769 PCI_DEVICE_ID_NX2_5709,
1770 quirk_brcm_570x_limit_vpd);
1771DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM,
1772 PCI_DEVICE_ID_NX2_5709S,
1773 quirk_brcm_570x_limit_vpd);
1774
1733#ifdef CONFIG_PCI_MSI 1775#ifdef CONFIG_PCI_MSI
1734/* Some chipsets do not support MSI. We cannot easily rely on setting 1776/* Some chipsets do not support MSI. We cannot easily rely on setting
1735 * PCI_BUS_FLAGS_NO_MSI in its bus flags because there are actually 1777 * PCI_BUS_FLAGS_NO_MSI in its bus flags because there are actually
@@ -1745,6 +1787,7 @@ static void __init quirk_disable_all_msi(struct pci_dev *dev)
1745DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_disable_all_msi); 1787DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_disable_all_msi);
1746DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_disable_all_msi); 1788DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_disable_all_msi);
1747DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi); 1789DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi);
1790DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3336, quirk_disable_all_msi);
1748DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi); 1791DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi);
1749 1792
1750/* Disable MSI on chipsets that are known to not support it */ 1793/* Disable MSI on chipsets that are known to not support it */