From: Bjorn Helgaas <helgaas@kernel.org>
To: Jayachandran C <jchandra@broadcom.com>
Cc: Alex Williamson <alex.williamson@redhat.com>,
iommu@lists.linux-foundation.org, linux-pci@vger.kernel.org
Subject: Re: [PATCH v2 2/2] PCI: Handle Broadcom Vulcan DMA alias calculation quirk
Date: Sat, 11 Jun 2016 12:24:57 -0500 [thread overview]
Message-ID: <20160611172457.GK16462@localhost> (raw)
In-Reply-To: <1462700001-30086-2-git-send-email-jchandra@broadcom.com>
On Sun, May 08, 2016 at 03:03:21PM +0530, Jayachandran C wrote:
> The Broadcom Vulcan PCI topology is slightly unusual, for a multi-node
> system, it looks like:
>
> [bus 0]
> |
> +--[node 0 PCI bridge 0.0.0]
> | |
> | [bus 1]
> | +---[SoC PCI devices 1.4.x, 1.5.x] ........
> | +---[Glue bridges 1.a.x, 1.b.x] \
> | | .....{node 0 GIC ITS}
> | | /
> | +----[SoC PCIe controller root ports]
> | | \...... {SMMUv3 0..3}
> | |
> | +---- [external PCI devices]
> +- [node 1 PCI bridge 0.0.1]
> | |
> | [bus n - similar to bus 1 above]
> ...
>
> The for_each_dma_alias call for external PCI devices should not go
> beyond the PCIe controllers where the SMMU and ITS is associated, going
> further above to the glue bridges or the node bridges will find aliases
> which are not valid. For internal devices, the association is at the
> node level bridge and the alias search should not go further.
I like the line of reasoning that we should not iterate higher in the
hierarchy than where the translation hardware is attached. That seems
like a reasonable thing in general, not just for this hardware.
Is there some generic way to learn where the translation hardware is
attached? If there is, we could make pci_for_each_dma_alias() use
that information, and maybe we could solve the problem for other
systems as well as for Vulcan.
> To handle this quirk, we mark the SoC PCIe bridges and node PCI bridge
> with flag PCI_DEV_FLAGS_DMA_ALIAS_ROOT so that the alias and RID
> calculations are correct.
>
> Signed-off-by: Jayachandran C <jchandra@broadcom.com>
> ---
> drivers/pci/quirks.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
> index 8e67802..62664b5 100644
> --- a/drivers/pci/quirks.c
> +++ b/drivers/pci/quirks.c
> @@ -3734,6 +3734,20 @@ DECLARE_PCI_FIXUP_HEADER(0x1283, 0x8892, quirk_use_pcie_bridge_dma_alias);
> DECLARE_PCI_FIXUP_HEADER(0x8086, 0x244e, quirk_use_pcie_bridge_dma_alias);
>
> /*
> + * The IOMMU and interrupt controller of Broadcom vulcan are associated
> + * not at the root bus, but at a bridge below. The DMA alias search should
> + * not go above the bridge at which the association exists.
> + */
> +static void quirk_bridge_brcm_vulcan_pcie_root(struct pci_dev *pdev)
> +{
> + pdev->dev_flags |= PCI_DEV_FLAGS_DMA_ALIAS_ROOT;
> +}
> +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9000,
> + quirk_bridge_brcm_vulcan_pcie_root);
> +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_BROADCOM, 0x9084,
> + quirk_bridge_brcm_vulcan_pcie_root);
> +
> +/*
> * Intersil/Techwell TW686[4589]-based video capture cards have an empty (zero)
> * class code. Fix it.
> */
> --
> 1.9.1
>
next prev parent reply other threads:[~2016-06-11 17:25 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-08 9:33 [PATCH v2 1/2] PCI: Add PCI device flag PCI_DEV_FLAGS_DMA_ALIAS_ROOT Jayachandran C
2016-05-08 9:33 ` [PATCH v2 2/2] PCI: Handle Broadcom Vulcan DMA alias calculation quirk Jayachandran C
2016-06-11 17:24 ` Bjorn Helgaas [this message]
2016-06-14 16:10 ` Jayachandran C
2016-05-09 10:10 ` [PATCH v2 1/2] PCI: Add PCI device flag PCI_DEV_FLAGS_DMA_ALIAS_ROOT Robin Murphy
2016-05-11 6:28 ` Jayachandran C
2016-05-11 14:26 ` Robin Murphy
2016-05-17 11:55 ` Jayachandran C
2016-06-23 5:01 ` Jon Masters
2016-06-23 12:04 ` Robin Murphy
2016-06-23 13:19 ` Jon Masters
2016-06-24 3:37 ` 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=20160611172457.GK16462@localhost \
--to=helgaas@kernel.org \
--cc=alex.williamson@redhat.com \
--cc=iommu@lists.linux-foundation.org \
--cc=jchandra@broadcom.com \
--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 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).