All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V4] pci: quirk: Apply APM ACS quirk to XGene devices
@ 2017-08-01 23:08 Feng Kan
  2017-08-01 23:15 ` Alex Williamson
  2017-08-10 17:45 ` Bjorn Helgaas
  0 siblings, 2 replies; 5+ messages in thread
From: Feng Kan @ 2017-08-01 23:08 UTC (permalink / raw)
  To: linux-kernel, linux-pci, bhelgaas, alex.williamson; +Cc: Feng Kan

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

Signed-off-by: Feng Kan <fkan@apm.com>
---
	V4 Change: Remove TB & TD flags from ACS mask
        V3 Change: Add comment regarding unique port id in stream ID
        V2 Change: Move XGene ACS quirk to unique XGene function

 drivers/pci/quirks.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 085fb78..22343b3 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -4120,6 +4120,18 @@ static int pci_quirk_cavium_acs(struct pci_dev *dev, u16 acs_flags)
 	return acs_flags ? 0 : 1;
 }
 
+static int pci_quirk_xgene_acs(struct pci_dev *dev, u16 acs_flags)
+{
+	/*
+	 * XGene root matching this quirk do not allow peer-to-peer
+	 * transactions with others, allowing masking out these bits as if they
+	 * were unimplemented in the ACS capability.
+	 */
+	acs_flags &= ~(PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF);
+
+	return acs_flags ? 0 : 1;
+}
+
 /*
  * Many Intel PCH root ports do provide ACS-like features to disable peer
  * transactions and validate bus numbers in requests, but do not provide an
@@ -4368,6 +4380,8 @@ static int pci_quirk_mf_endpoint_acs(struct pci_dev *dev, u16 acs_flags)
 	{ 0x10df, 0x720, pci_quirk_mf_endpoint_acs }, /* Emulex Skyhawk-R */
 	/* Cavium ThunderX */
 	{ PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs },
+	/* APM XGene */
+	{ PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs },
 	{ 0 }
 };
 
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH V4] pci: quirk: Apply APM ACS quirk to XGene devices
  2017-08-01 23:08 [PATCH V4] pci: quirk: Apply APM ACS quirk to XGene devices Feng Kan
@ 2017-08-01 23:15 ` Alex Williamson
  2017-08-02 18:57   ` Feng Kan
  2017-08-10 17:45 ` Bjorn Helgaas
  1 sibling, 1 reply; 5+ messages in thread
From: Alex Williamson @ 2017-08-01 23:15 UTC (permalink / raw)
  To: Feng Kan; +Cc: linux-kernel, linux-pci, bhelgaas

On Tue,  1 Aug 2017 16:08:13 -0700
Feng Kan <fkan@apm.com> wrote:

> The APM X-Gene PCIe root port does not support ACS at this point.
> However, the hw provides isolation and source validation through
> the SMMU. The stream ID generated by the PCIe ports contain both
> the BDF as well as the port ID in its 3 most significant bits.
> Turn on ACS but disable all the peer to peer features.
> 
> Signed-off-by: Feng Kan <fkan@apm.com>
> ---
> 	V4 Change: Remove TB & TD flags from ACS mask
>         V3 Change: Add comment regarding unique port id in stream ID
>         V2 Change: Move XGene ACS quirk to unique XGene function
> 
>  drivers/pci/quirks.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)


Reviewed-by: Alex Williamson <alex.williamson@redhat.com>

 
> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> index 085fb78..22343b3 100644
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -4120,6 +4120,18 @@ static int pci_quirk_cavium_acs(struct pci_dev *dev, u16 acs_flags)
>  	return acs_flags ? 0 : 1;
>  }
>  
> +static int pci_quirk_xgene_acs(struct pci_dev *dev, u16 acs_flags)
> +{
> +	/*
> +	 * XGene root matching this quirk do not allow peer-to-peer
> +	 * transactions with others, allowing masking out these bits as if they
> +	 * were unimplemented in the ACS capability.
> +	 */
> +	acs_flags &= ~(PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF);
> +
> +	return acs_flags ? 0 : 1;
> +}
> +
>  /*
>   * Many Intel PCH root ports do provide ACS-like features to disable peer
>   * transactions and validate bus numbers in requests, but do not provide an
> @@ -4368,6 +4380,8 @@ static int pci_quirk_mf_endpoint_acs(struct pci_dev *dev, u16 acs_flags)
>  	{ 0x10df, 0x720, pci_quirk_mf_endpoint_acs }, /* Emulex Skyhawk-R */
>  	/* Cavium ThunderX */
>  	{ PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs },
> +	/* APM XGene */
> +	{ PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs },
>  	{ 0 }
>  };
>  

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH V4] pci: quirk: Apply APM ACS quirk to XGene devices
  2017-08-01 23:15 ` Alex Williamson
@ 2017-08-02 18:57   ` Feng Kan
  0 siblings, 0 replies; 5+ messages in thread
From: Feng Kan @ 2017-08-02 18:57 UTC (permalink / raw)
  To: Alex Williamson, helgaas; +Cc: linux-kernel, linux-pci, Bjorn Helgaas

+ Adding Bjorn
Sorry for top post, we are looking to pull this into the latest REL7.4
release. Would like
the maintainer to take a look. Thanks

On Tue, Aug 1, 2017 at 4:15 PM, Alex Williamson
<alex.williamson@redhat.com> wrote:
> On Tue,  1 Aug 2017 16:08:13 -0700
> Feng Kan <fkan@apm.com> wrote:
>
>> The APM X-Gene PCIe root port does not support ACS at this point.
>> However, the hw provides isolation and source validation through
>> the SMMU. The stream ID generated by the PCIe ports contain both
>> the BDF as well as the port ID in its 3 most significant bits.
>> Turn on ACS but disable all the peer to peer features.
>>
>> Signed-off-by: Feng Kan <fkan@apm.com>
>> ---
>>       V4 Change: Remove TB & TD flags from ACS mask
>>         V3 Change: Add comment regarding unique port id in stream ID
>>         V2 Change: Move XGene ACS quirk to unique XGene function
>>
>>  drivers/pci/quirks.c | 14 ++++++++++++++
>>  1 file changed, 14 insertions(+)
>
>
> Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
>
>
>> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
>> index 085fb78..22343b3 100644
>> --- a/drivers/pci/quirks.c
>> +++ b/drivers/pci/quirks.c
>> @@ -4120,6 +4120,18 @@ static int pci_quirk_cavium_acs(struct pci_dev *dev, u16 acs_flags)
>>       return acs_flags ? 0 : 1;
>>  }
>>
>> +static int pci_quirk_xgene_acs(struct pci_dev *dev, u16 acs_flags)
>> +{
>> +     /*
>> +      * XGene root matching this quirk do not allow peer-to-peer
>> +      * transactions with others, allowing masking out these bits as if they
>> +      * were unimplemented in the ACS capability.
>> +      */
>> +     acs_flags &= ~(PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF);
>> +
>> +     return acs_flags ? 0 : 1;
>> +}
>> +
>>  /*
>>   * Many Intel PCH root ports do provide ACS-like features to disable peer
>>   * transactions and validate bus numbers in requests, but do not provide an
>> @@ -4368,6 +4380,8 @@ static int pci_quirk_mf_endpoint_acs(struct pci_dev *dev, u16 acs_flags)
>>       { 0x10df, 0x720, pci_quirk_mf_endpoint_acs }, /* Emulex Skyhawk-R */
>>       /* Cavium ThunderX */
>>       { PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs },
>> +     /* APM XGene */
>> +     { PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs },
>>       { 0 }
>>  };
>>
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH V4] pci: quirk: Apply APM ACS quirk to XGene devices
  2017-08-01 23:08 [PATCH V4] pci: quirk: Apply APM ACS quirk to XGene devices Feng Kan
  2017-08-01 23:15 ` Alex Williamson
@ 2017-08-10 17:45 ` Bjorn Helgaas
  2017-08-10 18:17   ` Tanmay Inamdar
  1 sibling, 1 reply; 5+ messages in thread
From: Bjorn Helgaas @ 2017-08-10 17:45 UTC (permalink / raw)
  To: Feng Kan
  Cc: linux-kernel, linux-pci, bhelgaas, alex.williamson, Tanmay Inamdar

[+cc Tanmay]

On Tue, Aug 01, 2017 at 04:08:13PM -0700, Feng Kan wrote:
> The APM X-Gene PCIe root port does not support ACS at this point.
> However, the hw provides isolation and source validation through
> the SMMU. The stream ID generated by the PCIe ports contain both
> the BDF as well as the port ID in its 3 most significant bits.
> Turn on ACS but disable all the peer to peer features.
> 
> Signed-off-by: Feng Kan <fkan@apm.com>

This should really have Tanmay's ack (cc'd).

Provisionally applied to pci/host-xgene for v4.14.

> ---
> 	V4 Change: Remove TB & TD flags from ACS mask
>         V3 Change: Add comment regarding unique port id in stream ID
>         V2 Change: Move XGene ACS quirk to unique XGene function
> 
>  drivers/pci/quirks.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> index 085fb78..22343b3 100644
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -4120,6 +4120,18 @@ static int pci_quirk_cavium_acs(struct pci_dev *dev, u16 acs_flags)
>  	return acs_flags ? 0 : 1;
>  }
>  
> +static int pci_quirk_xgene_acs(struct pci_dev *dev, u16 acs_flags)
> +{
> +	/*
> +	 * XGene root matching this quirk do not allow peer-to-peer
> +	 * transactions with others, allowing masking out these bits as if they
> +	 * were unimplemented in the ACS capability.
> +	 */
> +	acs_flags &= ~(PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF);
> +
> +	return acs_flags ? 0 : 1;
> +}
> +
>  /*
>   * Many Intel PCH root ports do provide ACS-like features to disable peer
>   * transactions and validate bus numbers in requests, but do not provide an
> @@ -4368,6 +4380,8 @@ static int pci_quirk_mf_endpoint_acs(struct pci_dev *dev, u16 acs_flags)
>  	{ 0x10df, 0x720, pci_quirk_mf_endpoint_acs }, /* Emulex Skyhawk-R */
>  	/* Cavium ThunderX */
>  	{ PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs },
> +	/* APM XGene */
> +	{ PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs },
>  	{ 0 }
>  };
>  
> -- 
> 1.8.3.1
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH V4] pci: quirk: Apply APM ACS quirk to XGene devices
  2017-08-10 17:45 ` Bjorn Helgaas
@ 2017-08-10 18:17   ` Tanmay Inamdar
  0 siblings, 0 replies; 5+ messages in thread
From: Tanmay Inamdar @ 2017-08-10 18:17 UTC (permalink / raw)
  To: Bjorn Helgaas, Feng Kan
  Cc: alex.williamson, bhelgaas, linux-kernel, linux-pci

[-- Attachment #1: Type: text/plain, Size: 2331 bytes --]

On Thu, Aug 10, 2017 at 10:45 AM Bjorn Helgaas <helgaas@kernel.org> wrote:

> [+cc Tanmay]
>
> On Tue, Aug 01, 2017 at 04:08:13PM -0700, Feng Kan wrote:
> > The APM X-Gene PCIe root port does not support ACS at this point.
> > However, the hw provides isolation and source validation through
> > the SMMU. The stream ID generated by the PCIe ports contain both
> > the BDF as well as the port ID in its 3 most significant bits.
> > Turn on ACS but disable all the peer to peer features.
> >
> > Signed-off-by: Feng Kan <fkan@apm.com>
>
> This should really have Tanmay's ack (cc'd).
>
> Provisionally applied to pci/host-xgene for v4.14.
>

Acked-by: Tanmay Inamdar <tinamdar@apm.com>


> > ---
> >       V4 Change: Remove TB & TD flags from ACS mask
> >         V3 Change: Add comment regarding unique port id in stream ID
> >         V2 Change: Move XGene ACS quirk to unique XGene function
> >
> >  drivers/pci/quirks.c | 14 ++++++++++++++
> >  1 file changed, 14 insertions(+)
> >
> > diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> > index 085fb78..22343b3 100644
> > --- a/drivers/pci/quirks.c
> > +++ b/drivers/pci/quirks.c
> > @@ -4120,6 +4120,18 @@ static int pci_quirk_cavium_acs(struct pci_dev
> *dev, u16 acs_flags)
> >       return acs_flags ? 0 : 1;
> >  }
> >
> > +static int pci_quirk_xgene_acs(struct pci_dev *dev, u16 acs_flags)
> > +{
> > +     /*
> > +      * XGene root matching this quirk do not allow peer-to-peer
> > +      * transactions with others, allowing masking out these bits as if
> they
> > +      * were unimplemented in the ACS capability.
> > +      */
> > +     acs_flags &= ~(PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF);
> > +
> > +     return acs_flags ? 0 : 1;
> > +}
> > +
> >  /*
> >   * Many Intel PCH root ports do provide ACS-like features to disable
> peer
> >   * transactions and validate bus numbers in requests, but do not
> provide an
> > @@ -4368,6 +4380,8 @@ static int pci_quirk_mf_endpoint_acs(struct
> pci_dev *dev, u16 acs_flags)
> >       { 0x10df, 0x720, pci_quirk_mf_endpoint_acs }, /* Emulex Skyhawk-R
> */
> >       /* Cavium ThunderX */
> >       { PCI_VENDOR_ID_CAVIUM, PCI_ANY_ID, pci_quirk_cavium_acs },
> > +     /* APM XGene */
> > +     { PCI_VENDOR_ID_AMCC, 0xE004, pci_quirk_xgene_acs },
> >       { 0 }
> >  };
> >
> > --
> > 1.8.3.1
> >
>

[-- Attachment #2: Type: text/html, Size: 3378 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-08-10 18:17 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-01 23:08 [PATCH V4] pci: quirk: Apply APM ACS quirk to XGene devices Feng Kan
2017-08-01 23:15 ` Alex Williamson
2017-08-02 18:57   ` Feng Kan
2017-08-10 17:45 ` Bjorn Helgaas
2017-08-10 18:17   ` Tanmay Inamdar

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.