From: Robin Murphy <robin.murphy-5wv7dgnIgG8@public.gmane.org> To: will.deacon-5wv7dgnIgG8@public.gmane.org, joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org, jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org, punit.agrawal-5wv7dgnIgG8@public.gmane.org, thunder.leizhen-hv44wF8Li93QT0dZR+AlfA@public.gmane.org, eric.auger-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org Subject: [PATCH v7 08/22] iommu/arm-smmu: Support non-PCI devices with SMMUv3 Date: Mon, 12 Sep 2016 17:13:46 +0100 [thread overview] Message-ID: <a35b94e1fd034ccfd146c819ae71734f3fe075a7.1473695704.git.robin.murphy@arm.com> (raw) In-Reply-To: <cover.1473695704.git.robin.murphy-5wv7dgnIgG8@public.gmane.org> With the device <-> stream ID relationship suitably abstracted and of_xlate() hooked up, the PCI dependency now looks, and is, entirely arbitrary. Any bus using the of_dma_configure() mechanism will work, so extend support to the platform and AMBA buses which do just that. Acked-by: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org> Tested-by: Lorenzo Pieralisi <lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org> Signed-off-by: Robin Murphy <robin.murphy-5wv7dgnIgG8@public.gmane.org> --- drivers/iommu/Kconfig | 2 +- drivers/iommu/arm-smmu-v3.c | 37 +++++++++++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig index d432ca828472..8ee54d71c7eb 100644 --- a/drivers/iommu/Kconfig +++ b/drivers/iommu/Kconfig @@ -309,7 +309,7 @@ config ARM_SMMU config ARM_SMMU_V3 bool "ARM Ltd. System MMU Version 3 (SMMUv3) Support" - depends on ARM64 && PCI + depends on ARM64 select IOMMU_API select IOMMU_IO_PGTABLE_LPAE select GENERIC_MSI_IRQ_DOMAIN diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c index 15ba80db6465..52860bcf80f2 100644 --- a/drivers/iommu/arm-smmu-v3.c +++ b/drivers/iommu/arm-smmu-v3.c @@ -35,6 +35,8 @@ #include <linux/pci.h> #include <linux/platform_device.h> +#include <linux/amba/bus.h> + #include "io-pgtable.h" /* MMIO registers */ @@ -1805,6 +1807,23 @@ static void arm_smmu_remove_device(struct device *dev) iommu_fwspec_free(dev); } +static struct iommu_group *arm_smmu_device_group(struct device *dev) +{ + struct iommu_group *group; + + /* + * We don't support devices sharing stream IDs other than PCI RID + * aliases, since the necessary ID-to-device lookup becomes rather + * impractical given a potential sparse 32-bit stream ID space. + */ + if (dev_is_pci(dev)) + group = pci_device_group(dev); + else + group = generic_device_group(dev); + + return group; +} + static int arm_smmu_domain_get_attr(struct iommu_domain *domain, enum iommu_attr attr, void *data) { @@ -1851,10 +1870,6 @@ out_unlock: static int arm_smmu_of_xlate(struct device *dev, struct of_phandle_args *args) { - /* We only support PCI, for now */ - if (!dev_is_pci(dev)) - return -ENODEV; - return iommu_fwspec_add_ids(dev, args->args, 1); } @@ -1869,7 +1884,7 @@ static struct iommu_ops arm_smmu_ops = { .iova_to_phys = arm_smmu_iova_to_phys, .add_device = arm_smmu_add_device, .remove_device = arm_smmu_remove_device, - .device_group = pci_device_group, + .device_group = arm_smmu_device_group, .domain_get_attr = arm_smmu_domain_get_attr, .domain_set_attr = arm_smmu_domain_set_attr, .of_xlate = arm_smmu_of_xlate, @@ -2613,8 +2628,18 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev) /* And we're up. Go go go! */ of_iommu_set_ops(dev->of_node, &arm_smmu_ops); +#ifdef CONFIG_PCI pci_request_acs(); - return bus_set_iommu(&pci_bus_type, &arm_smmu_ops); + ret = bus_set_iommu(&pci_bus_type, &arm_smmu_ops); + if (ret) + return ret; +#endif +#ifdef CONFIG_ARM_AMBA + ret = bus_set_iommu(&amba_bustype, &arm_smmu_ops); + if (ret) + return ret; +#endif + return bus_set_iommu(&platform_bus_type, &arm_smmu_ops); } static int arm_smmu_device_remove(struct platform_device *pdev) -- 2.8.1.dirty -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: robin.murphy@arm.com (Robin Murphy) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v7 08/22] iommu/arm-smmu: Support non-PCI devices with SMMUv3 Date: Mon, 12 Sep 2016 17:13:46 +0100 [thread overview] Message-ID: <a35b94e1fd034ccfd146c819ae71734f3fe075a7.1473695704.git.robin.murphy@arm.com> (raw) In-Reply-To: <cover.1473695704.git.robin.murphy@arm.com> With the device <-> stream ID relationship suitably abstracted and of_xlate() hooked up, the PCI dependency now looks, and is, entirely arbitrary. Any bus using the of_dma_configure() mechanism will work, so extend support to the platform and AMBA buses which do just that. Acked-by: Will Deacon <will.deacon@arm.com> Tested-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Signed-off-by: Robin Murphy <robin.murphy@arm.com> --- drivers/iommu/Kconfig | 2 +- drivers/iommu/arm-smmu-v3.c | 37 +++++++++++++++++++++++++++++++------ 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig index d432ca828472..8ee54d71c7eb 100644 --- a/drivers/iommu/Kconfig +++ b/drivers/iommu/Kconfig @@ -309,7 +309,7 @@ config ARM_SMMU config ARM_SMMU_V3 bool "ARM Ltd. System MMU Version 3 (SMMUv3) Support" - depends on ARM64 && PCI + depends on ARM64 select IOMMU_API select IOMMU_IO_PGTABLE_LPAE select GENERIC_MSI_IRQ_DOMAIN diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c index 15ba80db6465..52860bcf80f2 100644 --- a/drivers/iommu/arm-smmu-v3.c +++ b/drivers/iommu/arm-smmu-v3.c @@ -35,6 +35,8 @@ #include <linux/pci.h> #include <linux/platform_device.h> +#include <linux/amba/bus.h> + #include "io-pgtable.h" /* MMIO registers */ @@ -1805,6 +1807,23 @@ static void arm_smmu_remove_device(struct device *dev) iommu_fwspec_free(dev); } +static struct iommu_group *arm_smmu_device_group(struct device *dev) +{ + struct iommu_group *group; + + /* + * We don't support devices sharing stream IDs other than PCI RID + * aliases, since the necessary ID-to-device lookup becomes rather + * impractical given a potential sparse 32-bit stream ID space. + */ + if (dev_is_pci(dev)) + group = pci_device_group(dev); + else + group = generic_device_group(dev); + + return group; +} + static int arm_smmu_domain_get_attr(struct iommu_domain *domain, enum iommu_attr attr, void *data) { @@ -1851,10 +1870,6 @@ out_unlock: static int arm_smmu_of_xlate(struct device *dev, struct of_phandle_args *args) { - /* We only support PCI, for now */ - if (!dev_is_pci(dev)) - return -ENODEV; - return iommu_fwspec_add_ids(dev, args->args, 1); } @@ -1869,7 +1884,7 @@ static struct iommu_ops arm_smmu_ops = { .iova_to_phys = arm_smmu_iova_to_phys, .add_device = arm_smmu_add_device, .remove_device = arm_smmu_remove_device, - .device_group = pci_device_group, + .device_group = arm_smmu_device_group, .domain_get_attr = arm_smmu_domain_get_attr, .domain_set_attr = arm_smmu_domain_set_attr, .of_xlate = arm_smmu_of_xlate, @@ -2613,8 +2628,18 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev) /* And we're up. Go go go! */ of_iommu_set_ops(dev->of_node, &arm_smmu_ops); +#ifdef CONFIG_PCI pci_request_acs(); - return bus_set_iommu(&pci_bus_type, &arm_smmu_ops); + ret = bus_set_iommu(&pci_bus_type, &arm_smmu_ops); + if (ret) + return ret; +#endif +#ifdef CONFIG_ARM_AMBA + ret = bus_set_iommu(&amba_bustype, &arm_smmu_ops); + if (ret) + return ret; +#endif + return bus_set_iommu(&platform_bus_type, &arm_smmu_ops); } static int arm_smmu_device_remove(struct platform_device *pdev) -- 2.8.1.dirty
next prev parent reply other threads:[~2016-09-12 16:13 UTC|newest] Thread overview: 104+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-09-12 16:13 [PATCH v7 00/22] Generic DT bindings for PCI IOMMUs and ARM SMMU Robin Murphy 2016-09-12 16:13 ` Robin Murphy [not found] ` <cover.1473695704.git.robin.murphy-5wv7dgnIgG8@public.gmane.org> 2016-09-12 16:13 ` [PATCH v7 01/22] Docs: dt: add PCI IOMMU map bindings Robin Murphy 2016-09-12 16:13 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 02/22] of/irq: Break out msi-map lookup (again) Robin Murphy 2016-09-12 16:13 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 03/22] iommu/of: Handle iommu-map property for PCI Robin Murphy 2016-09-12 16:13 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 04/22] iommu: Introduce iommu_fwspec Robin Murphy 2016-09-12 16:13 ` Robin Murphy [not found] ` <742a71630de502ac5a7a8641c6ed368d8409324d.1473695704.git.robin.murphy-5wv7dgnIgG8@public.gmane.org> 2016-09-13 9:54 ` [PATCH v7.1 " Robin Murphy 2016-09-13 9:54 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 05/22] Docs: dt: document ARM SMMUv3 generic binding usage Robin Murphy 2016-09-12 16:13 ` Robin Murphy [not found] ` <2273645f1fa5c76b6b98b5fd03804ab8b55a7691.1473695704.git.robin.murphy-5wv7dgnIgG8@public.gmane.org> 2016-09-20 14:46 ` Rob Herring 2016-09-20 14:46 ` Rob Herring 2016-09-12 16:13 ` [PATCH v7 06/22] iommu/arm-smmu: Fall back to global bypass Robin Murphy 2016-09-12 16:13 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 07/22] iommu/arm-smmu: Implement of_xlate() for SMMUv3 Robin Murphy 2016-09-12 16:13 ` Robin Murphy 2016-09-12 16:13 ` Robin Murphy [this message] 2016-09-12 16:13 ` [PATCH v7 08/22] iommu/arm-smmu: Support non-PCI devices with SMMUv3 Robin Murphy 2016-09-12 16:13 ` [PATCH v7 09/22] iommu/arm-smmu: Set PRIVCFG in stage 1 STEs Robin Murphy 2016-09-12 16:13 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 10/22] iommu/arm-smmu: Handle stream IDs more dynamically Robin Murphy 2016-09-12 16:13 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 11/22] iommu/arm-smmu: Consolidate stream map entry state Robin Murphy 2016-09-12 16:13 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 12/22] iommu/arm-smmu: Keep track of S2CR state Robin Murphy 2016-09-12 16:13 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 13/22] iommu/arm-smmu: Refactor mmu-masters handling Robin Murphy 2016-09-12 16:13 ` Robin Murphy [not found] ` <046d2d21f988d6ece916fc45b0af0804a7f200f2.1473695704.git.robin.murphy-5wv7dgnIgG8@public.gmane.org> 2016-09-14 14:21 ` [PATCH v7.1 " Robin Murphy 2016-09-14 14:21 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 14/22] iommu/arm-smmu: Streamline SMMU data lookups Robin Murphy 2016-09-12 16:13 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 15/22] iommu/arm-smmu: Add a stream map entry iterator Robin Murphy 2016-09-12 16:13 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 16/22] iommu/arm-smmu: Intelligent SMR allocation Robin Murphy 2016-09-12 16:13 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 17/22] iommu/arm-smmu: Convert to iommu_fwspec Robin Murphy 2016-09-12 16:13 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 18/22] Docs: dt: document ARM SMMU generic binding usage Robin Murphy 2016-09-12 16:13 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 19/22] iommu/arm-smmu: Wire up generic configuration support Robin Murphy 2016-09-12 16:13 ` Robin Murphy [not found] ` <228dc6c675f10ae7481640d4ef2f4960c170621f.1473695704.git.robin.murphy-5wv7dgnIgG8@public.gmane.org> 2016-09-14 14:26 ` [PATCH v7.1 " Robin Murphy 2016-09-14 14:26 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 20/22] iommu/arm-smmu: Set domain geometry Robin Murphy 2016-09-12 16:13 ` Robin Murphy 2016-09-12 16:13 ` [PATCH v7 21/22] iommu/dma: Add support for mapping MSIs Robin Murphy 2016-09-12 16:13 ` Robin Murphy [not found] ` <2273af20d844bd618c6a90b57e639700328ebf7f.1473695704.git.robin.murphy-5wv7dgnIgG8@public.gmane.org> 2016-10-05 7:00 ` Nipun Gupta 2016-10-05 7:00 ` Nipun Gupta [not found] ` <DB6PR0402MB2694B2E5AE266F138784D2C2E6C40-2mNvjAGDOPn2WJ5A9zev/o3W/0Ik+aLCnBOFsp37pqbUKgpGm//BTAC/G2K4zDHf@public.gmane.org> 2016-10-05 9:55 ` Robin Murphy 2016-10-05 9:55 ` Robin Murphy [not found] ` <6ec9519b-01df-3be8-2967-7556bd306909-5wv7dgnIgG8@public.gmane.org> 2016-10-05 11:31 ` Nipun Gupta 2016-10-05 11:31 ` Nipun Gupta 2016-09-12 16:14 ` [PATCH v7 22/22] iommu/dma: Avoid PCI host bridge windows Robin Murphy 2016-09-12 16:14 ` Robin Murphy [not found] ` <5f7bfee298f98d29a35933d3e0252d32b83d62b8.1473695704.git.robin.murphy-5wv7dgnIgG8@public.gmane.org> 2016-09-14 10:55 ` Marek Szyprowski 2016-09-14 10:55 ` Marek Szyprowski [not found] ` <ab8693f6-20d6-2a95-9f1f-0607e72bc012-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> 2016-09-14 11:10 ` Robin Murphy 2016-09-14 11:10 ` Robin Murphy [not found] ` <49c51c4f-cb00-445d-b8f8-b632babf2b3e-5wv7dgnIgG8@public.gmane.org> 2016-09-14 12:35 ` Marek Szyprowski 2016-09-14 12:35 ` Marek Szyprowski [not found] ` <dc9f945f-2756-ab70-d061-9fdc7c5afdee-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> 2016-09-14 13:25 ` Robin Murphy 2016-09-14 13:25 ` Robin Murphy [not found] ` <bbdc42fa-ea35-945f-3e2a-e0ab03fc997d-5wv7dgnIgG8@public.gmane.org> 2016-09-15 7:08 ` Marek Szyprowski 2016-09-15 7:08 ` Marek Szyprowski 2016-09-13 12:14 ` [PATCH v7 00/22] Generic DT bindings for PCI IOMMUs and ARM SMMU Auger Eric 2016-09-13 12:14 ` Auger Eric [not found] ` <92f27a6b-9752-516d-3924-c552fc6a5ace-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2016-09-13 12:40 ` Robin Murphy 2016-09-13 12:40 ` Robin Murphy [not found] ` <e24821be-5cc4-52b3-f961-1eb32cf58293-5wv7dgnIgG8@public.gmane.org> 2016-09-13 12:57 ` Auger Eric 2016-09-13 12:57 ` Auger Eric 2016-09-14 8:41 ` Auger Eric 2016-09-14 8:41 ` Auger Eric [not found] ` <11ebd81e-2ea5-5ff3-35b3-be95f03e05bd-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2016-09-14 9:20 ` Will Deacon 2016-09-14 9:20 ` Will Deacon [not found] ` <20160914092051.GB19622-5wv7dgnIgG8@public.gmane.org> 2016-09-14 9:35 ` Auger Eric 2016-09-14 9:35 ` Auger Eric 2016-09-14 10:35 ` Robin Murphy 2016-09-14 10:35 ` Robin Murphy [not found] ` <d03ea5e7-59f1-8b49-4ba2-d05fc2030ebc-5wv7dgnIgG8@public.gmane.org> 2016-09-14 12:32 ` Auger Eric 2016-09-14 12:32 ` Auger Eric [not found] ` <04a0a682-4fdc-8d62-57cd-efdf730582c6-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2016-09-14 12:53 ` Robin Murphy 2016-09-14 12:53 ` Robin Murphy [not found] ` <c2645c5e-edd3-2b31-4311-0ca621a915e2-5wv7dgnIgG8@public.gmane.org> 2016-09-15 9:29 ` Auger Eric 2016-09-15 9:29 ` Auger Eric [not found] ` <4d87d5f2-0350-b5f8-ffc3-4e9377cf1f87-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2016-09-15 10:15 ` Robin Murphy 2016-09-15 10:15 ` Robin Murphy [not found] ` <fc4ce398-4eeb-f2ca-b964-e9f466be79c4-5wv7dgnIgG8@public.gmane.org> 2016-09-15 16:46 ` Auger Eric 2016-09-15 16:46 ` Auger Eric [not found] ` <1838c65d-5944-8946-781c-b420bea1acab-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2016-09-16 16:18 ` Robin Murphy 2016-09-16 16:18 ` Robin Murphy [not found] ` <f16db032-1905-9804-0607-fe007af72b0e-5wv7dgnIgG8@public.gmane.org> 2016-09-19 12:13 ` Auger Eric 2016-09-19 12:13 ` Auger Eric [not found] ` <48f3bc10-3966-7d50-d070-7ec7f0946c92-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> 2016-09-19 12:24 ` Will Deacon 2016-09-19 12:24 ` Will Deacon [not found] ` <20160919122435.GD9005-5wv7dgnIgG8@public.gmane.org> 2016-09-19 12:41 ` Robin Murphy 2016-09-19 12:41 ` Robin Murphy [not found] ` <99ee0946-c7ff-e6e4-08c1-ff686ea1a8a5-5wv7dgnIgG8@public.gmane.org> 2016-09-19 14:17 ` Will Deacon 2016-09-19 14:17 ` 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=a35b94e1fd034ccfd146c819ae71734f3fe075a7.1473695704.git.robin.murphy@arm.com \ --to=robin.murphy-5wv7dgnigg8@public.gmane.org \ --cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=eric.auger-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \ --cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \ --cc=jean-philippe.brucker-5wv7dgnIgG8@public.gmane.org \ --cc=joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org \ --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \ --cc=lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org \ --cc=punit.agrawal-5wv7dgnIgG8@public.gmane.org \ --cc=thunder.leizhen-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \ --cc=will.deacon-5wv7dgnIgG8@public.gmane.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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.