Netdev Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Dongdong Liu <liudongdong3@huawei.com>
To: <helgaas@kernel.org>, <hch@infradead.org>, <kw@linux.com>,
<logang@deltatee.com>, <leon@kernel.org>,
<linux-pci@vger.kernel.org>, <rajur@chelsio.com>,
<hverkuil-cisco@xs4all.nl>
Cc: <linux-media@vger.kernel.org>, <netdev@vger.kernel.org>
Subject: [PATCH V7 4/9] PCI: Enable 10-Bit Tag support for PCIe Endpoint devices
Date: Wed, 4 Aug 2021 21:47:03 +0800 [thread overview]
Message-ID: <1628084828-119542-5-git-send-email-liudongdong3@huawei.com> (raw)
In-Reply-To: <1628084828-119542-1-git-send-email-liudongdong3@huawei.com>
10-Bit Tag capability, introduced in PCIe-4.0 increases the total Tag
field size from 8 bits to 10 bits.
PCIe spec 5.0 r1.0 section 2.2.6.2 "Considerations for Implementing
10-Bit Tag Capabilities" Implementation Note.
For platforms where the RC supports 10-Bit Tag Completer capability,
it is highly recommended for platform firmware or operating software
that configures PCIe hierarchies to Set the 10-Bit Tag Requester Enable
bit automatically in Endpoints with 10-Bit Tag Requester capability. This
enables the important class of 10-Bit Tag capable adapters that send
Memory Read Requests only to host memory.
Signed-off-by: Dongdong Liu <liudongdong3@huawei.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
---
drivers/pci/probe.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++-
include/linux/pci.h | 2 ++
2 files changed, 48 insertions(+), 1 deletion(-)
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index c83245b..3da7baa 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -2029,10 +2029,42 @@ static void pci_configure_mps(struct pci_dev *dev)
p_mps, mps, mpss);
}
+static void pci_configure_10bit_tags(struct pci_dev *dev)
+{
+ struct pci_dev *bridge;
+
+ if (!(dev->pcie_devcap2 & PCI_EXP_DEVCAP2_10BIT_TAG_COMP))
+ return;
+
+ if (pci_pcie_type(dev) == PCI_EXP_TYPE_ROOT_PORT) {
+ dev->ext_10bit_tag = 1;
+ return;
+ }
+
+ bridge = pci_upstream_bridge(dev);
+ if (bridge && bridge->ext_10bit_tag)
+ dev->ext_10bit_tag = 1;
+
+ /*
+ * 10-Bit Tag Requester Enable in Device Control 2 Register is RsvdP
+ * for VF.
+ */
+ if (dev->is_virtfn)
+ return;
+
+ if (pci_pcie_type(dev) == PCI_EXP_TYPE_ENDPOINT &&
+ dev->ext_10bit_tag == 1 &&
+ (dev->pcie_devcap2 & PCI_EXP_DEVCAP2_10BIT_TAG_REQ)) {
+ pci_dbg(dev, "enabling 10-Bit Tag Requester\n");
+ pcie_capability_set_word(dev, PCI_EXP_DEVCTL2,
+ PCI_EXP_DEVCTL2_10BIT_TAG_REQ_EN);
+ }
+}
+
int pci_configure_extended_tags(struct pci_dev *dev, void *ign)
{
struct pci_host_bridge *host;
- u16 ctl;
+ u16 ctl, ctl2;
int ret;
if (!pci_is_pcie(dev))
@@ -2045,6 +2077,10 @@ int pci_configure_extended_tags(struct pci_dev *dev, void *ign)
if (ret)
return 0;
+ ret = pcie_capability_read_word(dev, PCI_EXP_DEVCTL2, &ctl2);
+ if (ret)
+ return 0;
+
host = pci_find_host_bridge(dev->bus);
if (!host)
return 0;
@@ -2059,6 +2095,12 @@ int pci_configure_extended_tags(struct pci_dev *dev, void *ign)
pcie_capability_clear_word(dev, PCI_EXP_DEVCTL,
PCI_EXP_DEVCTL_EXT_TAG);
}
+
+ if (ctl2 & PCI_EXP_DEVCTL2_10BIT_TAG_REQ_EN) {
+ pci_info(dev, "disabling 10-Bit Tags\n");
+ pcie_capability_clear_word(dev, PCI_EXP_DEVCTL2,
+ PCI_EXP_DEVCTL2_10BIT_TAG_REQ_EN);
+ }
return 0;
}
@@ -2067,6 +2109,9 @@ int pci_configure_extended_tags(struct pci_dev *dev, void *ign)
pcie_capability_set_word(dev, PCI_EXP_DEVCTL,
PCI_EXP_DEVCTL_EXT_TAG);
}
+
+ pci_configure_10bit_tags(dev);
+
return 0;
}
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 9aab67f..af6cb53 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -393,6 +393,8 @@ struct pci_dev {
#endif
unsigned int eetlp_prefix_path:1; /* End-to-End TLP Prefix */
+ unsigned int ext_10bit_tag:1; /* 10-Bit Tag Completer Supported
+ from root to here */
pci_channel_state_t error_state; /* Current connectivity state */
struct device dev; /* Generic device interface */
--
2.7.4
next prev parent reply other threads:[~2021-08-04 13:49 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-04 13:46 [PATCH V7 0/9] PCI: Enable 10-Bit tag support for PCIe devices Dongdong Liu
2021-08-04 13:47 ` [PATCH V7 1/9] PCI: Use cached Device Capabilities Register Dongdong Liu
2021-08-04 13:47 ` [PATCH V7 2/9] PCI: Use cached Device Capabilities 2 Register Dongdong Liu
2021-08-04 13:47 ` [PATCH V7 3/9] PCI: Add 10-Bit Tag register definitions Dongdong Liu
2021-08-04 13:47 ` Dongdong Liu [this message]
2021-08-04 23:17 ` [PATCH V7 4/9] PCI: Enable 10-Bit Tag support for PCIe Endpoint devices Bjorn Helgaas
2021-08-05 7:47 ` Dongdong Liu
2021-08-05 19:54 ` Bjorn Helgaas
2021-08-07 6:19 ` Dongdong Liu
2021-08-04 13:47 ` [PATCH V7 5/9] PCI/IOV: Enable 10-Bit tag support for PCIe VF devices Dongdong Liu
2021-08-04 23:29 ` Bjorn Helgaas
2021-08-05 8:03 ` Dongdong Liu
2021-08-06 22:59 ` Bjorn Helgaas
2021-08-07 7:46 ` Dongdong Liu
2021-08-04 13:47 ` [PATCH V7 6/9] PCI: Enable 10-Bit Tag support for PCIe RP devices Dongdong Liu
2021-08-04 23:38 ` Bjorn Helgaas
2021-08-05 8:25 ` Dongdong Liu
2021-08-09 17:26 ` Bjorn Helgaas
2021-08-10 11:59 ` Dongdong Liu
2021-08-04 13:47 ` [PATCH V7 7/9] PCI/sysfs: Add a 10-Bit Tag sysfs file Dongdong Liu
2021-08-04 15:51 ` Logan Gunthorpe
2021-08-05 13:14 ` Dongdong Liu
2021-08-05 13:53 ` Leon Romanovsky
2021-08-05 15:36 ` Logan Gunthorpe
2021-08-04 23:49 ` Bjorn Helgaas
2021-08-05 8:37 ` Dongdong Liu
2021-08-05 15:31 ` Bjorn Helgaas
2021-08-07 7:01 ` Dongdong Liu
2021-08-09 17:37 ` Bjorn Helgaas
2021-08-10 12:16 ` Dongdong Liu
2021-08-04 23:52 ` Bjorn Helgaas
2021-08-05 8:38 ` Dongdong Liu
2021-08-04 13:47 ` [PATCH V7 8/9] PCI/IOV: Add 10-Bit Tag sysfs files for VF devices Dongdong Liu
2021-08-05 0:05 ` Bjorn Helgaas
2021-08-05 8:47 ` Dongdong Liu
2021-08-05 9:39 ` Dongdong Liu
2021-08-04 13:47 ` [PATCH V7 9/9] PCI/P2PDMA: Add a 10-Bit Tag check in P2PDMA Dongdong Liu
2021-08-04 15:56 ` Logan Gunthorpe
2021-08-05 8:49 ` Dongdong Liu
2021-08-05 18:12 ` Bjorn Helgaas
2021-08-07 7:11 ` Dongdong Liu
2021-08-09 17:31 ` Bjorn Helgaas
2021-08-10 12:31 ` Dongdong Liu
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=1628084828-119542-5-git-send-email-liudongdong3@huawei.com \
--to=liudongdong3@huawei.com \
--cc=hch@infradead.org \
--cc=helgaas@kernel.org \
--cc=hverkuil-cisco@xs4all.nl \
--cc=kw@linux.com \
--cc=leon@kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=logang@deltatee.com \
--cc=netdev@vger.kernel.org \
--cc=rajur@chelsio.com \
--subject='Re: [PATCH V7 4/9] PCI: Enable 10-Bit Tag support for PCIe Endpoint devices' \
/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
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).