From: laurent.pinchart@ideasonboard.com (Laurent Pinchart)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 17/18] iommu: exynos: init from dt-specific callback instead of initcall
Date: Mon, 19 Jan 2015 03:11:07 +0200 [thread overview]
Message-ID: <10691050.Z5RGmE4fp0@avalon> (raw)
In-Reply-To: <1421399592-7482-18-git-send-email-m.szyprowski@samsung.com>
Hi Marek,
Thank you for the patch.
On Friday 16 January 2015 10:13:11 Marek Szyprowski wrote:
> This patch introduces IOMMU_OF_DECLARE-based initialization to the
> driver, which replaces subsys_initcall-based procedure.
> exynos_iommu_of_setup ensures that each sysmmu controller is probed
> before its master device.
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
> drivers/iommu/exynos-iommu.c | 28 +++++++++++++++++++++++++++-
> 1 file changed, 27 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
> index c53cc8f61176..ea2659159e63 100644
> --- a/drivers/iommu/exynos-iommu.c
> +++ b/drivers/iommu/exynos-iommu.c
> @@ -13,16 +13,21 @@
> #endif
>
> #include <linux/clk.h>
> +#include <linux/dma-mapping.h>
> #include <linux/err.h>
> #include <linux/io.h>
> #include <linux/iommu.h>
> #include <linux/interrupt.h>
> #include <linux/list.h>
> +#include <linux/of.h>
> +#include <linux/of_iommu.h>
> +#include <linux/of_platform.h>
> #include <linux/platform_device.h>
> #include <linux/pm_runtime.h>
> #include <linux/slab.h>
>
> #include <asm/cacheflush.h>
> +#include <asm/dma-iommu.h>
> #include <asm/pgtable.h>
>
> typedef u32 sysmmu_iova_t;
> @@ -1084,6 +1089,8 @@ static const struct iommu_ops exynos_iommu_ops = {
> .pgsize_bitmap = SECT_SIZE | LPAGE_SIZE | SPAGE_SIZE,
> };
>
> +static int init_done;
> +
> static int __init exynos_iommu_init(void)
> {
> int ret;
> @@ -1116,6 +1123,8 @@ static int __init exynos_iommu_init(void)
> goto err_set_iommu;
> }
>
> + init_done = true;
> +
> return 0;
> err_set_iommu:
> kmem_cache_free(lv2table_kmem_cache, zero_lv2_table);
> @@ -1125,4 +1134,21 @@ err_reg_driver:
> kmem_cache_destroy(lv2table_kmem_cache);
> return ret;
> }
> -subsys_initcall(exynos_iommu_init);
> +
> +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);
This feels like a hack to me. What happens here is that you're using the
IOMMU_OF_DECLARE mechanism to make sure that the iommu platform device will be
created and registered before the normal OF bus populate mechanism kicks in,
thus ensuring that the iommu gets probed before other devices. In practice
this is pretty similar to using different init levels, which is what Will's
patch set was trying to avoid in the first place. Creating a new kind of init
levels mechanism doesn't sound very good to me.
The existing exynos-iommu driver is based on classic instantiation of a
platform device from DT, using the normal device probing mechanism. As such it
relies on the availability of a struct device for various helper functions. I
thus understand why you want a struct device being registered for the iommu,
instead of initializing the device right from the exynos_iommu_of_setup()
function without a corresponding struct device being registered.
This leads me to question whether we should really introduce IOMMU_OF_DECLARE.
Using regular deferred probing seems more and more like a better solution to
me.
> + of_iommu_set_ops(np, &exynos_iommu_ops);
> + return 0;
> +}
> +
> +IOMMU_OF_DECLARE(exynos_iommu_of, "samsung,exynos-sysmmu",
> + exynos_iommu_of_setup);
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2015-01-19 1:11 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-16 9:12 [PATCH v4 00/18] Exynos SYSMMU (IOMMU) integration with DT and DMA-mapping subsystem Marek Szyprowski
2015-01-16 9:12 ` [PATCH v4 01/18] drm: exynos: detach from default dma-mapping domain on init Marek Szyprowski
2015-01-16 9:12 ` [PATCH v4 02/18] arm: exynos: pm_domains: add support for devices registered before arch_initcall Marek Szyprowski
2015-01-16 9:12 ` [PATCH v4 03/18] ARM: dts: exynos4: add sysmmu nodes Marek Szyprowski
2015-01-16 9:12 ` [PATCH v4 04/18] ARM: dts: exynos5250: " Marek Szyprowski
2015-01-16 9:12 ` [PATCH v4 05/18] ARM: dts: exynos5420: " Marek Szyprowski
2015-01-16 9:13 ` [PATCH v4 06/18] iommu: exynos: don't read version register on every tlb operation Marek Szyprowski
2015-01-16 9:13 ` [PATCH v4 07/18] iommu: exynos: remove unused functions Marek Szyprowski
2015-01-16 9:13 ` [PATCH v4 08/18] iommu: exynos: remove useless spinlock Marek Szyprowski
2015-01-16 9:13 ` [PATCH v4 09/18] iommu: exynos: refactor function parameters to simplify code Marek Szyprowski
2015-01-16 9:13 ` [PATCH v4 10/18] iommu: exynos: remove unused functions, part 2 Marek Szyprowski
2015-01-16 9:13 ` [PATCH v4 11/18] iommu: exynos: remove useless device_add/remove callbacks Marek Szyprowski
2015-01-16 9:13 ` [PATCH v4 12/18] iommu: exynos: add support for binding more than one sysmmu to master device Marek Szyprowski
2015-01-16 9:13 ` [PATCH v4 13/18] iommu: exynos: add support for runtime_pm Marek Szyprowski
2015-01-16 9:13 ` [PATCH v4 14/18] iommu: exynos: rename variables to reflect their purpose Marek Szyprowski
2015-01-16 9:13 ` [PATCH v4 15/18] iommu: exynos: document internal structures Marek Szyprowski
2015-01-16 9:13 ` [PATCH v4 16/18] iommu: exynos: remove excessive includes and sort others alphabetically Marek Szyprowski
2015-01-16 9:13 ` [PATCH v4 17/18] iommu: exynos: init from dt-specific callback instead of initcall Marek Szyprowski
2015-01-19 1:11 ` Laurent Pinchart [this message]
2015-01-19 11:33 ` Will Deacon
2015-01-20 13:41 ` Laurent Pinchart
2015-01-16 9:13 ` [PATCH v4 18/18] iommu: exynos: add callback for initializing devices from device tree Marek Szyprowski
2015-01-19 15:27 ` Javier Martinez Canillas
2015-01-23 12:40 ` Marek Szyprowski
2015-01-23 13:48 ` Javier Martinez Canillas
2015-01-23 16:15 ` Marek Szyprowski
2015-01-23 16:44 ` Javier Martinez Canillas
2015-01-21 23:37 ` [PATCH v4 00/18] Exynos SYSMMU (IOMMU) integration with DT and DMA-mapping subsystem Tobias Jakobi
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=10691050.Z5RGmE4fp0@avalon \
--to=laurent.pinchart@ideasonboard.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