| From 527bffa07f1604d5963e8f6ef53640662b539aaa Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 10 Dec 2019 16:25:40 -0600 |
| Subject: PCI: Add DMA alias quirk for PLX PEX NTB |
| |
| From: James Sewart <jamessewart@arista.com> |
| |
| [ Upstream commit 7b90dfc4873b87c468cc6046538f46a531c1d785 ] |
| |
| The PLX PEX NTB forwards DMA transactions using Requester IDs 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. |
| |
| Alias all possible devfns 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> |
| Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> |
| Reviewed-by: Logan Gunthorpe <logang@deltatee.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/pci/quirks.c | 15 +++++++++++++++ |
| 1 file changed, 15 insertions(+) |
| |
| diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c |
| index 67a9ad3734d18..2fdceaab73072 100644 |
| --- a/drivers/pci/quirks.c |
| +++ b/drivers/pci/quirks.c |
| @@ -5352,6 +5352,21 @@ SWITCHTEC_QUIRK(0x8574); /* PFXI 64XG3 */ |
| SWITCHTEC_QUIRK(0x8575); /* PFXI 80XG3 */ |
| SWITCHTEC_QUIRK(0x8576); /* PFXI 96XG3 */ |
| |
| +/* |
| + * The 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) |
| +{ |
| + pci_info(pdev, "Setting PLX NTB proxy ID aliases\n"); |
| + /* PLX NTB may use all 256 devfns */ |
| + pci_add_dma_alias(pdev, 0, 256); |
| +} |
| +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.20.1 |
| |