From: robin.murphy@arm.com (Robin Murphy)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 9/9] iommu/arm-smmu: add support for non-pci devices
Date: Wed, 08 Jul 2015 14:22:23 +0100 [thread overview]
Message-ID: <559D240F.2090002@arm.com> (raw)
In-Reply-To: <1436239822-14132-10-git-send-email-thunder.leizhen@huawei.com>
On 07/07/15 04:30, Zhen Lei wrote:
> This patch support a master with multiple stream IDs, but doesn't support a
> master behinds more than one SMMUs.
This should probably include a binding documentation update to make it
clear what values of #iommu-cells the driver supports in what
circumstances, and that the cells themselves should contain raw stream IDs.
> Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
> ---
> drivers/iommu/arm-smmu-v3.c | 39 +++++++++++++++++++++++++++++++++++++--
> 1 file changed, 37 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
> index 274d059..582cd1e 100644
> --- a/drivers/iommu/arm-smmu-v3.c
> +++ b/drivers/iommu/arm-smmu-v3.c
> @@ -30,6 +30,7 @@
> #include <linux/of_address.h>
> #include <linux/pci.h>
> #include <linux/platform_device.h>
> +#include <linux/amba/bus.h>
> #include <linux/of_iommu.h>
> #include <linux/of_platform.h>
>
> @@ -1928,9 +1929,35 @@ static int arm_smmu_of_xlate(struct device *dev, struct of_phandle_args *args)
> return -EINVAL;
> }
>
> - /* We only support PCI, for now */
> if (!dev_is_pci(dev)) {
> - return -ENODEV;
> + int i;
> + struct iommu_group *group;
> +
> + group = iommu_group_get(dev);
> + if (!group) {
> + group = iommu_group_alloc();
> + if (IS_ERR(group)) {
> + dev_err(dev, "failed to allocate IOMMU group\n");
> + return PTR_ERR(group);
> + }
> +
> + ret = iommu_group_add_device(group, dev);
> + if (ret) {
> + dev_err(dev, "failed to add device into IOMMU group\n");
> + return PTR_ERR(group);
This leaks the group.
> + }
> + }
> + iommu_group_put(group);
> +
> + for (i = 0; i < args->args_count; i++) {
I'm dubious of the value of looping here - having n>1 #iommu-cells per
phandle means that every platform device behind one SMMU must have the
same number of stream IDs, or you still have to have repeated phandles
for every device with some greater multiple of n stream IDs each, but
ruling out any device with <n. I'm not sure how realistic that is, and
whether there's any real benefit beyond saving a handful of bytes in the
DTB.
> + ret = arm_smmu_add_device(dev, args->args[i]);
> + if (ret) {
> + dev_err(dev,
> + "failed to add sid=%d into SMMU\n",
> + args->args[i]);
> + return ret;
> + }
> + }
> } else {
> u32 sid;
> struct device_node *of_root;
> @@ -2725,6 +2752,14 @@ static int __init arm_smmu_init(void)
> if (ret)
> return ret;
>
> + if (!iommu_present(&platform_bus_type))
> + bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
> +
> +#ifdef CONFIG_ARM_AMBA
> + if (!iommu_present(&amba_bustype))
> + bus_set_iommu(&amba_bustype, &arm_smmu_ops);
> +#endif
> +
> return bus_set_iommu(&pci_bus_type, &arm_smmu_ops);
> }
>
> --
> 1.8.0
>
>
> _______________________________________________
> iommu mailing list
> iommu at lists.linux-foundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/iommu
>
next prev parent reply other threads:[~2015-07-08 13:22 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-07 3:30 [PATCH v2 0/9] bugfixs and add support for non-pci devices Zhen Lei
2015-07-07 3:30 ` [PATCH v2 1/9] iommu/arm-smmu: fix the assignment of L1 table log2entries Zhen Lei
2015-07-07 3:30 ` [PATCH v2 2/9] iommu/arm-smmu: fix the index calculation of strtab Zhen Lei
2015-07-07 3:30 ` [PATCH v2 3/9] iommu/arm-smmu: fix the values of ARM64_TCR_IRGN0_SHIFT and ARM64_TCR_ORGN0_SHIFT Zhen Lei
2015-07-07 3:30 ` [PATCH v2 4/9] iommu/arm-smmu: enlarge STRTAB_L1_SZ_SHIFT to support larger sidsize Zhen Lei
2015-07-07 3:30 ` [PATCH v2 5/9] iommu/arm-smmu: skip the execution of CMD_PREFETCH_CONFIG Zhen Lei
2015-07-08 13:03 ` Robin Murphy
2015-07-08 17:11 ` Will Deacon
2015-07-09 1:30 ` leizhen
2015-07-07 3:30 ` [PATCH v2 6/9] iommu/arm-smmu: to support probe deferral Zhen Lei
2015-07-08 13:13 ` Robin Murphy
2015-07-09 11:10 ` leizhen
2015-07-09 11:27 ` Will Deacon
2015-07-07 3:30 ` [PATCH v2 7/9] iommu/arm-smmu: remove arm_smmu_devices Zhen Lei
2015-07-08 13:13 ` Robin Murphy
2015-07-09 2:43 ` leizhen
2015-07-07 3:30 ` [PATCH v2 8/9] iommu/arm-smmu: rename __arm_smmu_get_pci_sid Zhen Lei
2015-07-07 3:30 ` [PATCH v2 9/9] iommu/arm-smmu: add support for non-pci devices Zhen Lei
2015-07-08 13:22 ` Robin Murphy [this message]
2015-07-09 1:56 ` leizhen
2015-07-09 12:01 ` Robin Murphy
2015-07-10 0:34 ` leizhen
2015-07-07 9:22 ` [PATCH v2 0/9] bugfixs and " Will Deacon
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=559D240F.2090002@arm.com \
--to=robin.murphy@arm.com \
--cc=linux-arm-kernel@lists.infradead.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).