All of lore.kernel.org
 help / color / mirror / Atom feed
From: Raymond Pang <RaymondPang-oc@zhaoxin.com>
To: <bhelgaas@google.com>, <linux-pci@vger.kernel.org>
Cc: <TonyWWang-oc@zhaoxin.com>, <linux-kernel@vger.kernel.org>
Subject: [PATCH 3/3] PCI: Add ACS quirk for Root/Downstream Ports
Date: Fri, 27 Mar 2020 17:11:48 +0800	[thread overview]
Message-ID: <20200327091148.5190-4-RaymondPang-oc@zhaoxin.com> (raw)
In-Reply-To: <20200327091148.5190-1-RaymondPang-oc@zhaoxin.com>

Many Zhaoxin Root Ports and Switch Downstream Ports do provide ACS-like
capability but have no ACS Capability Structure. Peer-to-Peer
transactions could be blocked between these ports, so add quirk
to make devices behind them could be assigned to different IOMMU group.

Signed-off-by: Raymond Pang <RaymondPang-oc@zhaoxin.com>
---
 drivers/pci/quirks.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 3f06496a3d4c..49cf6e943f16 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -4464,6 +4464,30 @@ static int pci_quirk_xgene_acs(struct pci_dev *dev, u16 acs_flags)
 	return pci_acs_ctrl_enabled(acs_flags,
 		PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF);
 }
+
+/*
+ * Many Zhaoxin Root Ports and Switch Downstream Ports have no ACS capability.
+ * But the implementation could block peer-to-peer transactions between them
+ * and provide ACS-like functionality.
+ */
+static int  pci_quirk_zhaoxin_pcie_ports_acs(struct pci_dev *dev, u16 acs_flags)
+{
+
+	if (!pci_is_pcie(dev) ||
+	    ((pci_pcie_type(dev) != PCI_EXP_TYPE_ROOT_PORT) &&
+	     (pci_pcie_type(dev) != PCI_EXP_TYPE_DOWNSTREAM)))
+		return -ENOTTY;
+
+	switch (dev->device) {
+	case 0x0710 ... 0x071e:
+	case 0x0721:
+	case 0x0723 ... 0x0732:
+		return pci_acs_ctrl_enabled(acs_flags,
+			PCI_ACS_SV | PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_UF);
+	}
+
+	return false;
+}
 
 /*
  * Many Intel PCH Root Ports do provide ACS-like features to disable peer
@@ -4771,6 +4795,8 @@ static const struct pci_dev_acs_enabled {
 	{ PCI_VENDOR_ID_ZHAOXIN, 0x3038, pci_quirk_mf_endpoint_acs },
 	{ PCI_VENDOR_ID_ZHAOXIN, 0x3104, pci_quirk_mf_endpoint_acs },
 	{ PCI_VENDOR_ID_ZHAOXIN, 0x9083, pci_quirk_mf_endpoint_acs },
+	/* Zhaoxin Root/Downstream Ports */
+	{ PCI_VENDOR_ID_ZHAOXIN, PCI_ANY_ID, pci_quirk_zhaoxin_pcie_ports_acs },
 	{ 0 }
 };
 
-- 
2.26.0


  parent reply	other threads:[~2020-03-27  9:27 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-27  9:11 [PATCH 0/3] Add ACS quirk for Zhaoxin Raymond Pang
2020-03-27  9:11 ` [PATCH 1/3] PCI: Add Zhaoxin Vendor ID Raymond Pang
2020-03-27  9:11 ` [PATCH 2/3] PCI: Add ACS quirk for Zhaoxin's multi-function devices Raymond Pang
2020-03-27  9:11 ` Raymond Pang [this message]
2020-03-28 21:59 ` [PATCH 0/3] Add ACS quirk for Zhaoxin Bjorn Helgaas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200327091148.5190-4-RaymondPang-oc@zhaoxin.com \
    --to=raymondpang-oc@zhaoxin.com \
    --cc=TonyWWang-oc@zhaoxin.com \
    --cc=bhelgaas@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.