@@ -4995,6 +4995,18 @@ static int pci_quirk_brcm_acs(struct pci_dev *dev, u16 acs_flags)
49954995 PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF );
49964996}
49974997
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+
49985010/*
49995011 * Wangxun 40G/25G/10G/1G NICs have no ACS capability, but on
50005012 * multi-function devices, the hardware isolates the functions by
@@ -5128,6 +5140,17 @@ static const struct pci_dev_acs_enabled {
51285140 { PCI_VENDOR_ID_BROADCOM , 0x1762 , pci_quirk_mf_endpoint_acs },
51295141 { PCI_VENDOR_ID_BROADCOM , 0x1763 , pci_quirk_mf_endpoint_acs },
51305142 { 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 },
51315154 /* Amazon Annapurna Labs */
51325155 { PCI_VENDOR_ID_AMAZON_ANNAPURNA_LABS , 0x0031 , pci_quirk_al_acs },
51335156 /* Zhaoxin multi-function devices */
0 commit comments