Re: [PATCH] pci: quirk: adding Ampere vendor id to ACS quirk list

From: Bjorn Helgaas
Date: Thu Feb 15 2018 - 19:30:38 EST


On Thu, Jan 25, 2018 at 03:36:07PM -0800, Feng Kan wrote:
> Adding Ampere Computing vendor id to the ACS quirk list.

I assume these new devices provide isolation and source validation the
same way the X-Gene devices do:

commit a0418aa262df
Author: Feng Kan <fkan@xxxxxxx>
Date: Thu Aug 10 16:06:33 2017 -0500

PCI: Add ACS quirk for APM X-Gene devices

The APM X-Gene PCIe root port does not support ACS at this point. However,
the hardware provides isolation and source validation through the SMMU.
The stream ID generated by the PCIe ports contain both the bus/device/
function number as well as the port ID in its 3 most significant bits.
Turn on ACS but disable all the peer-to-peer features.

If so, please repost this patch with subject and changelog similar
to the above. I want an explicit statement about how you provide
protection equivalent to ACS so it's clear this isn't a patch that
just makes things "work" at the expense of security.

> Signed-off-by: Feng Kan <fkan@xxxxxxx>
> ---
> Tanmay is no longer with us. After the email system is rebranded
> to the new company. We will clean up the remaining legacy items.
>
> drivers/pci/quirks.c | 9 +++++++++
> include/linux/pci_ids.h | 1 +
> 2 files changed, 10 insertions(+)
>
> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> index 10684b1..45d9187 100644
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -4512,6 +4512,15 @@ static const struct pci_dev_acs_enabled {
> { PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs },
> /* APM X-Gene */
> { PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs },
> + /* Ampere Computing */
> + { PCI_VENDOR_ID_AMPERE, 0xE005, pci_quirk_xgene_acs },
> + { PCI_VENDOR_ID_AMPERE, 0xE006, pci_quirk_xgene_acs },
> + { PCI_VENDOR_ID_AMPERE, 0xE007, pci_quirk_xgene_acs },
> + { PCI_VENDOR_ID_AMPERE, 0xE008, pci_quirk_xgene_acs },
> + { PCI_VENDOR_ID_AMPERE, 0xE009, pci_quirk_xgene_acs },
> + { PCI_VENDOR_ID_AMPERE, 0xE00A, pci_quirk_xgene_acs },
> + { PCI_VENDOR_ID_AMPERE, 0xE00B, pci_quirk_xgene_acs },
> + { PCI_VENDOR_ID_AMPERE, 0xE00C, pci_quirk_xgene_acs },
> { 0 }
> };
>
> diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> index ab20dc5..c21d1f8 100644
> --- a/include/linux/pci_ids.h
> +++ b/include/linux/pci_ids.h
> @@ -1331,6 +1331,7 @@
> #define PCI_DEVICE_ID_IMS_TT3D 0x9135
>
> #define PCI_VENDOR_ID_AMCC 0x10e8
> +#define PCI_VENDOR_ID_AMPERE 0x1def
>
> #define PCI_VENDOR_ID_INTERG 0x10ea
> #define PCI_DEVICE_ID_INTERG_1682 0x1682
> --
> 2.7.4
>