diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/pci/quirks.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 15ee4e9af633..92bea8accc35 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
| @@ -4137,6 +4137,18 @@ static int pci_quirk_cavium_acs(struct pci_dev *dev, u16 acs_flags) | |||
| 4137 | return acs_flags ? 0 : 1; | 4137 | return acs_flags ? 0 : 1; |
| 4138 | } | 4138 | } |
| 4139 | 4139 | ||
| 4140 | static int pci_quirk_xgene_acs(struct pci_dev *dev, u16 acs_flags) | ||
| 4141 | { | ||
| 4142 | /* | ||
| 4143 | * X-Gene root matching this quirk do not allow peer-to-peer | ||
| 4144 | * transactions with others, allowing masking out these bits as if they | ||
| 4145 | * were unimplemented in the ACS capability. | ||
| 4146 | */ | ||
| 4147 | acs_flags &= ~(PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF); | ||
| 4148 | |||
| 4149 | return acs_flags ? 0 : 1; | ||
| 4150 | } | ||
| 4151 | |||
| 4140 | /* | 4152 | /* |
| 4141 | * Many Intel PCH root ports do provide ACS-like features to disable peer | 4153 | * Many Intel PCH root ports do provide ACS-like features to disable peer |
| 4142 | * transactions and validate bus numbers in requests, but do not provide an | 4154 | * transactions and validate bus numbers in requests, but do not provide an |
| @@ -4385,6 +4397,8 @@ static const struct pci_dev_acs_enabled { | |||
| 4385 | { 0x10df, 0x720, pci_quirk_mf_endpoint_acs }, /* Emulex Skyhawk-R */ | 4397 | { 0x10df, 0x720, pci_quirk_mf_endpoint_acs }, /* Emulex Skyhawk-R */ |
| 4386 | /* Cavium ThunderX */ | 4398 | /* Cavium ThunderX */ |
| 4387 | { PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs }, | 4399 | { PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs }, |
| 4400 | /* APM X-Gene */ | ||
| 4401 | { PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs }, | ||
| 4388 | { 0 } | 4402 | { 0 } |
| 4389 | }; | 4403 | }; |
| 4390 | 4404 | ||
