git: 1acf24a044aa - main - Implement pci_get_relaxed_ordering_enabled() helper function.

Hans Petter Selasky hselasky at FreeBSD.org
Wed Mar 17 12:50:23 UTC 2021


The branch main has been updated by hselasky:

URL: https://cgit.FreeBSD.org/src/commit/?id=1acf24a044aaa0391c61af4abe7e018c3bf8a37c

commit 1acf24a044aaa0391c61af4abe7e018c3bf8a37c
Author:     Hans Petter Selasky <hselasky at FreeBSD.org>
AuthorDate: 2021-03-16 15:06:42 +0000
Commit:     Hans Petter Selasky <hselasky at FreeBSD.org>
CommitDate: 2021-03-17 12:48:04 +0000

    Implement pci_get_relaxed_ordering_enabled() helper function.
    
    Discussed with: kib@
    MFC after:      1 week
    Sponsored by:   Mellanox Technologies // NVIDIA Networking
---
 sys/dev/pci/pci.c    | 15 +++++++++++++++
 sys/dev/pci/pcivar.h |  1 +
 2 files changed, 16 insertions(+)

diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index 1ca128a48ad0..d85ce5baa7bc 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -2182,6 +2182,21 @@ pci_ht_map_msi(device_t dev, uint64_t addr)
 	}
 }
 
+int
+pci_get_relaxed_ordering_enabled(device_t dev)
+{
+	struct pci_devinfo *dinfo = device_get_ivars(dev);
+	int cap;
+	uint16_t val;
+
+	cap = dinfo->cfg.pcie.pcie_location;
+	if (cap == 0)
+		return (0);
+	val = pci_read_config(dev, cap + PCIER_DEVICE_CTL, 2);
+	val &= PCIEM_CTL_RELAXED_ORD_ENABLE;
+	return (val != 0);
+}
+
 int
 pci_get_max_payload(device_t dev)
 {
diff --git a/sys/dev/pci/pcivar.h b/sys/dev/pci/pcivar.h
index 0f04ca8f623c..74aa704635f7 100644
--- a/sys/dev/pci/pcivar.h
+++ b/sys/dev/pci/pcivar.h
@@ -677,6 +677,7 @@ int	pci_msix_device_blacklisted(device_t dev);
 void	pci_ht_map_msi(device_t dev, uint64_t addr);
 
 device_t pci_find_pcie_root_port(device_t dev);
+int	pci_get_relaxed_ordering_enabled(device_t dev);
 int	pci_get_max_payload(device_t dev);
 int	pci_get_max_read_req(device_t dev);
 void	pci_restore_state(device_t dev);


More information about the dev-commits-src-main mailing list