diff options
-rw-r--r-- | drivers/pci/quirks.c | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 81777c27e14c..322d577503bd 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -3615,14 +3615,16 @@ static int pci_quirk_intel_pch_acs(struct pci_dev *dev, u16 acs_flags) | |||
3615 | return acs_flags & ~flags ? 0 : 1; | 3615 | return acs_flags & ~flags ? 0 : 1; |
3616 | } | 3616 | } |
3617 | 3617 | ||
3618 | static int pci_quirk_solarflare_acs(struct pci_dev *dev, u16 acs_flags) | 3618 | static int pci_quirk_mf_endpoint_acs(struct pci_dev *dev, u16 acs_flags) |
3619 | { | 3619 | { |
3620 | /* | 3620 | /* |
3621 | * SV, TB, and UF are not relevant to multifunction endpoints. | 3621 | * SV, TB, and UF are not relevant to multifunction endpoints. |
3622 | * | 3622 | * |
3623 | * Solarflare indicates that peer-to-peer between functions is not | 3623 | * Multifunction devices are only required to implement RR, CR, and DT |
3624 | * possible, therefore RR, CR, and DT are not implemented. Mask | 3624 | * in their ACS capability if they support peer-to-peer transactions. |
3625 | * these out as if they were clear in the ACS capabilities register. | 3625 | * Devices matching this quirk have been verified by the vendor to not |
3626 | * perform peer-to-peer with other functions, allowing us to mask out | ||
3627 | * these bits as if they were unimplemented in the ACS capability. | ||
3626 | */ | 3628 | */ |
3627 | acs_flags &= ~(PCI_ACS_SV | PCI_ACS_TB | PCI_ACS_RR | | 3629 | acs_flags &= ~(PCI_ACS_SV | PCI_ACS_TB | PCI_ACS_RR | |
3628 | PCI_ACS_CR | PCI_ACS_UF | PCI_ACS_DT); | 3630 | PCI_ACS_CR | PCI_ACS_UF | PCI_ACS_DT); |
@@ -3641,8 +3643,28 @@ static const struct pci_dev_acs_enabled { | |||
3641 | { PCI_VENDOR_ID_ATI, 0x439d, pci_quirk_amd_sb_acs }, | 3643 | { PCI_VENDOR_ID_ATI, 0x439d, pci_quirk_amd_sb_acs }, |
3642 | { PCI_VENDOR_ID_ATI, 0x4384, pci_quirk_amd_sb_acs }, | 3644 | { PCI_VENDOR_ID_ATI, 0x4384, pci_quirk_amd_sb_acs }, |
3643 | { PCI_VENDOR_ID_ATI, 0x4399, pci_quirk_amd_sb_acs }, | 3645 | { PCI_VENDOR_ID_ATI, 0x4399, pci_quirk_amd_sb_acs }, |
3644 | { PCI_VENDOR_ID_SOLARFLARE, 0x0903, pci_quirk_solarflare_acs }, | 3646 | { PCI_VENDOR_ID_SOLARFLARE, 0x0903, pci_quirk_mf_endpoint_acs }, |
3645 | { PCI_VENDOR_ID_SOLARFLARE, 0x0923, pci_quirk_solarflare_acs }, | 3647 | { PCI_VENDOR_ID_SOLARFLARE, 0x0923, pci_quirk_mf_endpoint_acs }, |
3648 | { PCI_VENDOR_ID_INTEL, 0x10C6, pci_quirk_mf_endpoint_acs }, | ||
3649 | { PCI_VENDOR_ID_INTEL, 0x10DB, pci_quirk_mf_endpoint_acs }, | ||
3650 | { PCI_VENDOR_ID_INTEL, 0x10DD, pci_quirk_mf_endpoint_acs }, | ||
3651 | { PCI_VENDOR_ID_INTEL, 0x10E1, pci_quirk_mf_endpoint_acs }, | ||
3652 | { PCI_VENDOR_ID_INTEL, 0x10F1, pci_quirk_mf_endpoint_acs }, | ||
3653 | { PCI_VENDOR_ID_INTEL, 0x10F7, pci_quirk_mf_endpoint_acs }, | ||
3654 | { PCI_VENDOR_ID_INTEL, 0x10F8, pci_quirk_mf_endpoint_acs }, | ||
3655 | { PCI_VENDOR_ID_INTEL, 0x10F9, pci_quirk_mf_endpoint_acs }, | ||
3656 | { PCI_VENDOR_ID_INTEL, 0x10FA, pci_quirk_mf_endpoint_acs }, | ||
3657 | { PCI_VENDOR_ID_INTEL, 0x10FB, pci_quirk_mf_endpoint_acs }, | ||
3658 | { PCI_VENDOR_ID_INTEL, 0x10FC, pci_quirk_mf_endpoint_acs }, | ||
3659 | { PCI_VENDOR_ID_INTEL, 0x1507, pci_quirk_mf_endpoint_acs }, | ||
3660 | { PCI_VENDOR_ID_INTEL, 0x1514, pci_quirk_mf_endpoint_acs }, | ||
3661 | { PCI_VENDOR_ID_INTEL, 0x151C, pci_quirk_mf_endpoint_acs }, | ||
3662 | { PCI_VENDOR_ID_INTEL, 0x1529, pci_quirk_mf_endpoint_acs }, | ||
3663 | { PCI_VENDOR_ID_INTEL, 0x152A, pci_quirk_mf_endpoint_acs }, | ||
3664 | { PCI_VENDOR_ID_INTEL, 0x154D, pci_quirk_mf_endpoint_acs }, | ||
3665 | { PCI_VENDOR_ID_INTEL, 0x154F, pci_quirk_mf_endpoint_acs }, | ||
3666 | { PCI_VENDOR_ID_INTEL, 0x1551, pci_quirk_mf_endpoint_acs }, | ||
3667 | { PCI_VENDOR_ID_INTEL, 0x1558, pci_quirk_mf_endpoint_acs }, | ||
3646 | { PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_intel_pch_acs }, | 3668 | { PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_quirk_intel_pch_acs }, |
3647 | { 0 } | 3669 | { 0 } |
3648 | }; | 3670 | }; |