diff options
Diffstat (limited to 'drivers/pci/quirks.c')
-rw-r--r-- | drivers/pci/quirks.c | 43 |
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 | } |
1731 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_VIA, 0x324e, quirk_via_cx700_pci_parking_caching); | 1731 | DECLARE_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 | */ | ||
1744 | static 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 | |||
1756 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, | ||
1757 | PCI_DEVICE_ID_NX2_5706, | ||
1758 | quirk_brcm_570x_limit_vpd); | ||
1759 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, | ||
1760 | PCI_DEVICE_ID_NX2_5706S, | ||
1761 | quirk_brcm_570x_limit_vpd); | ||
1762 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, | ||
1763 | PCI_DEVICE_ID_NX2_5708, | ||
1764 | quirk_brcm_570x_limit_vpd); | ||
1765 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, | ||
1766 | PCI_DEVICE_ID_NX2_5708S, | ||
1767 | quirk_brcm_570x_limit_vpd); | ||
1768 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, | ||
1769 | PCI_DEVICE_ID_NX2_5709, | ||
1770 | quirk_brcm_570x_limit_vpd); | ||
1771 | DECLARE_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) | |||
1745 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_disable_all_msi); | 1787 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_GCNB_LE, quirk_disable_all_msi); |
1746 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_disable_all_msi); | 1788 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS400_200, quirk_disable_all_msi); |
1747 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi); | 1789 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RS480, quirk_disable_all_msi); |
1790 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3336, quirk_disable_all_msi); | ||
1748 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_VT3351, quirk_disable_all_msi); | 1791 | DECLARE_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 */ |