diff mbox series

[v10,3/5] PCI: Disable Relaxed Ordering Attributes for AMD A1100

Message ID 1502725499-11276-4-git-send-email-dingtianhong@huawei.com
State Superseded
Headers show
Series Add new PCI_DEV_FLAGS_NO_RELAXED_ORDERING flag | expand

Commit Message

Ding Tianhong Aug. 14, 2017, 3:44 p.m. UTC
Casey reported that the AMD ARM A1100 SoC has a bug in its PCIe
Root Port where Upstream Transaction Layer Packets with the Relaxed
Ordering Attribute clear are allowed to bypass earlier TLPs with
Relaxed Ordering set, it would cause Data Corruption, so we need
to disable Relaxed Ordering Attribute when Upstream TLPs to the
Root Port.

Signed-off-by: Casey Leedom <leedom@chelsio.com>

Signed-off-by: Ding Tianhong <dingtianhong@huawei.com>

Acked-by: Alexander Duyck <alexander.h.duyck@intel.com>

Acked-by: Ashok Raj <ashok.raj@intel.com>

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

-- 
1.8.3.1

Comments

Raj, Ashok Aug. 14, 2017, 5:19 p.m. UTC | #1
On Mon, Aug 14, 2017 at 11:44:57PM +0800, Ding Tianhong wrote:
> Casey reported that the AMD ARM A1100 SoC has a bug in its PCIe

> Root Port where Upstream Transaction Layer Packets with the Relaxed

> Ordering Attribute clear are allowed to bypass earlier TLPs with

> Relaxed Ordering set, it would cause Data Corruption, so we need

> to disable Relaxed Ordering Attribute when Upstream TLPs to the

> Root Port.

> 

> Signed-off-by: Casey Leedom <leedom@chelsio.com>

> Signed-off-by: Ding Tianhong <dingtianhong@huawei.com>

> Acked-by: Alexander Duyck <alexander.h.duyck@intel.com>

> Acked-by: Ashok Raj <ashok.raj@intel.com>


I can't ack this patch :-).. must be someone from AMD. Please remove my
signature from this.

> ---

>  drivers/pci/quirks.c | 16 ++++++++++++++++

>  1 file changed, 16 insertions(+)

> 

> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c

> index 1272f7e..1407604 100644

> --- a/drivers/pci/quirks.c

> +++ b/drivers/pci/quirks.c

> @@ -4089,6 +4089,22 @@ static void quirk_relaxedordering_disable(struct pci_dev *dev)

>  			      quirk_relaxedordering_disable);

>  

>  /*

> + * The AMD ARM A1100 (AKA "SEATTLE") SoC has a bug in its PCIe Root Complex

> + * where Upstream Transaction Layer Packets with the Relaxed Ordering

> + * Attribute clear are allowed to bypass earlier TLPs with Relaxed Ordering

> + * set.  This is a violation of the PCIe 3.0 Transaction Ordering Rules

> + * outlined in Section 2.4.1 (PCI Express(r) Base Specification Revision 3.0

> + * November 10, 2010).  As a result, on this platform we can't use Relaxed

> + * Ordering for Upstream TLPs.

> + */

> +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_AMD, 0x1a00, PCI_CLASS_NOT_DEFINED, 8,

> +			      quirk_relaxedordering_disable);

> +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_AMD, 0x1a01, PCI_CLASS_NOT_DEFINED, 8,

> +			      quirk_relaxedordering_disable);

> +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_AMD, 0x1a02, PCI_CLASS_NOT_DEFINED, 8,

> +			      quirk_relaxedordering_disable);

> +

> +/*

>   * Per PCIe r3.0, sec 2.2.9, "Completion headers must supply the same

>   * values for the Attribute as were supplied in the header of the

>   * corresponding Request, except as explicitly allowed when IDO is used."

> -- 

> 1.8.3.1

> 

>
Casey Leedom Aug. 14, 2017, 6:07 p.m. UTC | #2
| From: Raj, Ashok <ashok.raj@intel.com>
| Sent: Monday, August 14, 2017 10:19 AM
|     
| On Mon, Aug 14, 2017 at 11:44:57PM +0800, Ding Tianhong wrote:
| > Casey reported that the AMD ARM A1100 SoC has a bug in its PCIe
| > Root Port where Upstream Transaction Layer Packets with the Relaxed
| > Ordering Attribute clear are allowed to bypass earlier TLPs with
| > Relaxed Ordering set, it would cause Data Corruption, so we need
| > to disable Relaxed Ordering Attribute when Upstream TLPs to the
| > Root Port.
| > 
| > Signed-off-by: Casey Leedom <leedom@chelsio.com>
| > Signed-off-by: Ding Tianhong <dingtianhong@huawei.com>
| > Acked-by: Alexander Duyck <alexander.h.duyck@intel.com>
| > Acked-by: Ashok Raj <ashok.raj@intel.com>
| 
| I can't ack this patch :-).. must be someone from AMD. Please remove my
| signature from this.

  You can go ahead and leave my name on since I'm the person who found and diagnosed the problem (with help from others inside Chelsio).

  If anyone on the Linux PCI List knows anyone at AMD who'd be willing to respond it would be great, but as I noted earlier, I think that AMD has effectively abandoned the A1100 ("Seattle") ARM SoC, so I doubt if we'll get anyone from AMD to even comment now.

Casey
Ding Tianhong Aug. 15, 2017, 1:40 a.m. UTC | #3
On 2017/8/15 1:19, Raj, Ashok wrote:
> On Mon, Aug 14, 2017 at 11:44:57PM +0800, Ding Tianhong wrote:

>> Casey reported that the AMD ARM A1100 SoC has a bug in its PCIe

>> Root Port where Upstream Transaction Layer Packets with the Relaxed

>> Ordering Attribute clear are allowed to bypass earlier TLPs with

>> Relaxed Ordering set, it would cause Data Corruption, so we need

>> to disable Relaxed Ordering Attribute when Upstream TLPs to the

>> Root Port.

>>

>> Signed-off-by: Casey Leedom <leedom@chelsio.com>

>> Signed-off-by: Ding Tianhong <dingtianhong@huawei.com>

>> Acked-by: Alexander Duyck <alexander.h.duyck@intel.com>

>> Acked-by: Ashok Raj <ashok.raj@intel.com>

> 

> I can't ack this patch :-).. must be someone from AMD. Please remove my

> signature from this.

> 


Sorry for funny mistake :)  I will fix it.

Ding

>> ---

>>  drivers/pci/quirks.c | 16 ++++++++++++++++

>>  1 file changed, 16 insertions(+)

>>

>> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c

>> index 1272f7e..1407604 100644

>> --- a/drivers/pci/quirks.c

>> +++ b/drivers/pci/quirks.c

>> @@ -4089,6 +4089,22 @@ static void quirk_relaxedordering_disable(struct pci_dev *dev)

>>  			      quirk_relaxedordering_disable);

>>  

>>  /*

>> + * The AMD ARM A1100 (AKA "SEATTLE") SoC has a bug in its PCIe Root Complex

>> + * where Upstream Transaction Layer Packets with the Relaxed Ordering

>> + * Attribute clear are allowed to bypass earlier TLPs with Relaxed Ordering

>> + * set.  This is a violation of the PCIe 3.0 Transaction Ordering Rules

>> + * outlined in Section 2.4.1 (PCI Express(r) Base Specification Revision 3.0

>> + * November 10, 2010).  As a result, on this platform we can't use Relaxed

>> + * Ordering for Upstream TLPs.

>> + */

>> +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_AMD, 0x1a00, PCI_CLASS_NOT_DEFINED, 8,

>> +			      quirk_relaxedordering_disable);

>> +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_AMD, 0x1a01, PCI_CLASS_NOT_DEFINED, 8,

>> +			      quirk_relaxedordering_disable);

>> +DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_AMD, 0x1a02, PCI_CLASS_NOT_DEFINED, 8,

>> +			      quirk_relaxedordering_disable);

>> +

>> +/*

>>   * Per PCIe r3.0, sec 2.2.9, "Completion headers must supply the same

>>   * values for the Attribute as were supplied in the header of the

>>   * corresponding Request, except as explicitly allowed when IDO is used."

>> -- 

>> 1.8.3.1

>>

>>

> 

> .

>
diff mbox series

Patch

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 1272f7e..1407604 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -4089,6 +4089,22 @@  static void quirk_relaxedordering_disable(struct pci_dev *dev)
 			      quirk_relaxedordering_disable);
 
 /*
+ * The AMD ARM A1100 (AKA "SEATTLE") SoC has a bug in its PCIe Root Complex
+ * where Upstream Transaction Layer Packets with the Relaxed Ordering
+ * Attribute clear are allowed to bypass earlier TLPs with Relaxed Ordering
+ * set.  This is a violation of the PCIe 3.0 Transaction Ordering Rules
+ * outlined in Section 2.4.1 (PCI Express(r) Base Specification Revision 3.0
+ * November 10, 2010).  As a result, on this platform we can't use Relaxed
+ * Ordering for Upstream TLPs.
+ */
+DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_AMD, 0x1a00, PCI_CLASS_NOT_DEFINED, 8,
+			      quirk_relaxedordering_disable);
+DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_AMD, 0x1a01, PCI_CLASS_NOT_DEFINED, 8,
+			      quirk_relaxedordering_disable);
+DECLARE_PCI_FIXUP_CLASS_EARLY(PCI_VENDOR_ID_AMD, 0x1a02, PCI_CLASS_NOT_DEFINED, 8,
+			      quirk_relaxedordering_disable);
+
+/*
  * Per PCIe r3.0, sec 2.2.9, "Completion headers must supply the same
  * values for the Attribute as were supplied in the header of the
  * corresponding Request, except as explicitly allowed when IDO is used."