From: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org>
To: Robin Murphy <robin.murphy-5wv7dgnIgG8@public.gmane.org>
Cc: devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
thunder.leizhen-hv44wF8Li93QT0dZR+AlfA@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Subject: Re: [PATCH v3 2/9] iommu/of: Consolidate device creation workarounds
Date: Fri, 1 Jul 2016 11:22:50 +0100 [thread overview]
Message-ID: <20160701102250.GD12735@arm.com> (raw)
In-Reply-To: <dc8ac0f397ea5c90937fb5c9974e4ab02e264bd8.1467123945.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
On Tue, Jun 28, 2016 at 04:48:21PM +0100, Robin Murphy wrote:
> So far, all the users of the generic of_xlate configuration mechanism
> are resorting to explicit platform device creation to ensure the IOMMU
> device is ready before anything tries to refer to it. As I'm about to
> convert two more drivers that will need exactly the same thing, let's
> nip that proliferation in the bud and move it to a single place.
>
> A neat solution is to make of_get_iommu_ops() ensure an IOMMU device is
> instantiated before giving out its associated ops, since it's a fairly
> safe assumption that the ops aren't going to be much use if the IOMMU
> can't or won't exist to back them up.
>
> CC: Marek Szyprowski <m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
> CC: Yong Wu <yong.wu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
> Signed-off-by: Robin Murphy <robin.murphy-5wv7dgnIgG8@public.gmane.org>
> ---
Marek, Yong, can I have your acks on this please? It's a fairly
straightforward change, but the subsequent arm-smmu patches rely on it.
Thanks,
Will
> drivers/iommu/exynos-iommu.c | 20 +++++++-------------
> drivers/iommu/mtk_iommu.c | 8 +-------
> drivers/iommu/of_iommu.c | 6 +++++-
> 3 files changed, 13 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
> index 5ecc86cb74c8..97380ee56d71 100644
> --- a/drivers/iommu/exynos-iommu.c
> +++ b/drivers/iommu/exynos-iommu.c
> @@ -665,6 +665,13 @@ static int __init exynos_sysmmu_probe(struct platform_device *pdev)
>
> pm_runtime_enable(dev);
>
> + /*
> + * use the first registered sysmmu device for performing
> + * dma mapping operations on iommu page tables (cpu cache flush)
> + */
> + if (!dma_dev)
> + dma_dev = dev;
> +
> return 0;
> }
>
> @@ -1341,22 +1348,9 @@ err_reg_driver:
>
> static int __init exynos_iommu_of_setup(struct device_node *np)
> {
> - struct platform_device *pdev;
> -
> if (!init_done)
> exynos_iommu_init();
>
> - pdev = of_platform_device_create(np, NULL, platform_bus_type.dev_root);
> - if (IS_ERR(pdev))
> - return PTR_ERR(pdev);
> -
> - /*
> - * use the first registered sysmmu device for performing
> - * dma mapping operations on iommu page tables (cpu cache flush)
> - */
> - if (!dma_dev)
> - dma_dev = &pdev->dev;
> -
> of_iommu_set_ops(np, &exynos_iommu_ops);
> return 0;
> }
> diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
> index c3043d8754e3..f7ae87abea99 100644
> --- a/drivers/iommu/mtk_iommu.c
> +++ b/drivers/iommu/mtk_iommu.c
> @@ -724,14 +724,8 @@ static struct platform_driver mtk_iommu_driver = {
>
> static int mtk_iommu_init_fn(struct device_node *np)
> {
> - int ret;
> - struct platform_device *pdev;
> + int ret = platform_driver_register(&mtk_iommu_driver);
>
> - pdev = of_platform_device_create(np, NULL, platform_bus_type.dev_root);
> - if (!pdev)
> - return -ENOMEM;
> -
> - ret = platform_driver_register(&mtk_iommu_driver);
> if (ret) {
> pr_err("%s: Failed to register driver\n", __func__);
> return ret;
> diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c
> index af499aea0a1a..7e6369cffc95 100644
> --- a/drivers/iommu/of_iommu.c
> +++ b/drivers/iommu/of_iommu.c
> @@ -22,6 +22,7 @@
> #include <linux/limits.h>
> #include <linux/of.h>
> #include <linux/of_iommu.h>
> +#include <linux/of_platform.h>
> #include <linux/slab.h>
>
> static const struct of_device_id __iommu_of_table_sentinel
> @@ -127,7 +128,10 @@ const struct iommu_ops *of_iommu_get_ops(struct device_node *np)
> spin_lock(&of_iommu_lock);
> list_for_each_entry(node, &of_iommu_list, list)
> if (node->np == np) {
> - ops = node->ops;
> + if (of_node_check_flag(np, OF_POPULATED) ||
> + of_platform_device_create(np, NULL,
> + platform_bus_type.dev_root))
> + ops = node->ops;
> break;
> }
> spin_unlock(&of_iommu_lock);
> --
> 2.8.1.dirty
>
WARNING: multiple messages have this Message-ID (diff)
From: will.deacon@arm.com (Will Deacon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 2/9] iommu/of: Consolidate device creation workarounds
Date: Fri, 1 Jul 2016 11:22:50 +0100 [thread overview]
Message-ID: <20160701102250.GD12735@arm.com> (raw)
In-Reply-To: <dc8ac0f397ea5c90937fb5c9974e4ab02e264bd8.1467123945.git.robin.murphy@arm.com>
On Tue, Jun 28, 2016 at 04:48:21PM +0100, Robin Murphy wrote:
> So far, all the users of the generic of_xlate configuration mechanism
> are resorting to explicit platform device creation to ensure the IOMMU
> device is ready before anything tries to refer to it. As I'm about to
> convert two more drivers that will need exactly the same thing, let's
> nip that proliferation in the bud and move it to a single place.
>
> A neat solution is to make of_get_iommu_ops() ensure an IOMMU device is
> instantiated before giving out its associated ops, since it's a fairly
> safe assumption that the ops aren't going to be much use if the IOMMU
> can't or won't exist to back them up.
>
> CC: Marek Szyprowski <m.szyprowski@samsung.com>
> CC: Yong Wu <yong.wu@mediatek.com>
> Signed-off-by: Robin Murphy <robin.murphy@arm.com>
> ---
Marek, Yong, can I have your acks on this please? It's a fairly
straightforward change, but the subsequent arm-smmu patches rely on it.
Thanks,
Will
> drivers/iommu/exynos-iommu.c | 20 +++++++-------------
> drivers/iommu/mtk_iommu.c | 8 +-------
> drivers/iommu/of_iommu.c | 6 +++++-
> 3 files changed, 13 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
> index 5ecc86cb74c8..97380ee56d71 100644
> --- a/drivers/iommu/exynos-iommu.c
> +++ b/drivers/iommu/exynos-iommu.c
> @@ -665,6 +665,13 @@ static int __init exynos_sysmmu_probe(struct platform_device *pdev)
>
> pm_runtime_enable(dev);
>
> + /*
> + * use the first registered sysmmu device for performing
> + * dma mapping operations on iommu page tables (cpu cache flush)
> + */
> + if (!dma_dev)
> + dma_dev = dev;
> +
> return 0;
> }
>
> @@ -1341,22 +1348,9 @@ err_reg_driver:
>
> static int __init exynos_iommu_of_setup(struct device_node *np)
> {
> - struct platform_device *pdev;
> -
> if (!init_done)
> exynos_iommu_init();
>
> - pdev = of_platform_device_create(np, NULL, platform_bus_type.dev_root);
> - if (IS_ERR(pdev))
> - return PTR_ERR(pdev);
> -
> - /*
> - * use the first registered sysmmu device for performing
> - * dma mapping operations on iommu page tables (cpu cache flush)
> - */
> - if (!dma_dev)
> - dma_dev = &pdev->dev;
> -
> of_iommu_set_ops(np, &exynos_iommu_ops);
> return 0;
> }
> diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
> index c3043d8754e3..f7ae87abea99 100644
> --- a/drivers/iommu/mtk_iommu.c
> +++ b/drivers/iommu/mtk_iommu.c
> @@ -724,14 +724,8 @@ static struct platform_driver mtk_iommu_driver = {
>
> static int mtk_iommu_init_fn(struct device_node *np)
> {
> - int ret;
> - struct platform_device *pdev;
> + int ret = platform_driver_register(&mtk_iommu_driver);
>
> - pdev = of_platform_device_create(np, NULL, platform_bus_type.dev_root);
> - if (!pdev)
> - return -ENOMEM;
> -
> - ret = platform_driver_register(&mtk_iommu_driver);
> if (ret) {
> pr_err("%s: Failed to register driver\n", __func__);
> return ret;
> diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c
> index af499aea0a1a..7e6369cffc95 100644
> --- a/drivers/iommu/of_iommu.c
> +++ b/drivers/iommu/of_iommu.c
> @@ -22,6 +22,7 @@
> #include <linux/limits.h>
> #include <linux/of.h>
> #include <linux/of_iommu.h>
> +#include <linux/of_platform.h>
> #include <linux/slab.h>
>
> static const struct of_device_id __iommu_of_table_sentinel
> @@ -127,7 +128,10 @@ const struct iommu_ops *of_iommu_get_ops(struct device_node *np)
> spin_lock(&of_iommu_lock);
> list_for_each_entry(node, &of_iommu_list, list)
> if (node->np == np) {
> - ops = node->ops;
> + if (of_node_check_flag(np, OF_POPULATED) ||
> + of_platform_device_create(np, NULL,
> + platform_bus_type.dev_root))
> + ops = node->ops;
> break;
> }
> spin_unlock(&of_iommu_lock);
> --
> 2.8.1.dirty
>
next prev parent reply other threads:[~2016-07-01 10:22 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-28 15:48 [PATCH v3 0/9] Generic DT bindings for PCI IOMMUs and ARM SMMUv3 Robin Murphy
2016-06-28 15:48 ` Robin Murphy
[not found] ` <cover.1467123945.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-06-28 15:48 ` [PATCH v3 1/9] arm64: mm: change IOMMU notifier action to attach DMA ops Robin Murphy
2016-06-28 15:48 ` Robin Murphy
2016-06-28 15:48 ` [PATCH v3 2/9] iommu/of: Consolidate device creation workarounds Robin Murphy
2016-06-28 15:48 ` Robin Murphy
[not found] ` <dc8ac0f397ea5c90937fb5c9974e4ab02e264bd8.1467123945.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-07-01 10:22 ` Will Deacon [this message]
2016-07-01 10:22 ` Will Deacon
2016-07-01 10:32 ` Marek Szyprowski
2016-07-01 10:32 ` Marek Szyprowski
[not found] ` <611b2a77-e7e8-e1e2-85b5-4f469f3ebdf4-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2016-07-01 11:19 ` Robin Murphy
2016-07-01 11:19 ` Robin Murphy
[not found] ` <577651D7.4030309-5wv7dgnIgG8@public.gmane.org>
2016-07-01 12:02 ` Marek Szyprowski
2016-07-01 12:02 ` Marek Szyprowski
2016-07-01 12:29 ` Will Deacon
2016-07-01 12:29 ` Will Deacon
2016-06-28 15:48 ` [PATCH v3 3/9] Docs: dt: add PCI IOMMU map bindings Robin Murphy
2016-06-28 15:48 ` Robin Murphy
2016-06-28 15:48 ` [PATCH v3 4/9] of/irq: Break out msi-map lookup (again) Robin Murphy
2016-06-28 15:48 ` Robin Murphy
2016-06-28 15:48 ` [PATCH v3 5/9] iommu/of: Handle iommu-map property for PCI Robin Murphy
2016-06-28 15:48 ` Robin Murphy
[not found] ` <17617dff6e7998b91d53ed8a1d6283b1c7bc3470.1467123945.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-07-01 10:31 ` Will Deacon
2016-07-01 10:31 ` Will Deacon
[not found] ` <20160701103105.GE12735-5wv7dgnIgG8@public.gmane.org>
2016-07-01 11:33 ` Robin Murphy
2016-07-01 11:33 ` Robin Murphy
2016-06-28 15:48 ` [PATCH v3 6/9] iommu/of: Introduce iommu_fwspec Robin Murphy
2016-06-28 15:48 ` Robin Murphy
[not found] ` <227abd6fb43e4163d94673066b4b736d7efaa635.1467123945.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-07-01 10:55 ` Will Deacon
2016-07-01 10:55 ` Will Deacon
[not found] ` <20160701105505.GH12735-5wv7dgnIgG8@public.gmane.org>
2016-07-01 12:04 ` Robin Murphy
2016-07-01 12:04 ` Robin Murphy
[not found] ` <57765C5E.8010400-5wv7dgnIgG8@public.gmane.org>
2016-07-07 16:51 ` Lorenzo Pieralisi
2016-07-07 16:51 ` Lorenzo Pieralisi
2016-06-28 15:48 ` [PATCH v3 7/9] iommu/arm-smmu: Implement of_xlate() for SMMUv3 Robin Murphy
2016-06-28 15:48 ` Robin Murphy
[not found] ` <6de0ca7795e1b74627ceb55dcefcfd5537f245ce.1467123945.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-07-01 12:35 ` Will Deacon
2016-07-01 12:35 ` Will Deacon
[not found] ` <20160701123507.GJ12735-5wv7dgnIgG8@public.gmane.org>
2016-07-01 13:26 ` Robin Murphy
2016-07-01 13:26 ` Robin Murphy
2016-06-28 15:48 ` [PATCH v3 8/9] iommu/arm-smmu: Support non-PCI devices with SMMUv3 Robin Murphy
2016-06-28 15:48 ` Robin Murphy
[not found] ` <19b0d973e170bebfa57157047bf76499de2a6d33.1467123945.git.robin.murphy-5wv7dgnIgG8@public.gmane.org>
2016-07-01 12:40 ` Will Deacon
2016-07-01 12:40 ` Will Deacon
[not found] ` <20160701124036.GK12735-5wv7dgnIgG8@public.gmane.org>
2016-07-01 13:05 ` Robin Murphy
2016-07-01 13:05 ` Robin Murphy
2016-06-28 15:48 ` [PATCH v3 9/9] iommu/arm-smmu: Set PRIVCFG in stage 1 STEs Robin Murphy
2016-06-28 15:48 ` Robin Murphy
2016-06-28 16:18 ` [RFC 1/2] iommu/dma: Restrict IOVAs to physical memory layout Robin Murphy
2016-06-28 16:18 ` Robin Murphy
[not found] ` <CALRxmdCuxLPogPTwpn2-B=PU=Ry0eNtgs2z+iZBPYtDc3NX-hQ@mail.gmail.com>
[not found] ` <CALRxmdCuxLPogPTwpn2-B=PU=Ry0eNtgs2z+iZBPYtDc3NX-hQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-07-01 16:03 ` Stuart Yoder
2016-07-01 16:03 ` Stuart Yoder
[not found] ` <HE1PR04MB1641583BE6AFF39AF1BFCEFB8D250-6LN7OEpIatU5tNmRkpaxD89NdZoXdze2vxpqHgZTriW3zl9H0oFU5g@public.gmane.org>
2016-07-01 16:15 ` Robin Murphy
2016-07-01 16:15 ` Robin Murphy
[not found] ` <57769724.4040801-5wv7dgnIgG8@public.gmane.org>
2016-07-01 17:39 ` Robin Murphy
2016-07-01 17:39 ` Robin Murphy
[not found] ` <5776AAD8.5030704-5wv7dgnIgG8@public.gmane.org>
2016-07-01 18:53 ` Stuart Yoder
2016-07-01 18:53 ` Stuart Yoder
2016-06-28 16:18 ` [RFC 2/2] iommu/dma: Identity-map non-RAM regions Robin Murphy
2016-06-28 16:18 ` Robin Murphy
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=20160701102250.GD12735@arm.com \
--to=will.deacon-5wv7dgnigg8@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=robin.murphy-5wv7dgnIgG8@public.gmane.org \
--cc=thunder.leizhen-hv44wF8Li93QT0dZR+AlfA@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: link
Be 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.