@@ -4995,6 +4995,18 @@ static int pci_quirk_brcm_acs(struct pci_dev *dev, u16 acs_flags)
4995
4995
PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF );
4996
4996
}
4997
4997
4998
+ static int pci_quirk_loongson_acs (struct pci_dev * dev , u16 acs_flags )
4999
+ {
5000
+ /*
5001
+ * Loongson PCIe Root Ports don't advertise an ACS capability, but
5002
+ * they do not allow peer-to-peer transactions between Root Ports.
5003
+ * Allow each Root Port to be in a separate IOMMU group by masking
5004
+ * SV/RR/CR/UF bits.
5005
+ */
5006
+ return pci_acs_ctrl_enabled (acs_flags ,
5007
+ PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF );
5008
+ }
5009
+
4998
5010
/*
4999
5011
* Wangxun 40G/25G/10G/1G NICs have no ACS capability, but on
5000
5012
* multi-function devices, the hardware isolates the functions by
@@ -5128,6 +5140,17 @@ static const struct pci_dev_acs_enabled {
5128
5140
{ PCI_VENDOR_ID_BROADCOM , 0x1762 , pci_quirk_mf_endpoint_acs },
5129
5141
{ PCI_VENDOR_ID_BROADCOM , 0x1763 , pci_quirk_mf_endpoint_acs },
5130
5142
{ PCI_VENDOR_ID_BROADCOM , 0xD714 , pci_quirk_brcm_acs },
5143
+ /* Loongson PCIe Root Ports */
5144
+ { PCI_VENDOR_ID_LOONGSON , 0x3C09 , pci_quirk_loongson_acs },
5145
+ { PCI_VENDOR_ID_LOONGSON , 0x3C19 , pci_quirk_loongson_acs },
5146
+ { PCI_VENDOR_ID_LOONGSON , 0x3C29 , pci_quirk_loongson_acs },
5147
+ { PCI_VENDOR_ID_LOONGSON , 0x7A09 , pci_quirk_loongson_acs },
5148
+ { PCI_VENDOR_ID_LOONGSON , 0x7A19 , pci_quirk_loongson_acs },
5149
+ { PCI_VENDOR_ID_LOONGSON , 0x7A29 , pci_quirk_loongson_acs },
5150
+ { PCI_VENDOR_ID_LOONGSON , 0x7A39 , pci_quirk_loongson_acs },
5151
+ { PCI_VENDOR_ID_LOONGSON , 0x7A49 , pci_quirk_loongson_acs },
5152
+ { PCI_VENDOR_ID_LOONGSON , 0x7A59 , pci_quirk_loongson_acs },
5153
+ { PCI_VENDOR_ID_LOONGSON , 0x7A69 , pci_quirk_loongson_acs },
5131
5154
/* Amazon Annapurna Labs */
5132
5155
{ PCI_VENDOR_ID_AMAZON_ANNAPURNA_LABS , 0x0031 , pci_quirk_al_acs },
5133
5156
/* Zhaoxin multi-function devices */
0 commit comments