All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Ensure pci transactions coming from PLX NTB are handled when  IOMMU is turned on
@ 2019-10-24 12:52 ` James Sewart via iommu
  0 siblings, 0 replies; 50+ messages in thread
From: James Sewart @ 2019-10-24 12:52 UTC (permalink / raw)
  To: iommu; +Cc: linux-kernel, Dmitry Safonov

The PLX PEX NTB forwards DMA transactions using Requester ID's that don't exist as
PCI devices. The devfn for a transaction is used as an index into a lookup table
storing the origin of a transaction on the other side of the bridge.

This patch aliases all possible devfn's to the NTB device so that any transaction
coming in is governed by the mappings for the NTB.

Signed-Off-By: James Sewart <jamessewart@arista.com>
---
 drivers/pci/quirks.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 320255e5e8f8..647f546e427f 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -5315,6 +5315,28 @@ SWITCHTEC_QUIRK(0x8574);  /* PFXI 64XG3 */
 SWITCHTEC_QUIRK(0x8575);  /* PFXI 80XG3 */
 SWITCHTEC_QUIRK(0x8576);  /* PFXI 96XG3 */
 
+/*
+ * PLX NTB uses devfn proxy IDs to move TLPs between NT endpoints. These IDs
+ * are used to forward responses to the originator on the other side of the
+ * NTB. Alias all possible IDs to the NTB to permit access when the IOMMU is
+ * turned on.
+ */
+static void quirk_PLX_NTB_dma_alias(struct pci_dev *pdev)
+{
+	if (!pdev->dma_alias_mask)
+		pdev->dma_alias_mask = kcalloc(BITS_TO_LONGS(U8_MAX),
+					      sizeof(long), GFP_KERNEL);
+	if (!pdev->dma_alias_mask) {
+		dev_warn(&pdev->dev, "Unable to allocate DMA alias mask\n");
+		return;
+	}
+
+	// PLX NTB may use all 256 devfns
+	memset(pdev->dma_alias_mask, U8_MAX, (U8_MAX+1)/BITS_PER_BYTE);
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_PLX, 0x87b0, quirk_PLX_NTB_dma_alias);
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_PLX, 0x87b1, quirk_PLX_NTB_dma_alias);
+
 /*
  * On Lenovo Thinkpad P50 SKUs with a Nvidia Quadro M1000M, the BIOS does
  * not always reset the secondary Nvidia GPU between reboots if the system
-- 
2.19.1



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

end of thread, other threads:[~2019-12-02 17:04 UTC | newest]

Thread overview: 50+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-24 12:52 [PATCH] Ensure pci transactions coming from PLX NTB are handled when IOMMU is turned on James Sewart
2019-10-24 12:52 ` James Sewart via iommu
2019-11-05 12:17 ` James Sewart
2019-11-05 12:17   ` James Sewart via iommu
2019-11-20 17:48   ` Dmitry Safonov
2019-11-20 17:48     ` Dmitry Safonov
2019-11-20 19:30     ` Logan Gunthorpe
2019-11-20 19:30       ` Logan Gunthorpe
2019-11-20 19:49       ` Bjorn Helgaas
2019-11-20 19:49         ` Bjorn Helgaas
2019-11-20 19:32     ` Bjorn Helgaas
2019-11-20 19:32       ` Bjorn Helgaas
2019-11-26 17:03       ` [PATCH v2] PCI: Add DMA alias quirk for PLX PEX NTB James Sewart
2019-11-26 17:03         ` James Sewart via iommu
2019-11-26 17:06         ` Logan Gunthorpe
2019-11-26 17:06           ` Logan Gunthorpe
2019-11-26 17:36           ` [PATCH v3 1/2] PCI: Add helper pci_add_dma_alias_range James Sewart
2019-11-26 17:36             ` James Sewart via iommu
2019-11-26 17:37             ` [PATCH v3 2/2] PCI: Add DMA alias quirk for PLX PEX NTB James Sewart
2019-11-26 17:37               ` James Sewart via iommu
2019-11-26 17:38         ` [PATCH v2] " Christoph Hellwig
2019-11-26 17:38           ` Christoph Hellwig
2019-11-27 13:27           ` [PATCH v3 1/2] PCI: Add parameter nr_devfns to pci_add_dma_alias James Sewart
2019-11-27 13:27             ` James Sewart via iommu
2019-11-27 13:28             ` [PATCH v3 2/2] PCI: Add DMA alias quirk for PLX PEX NTB James Sewart
2019-11-27 13:28               ` James Sewart via iommu
2019-11-27 17:38             ` [PATCH v3 1/2] PCI: Add parameter nr_devfns to pci_add_dma_alias Logan Gunthorpe
2019-11-27 17:38               ` Logan Gunthorpe
2019-11-29 12:49               ` [PATCH v4 " James Sewart
2019-11-29 12:49                 ` James Sewart via iommu
2019-11-29 12:49                 ` [PATCH v4 2/2] PCI: Add DMA alias quirk for PLX PEX NTB James Sewart
2019-11-29 12:49                   ` James Sewart via iommu
2019-11-29 16:50                 ` [PATCH v4 1/2] PCI: Add parameter nr_devfns to pci_add_dma_alias Logan Gunthorpe
2019-11-29 16:50                   ` Logan Gunthorpe
2019-11-29 17:19                   ` James Sewart
2019-11-29 17:19                     ` James Sewart via iommu
2019-11-29 17:26                     ` Logan Gunthorpe
2019-11-29 17:26                       ` Logan Gunthorpe
2019-11-29 17:56                       ` [PATCH v5 1/3] PCI: Fix off by one in dma_alias_mask allocation size James Sewart
2019-11-29 17:56                         ` James Sewart via iommu
2019-11-29 17:56                         ` [PATCH v5 2/3] PCI: Add parameter nr_devfns to pci_add_dma_alias James Sewart
2019-11-29 17:56                           ` James Sewart via iommu
2019-11-29 17:57                           ` [PATCH v5 3/3] PCI: Add DMA alias quirk for PLX PEX NTB James Sewart
2019-11-29 17:57                             ` James Sewart via iommu
2019-12-02 17:03                           ` [PATCH v5 2/3] PCI: Add parameter nr_devfns to pci_add_dma_alias Christoph Hellwig
2019-12-02 17:03                             ` Christoph Hellwig
2019-11-29 17:58                         ` [PATCH v5 1/3] PCI: Fix off by one in dma_alias_mask allocation size Logan Gunthorpe
2019-11-29 17:58                           ` Logan Gunthorpe
2019-12-02 17:03                         ` Christoph Hellwig
2019-12-02 17:03                           ` Christoph Hellwig

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.