From: Robin Murphy <robin.murphy@arm.com>
To: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Cc: "linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"iommu@lists.linux-foundation.org"
<iommu@lists.linux-foundation.org>,
Laura Abbott <lauraa@codeaurora.org>,
Arnd Bergmann <arnd@arndb.de>,
Mitchel Humpherys <mitchelh@codeaurora.org>,
Joreg Roedel <joro@8bytes.org>, Will Deacon <Will.Deacon@arm.com>,
"grant.likely@linaro.org" <grant.likely@linaro.org>,
Marek Szyprowski <m.szyprowski@samsung.com>,
Thierry Reding <thierry.reding@gmail.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: Re: [RFC/PATCH 6/9] drivers: platform: Configure dma operations at probe time
Date: Tue, 19 May 2015 11:39:17 +0100 [thread overview]
Message-ID: <555B12D5.5080608@arm.com> (raw)
In-Reply-To: <1431644410-2997-7-git-send-email-laurent.pinchart+renesas@ideasonboard.com>
Hi Laurent,
On 15/05/15 00:00, Laurent Pinchart wrote:
> Configuring DMA ops at probe time will allow deferring device probe when
> the IOMMU isn't available yet.
This is great, as I think it also subtly solves the ordering problem the
current domain allocation has with platform devices. WRT to your comment
on the other thread, this actually makes things slightly saner for IOMMU
groups - the group assignment has to happen after device creation or
else some sysfs stuff blows up, so of_xlate is far too early and the
add_device callback is a reasonable place for it to be (until we can
move it out of every driver and into bus code). However, we're currently
attaching the device to the automatic domain long before that, so things
happen logically backwards and drivers like the ARM SMMU which actually
use the group to store relevant data get all confused.
With this change, the existing attach_device call in arch_setup_dma_ops
will actually work far more reliably, and I might be able to revive my
attempt to port the ARM SMMU driver over to of_xlate :D
Robin.
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> ---
> drivers/base/platform.c | 9 +++++++++
> drivers/of/platform.c | 7 +++----
> 2 files changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> index ebf034b97278..508a866859dc 100644
> --- a/drivers/base/platform.c
> +++ b/drivers/base/platform.c
> @@ -516,6 +516,10 @@ static int platform_drv_probe(struct device *_dev)
> if (ret < 0)
> return ret;
>
> + ret = of_dma_configure_ops(_dev, _dev->of_node);
> + if (ret < 0)
> + goto done;
> +
> ret = dev_pm_domain_attach(_dev, true);
> if (ret != -EPROBE_DEFER) {
> ret = drv->probe(dev);
> @@ -523,6 +527,10 @@ static int platform_drv_probe(struct device *_dev)
> dev_pm_domain_detach(_dev, true);
> }
>
> + if (ret)
> + of_dma_deconfigure(_dev);
> +
> +done:
> if (drv->prevent_deferred_probe && ret == -EPROBE_DEFER) {
> dev_warn(_dev, "probe deferral not supported\n");
> ret = -ENXIO;
> @@ -544,6 +552,7 @@ static int platform_drv_remove(struct device *_dev)
>
> ret = drv->remove(dev);
> dev_pm_domain_detach(_dev, true);
> + of_dma_deconfigure(_dev);
>
> return ret;
> }
> diff --git a/drivers/of/platform.c b/drivers/of/platform.c
> index 9a29f09b7723..fc939bec799e 100644
> --- a/drivers/of/platform.c
> +++ b/drivers/of/platform.c
> @@ -178,10 +178,8 @@ static struct platform_device *of_platform_device_create_pdata(
> dev->dev.bus = &platform_bus_type;
> dev->dev.platform_data = platform_data;
> of_dma_configure_masks(&dev->dev, dev->dev.of_node);
> - of_dma_configure_ops(&dev->dev, dev->dev.of_node);
>
> if (of_device_add(dev) != 0) {
> - of_dma_deconfigure(&dev->dev);
> platform_device_put(dev);
> goto err_clear_flag;
> }
> @@ -465,11 +463,12 @@ static int of_platform_device_destroy(struct device *dev, void *data)
> if (dev->bus == &platform_bus_type)
> platform_device_unregister(to_platform_device(dev));
> #ifdef CONFIG_ARM_AMBA
> - else if (dev->bus == &amba_bustype)
> + else if (dev->bus == &amba_bustype) {
> amba_device_unregister(to_amba_device(dev));
> + of_dma_deconfigure(dev);
> + }
> #endif
>
> - of_dma_deconfigure(dev);
> of_node_clear_flag(dev->of_node, OF_POPULATED);
> of_node_clear_flag(dev->of_node, OF_POPULATED_BUS);
> return 0;
>
next prev parent reply other threads:[~2015-05-19 10:39 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-14 23:00 [RFC/PATCH 0/9] IOMMU probe deferral support Laurent Pinchart
[not found] ` <1431644410-2997-1-git-send-email-laurent.pinchart+renesas-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
2015-05-14 23:00 ` [RFC/PATCH 1/9] arm: dma-mapping: Don't override dma_ops in arch_setup_dma_ops() Laurent Pinchart
[not found] ` <1431644410-2997-2-git-send-email-laurent.pinchart+renesas-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
2015-05-27 17:38 ` Will Deacon
2015-05-14 23:00 ` [RFC/PATCH 2/9] arm: dma-mapping: Support IOMMU mappings spanning the full 32 bits range Laurent Pinchart
[not found] ` <1431644410-2997-3-git-send-email-laurent.pinchart+renesas-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
2015-05-19 10:17 ` Robin Murphy
2015-05-24 22:38 ` Laurent Pinchart
2015-05-14 23:00 ` [RFC/PATCH 3/9] of: dma: Move range size workaround to of_dma_get_range() Laurent Pinchart
2015-05-27 17:59 ` Will Deacon
[not found] ` <1431644410-2997-4-git-send-email-laurent.pinchart+renesas-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
2015-05-28 2:37 ` Rob Herring
2015-05-14 23:00 ` [RFC/PATCH 4/9] of: dma: Make of_dma_deconfigure() public Laurent Pinchart
[not found] ` <1431644410-2997-5-git-send-email-laurent.pinchart+renesas-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
2015-05-28 12:42 ` Will Deacon
2015-05-29 14:04 ` Rob Herring
2015-05-14 23:00 ` [RFC/PATCH 5/9] of: dma: Split of_configure_dma() into mask and ops configuration Laurent Pinchart
[not found] ` <1431644410-2997-6-git-send-email-laurent.pinchart+renesas-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
2015-05-28 13:01 ` Will Deacon
2015-05-29 14:19 ` Rob Herring
2015-05-14 23:00 ` [RFC/PATCH 6/9] drivers: platform: Configure dma operations at probe time Laurent Pinchart
[not found] ` <1431644410-2997-7-git-send-email-laurent.pinchart+renesas-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
2015-05-15 23:59 ` Greg Kroah-Hartman
2015-05-19 10:39 ` Robin Murphy [this message]
[not found] ` <555B12D5.5080608-5wv7dgnIgG8@public.gmane.org>
2015-05-24 22:41 ` Laurent Pinchart
2015-05-14 23:00 ` [RFC/PATCH 7/9] iommu: of: Document the of_iommu_configure() function Laurent Pinchart
[not found] ` <1431644410-2997-8-git-send-email-laurent.pinchart+renesas-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
2015-05-28 13:02 ` Will Deacon
2015-05-14 23:00 ` [RFC/PATCH 8/9] iommu: of: Handle IOMMU lookup failure with deferred probing or error Laurent Pinchart
[not found] ` <1431644410-2997-9-git-send-email-laurent.pinchart+renesas-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org>
2015-05-28 13:31 ` Will Deacon
2015-05-14 23:00 ` [RFC/PATCH 9/9] iommu/ipmmu-vmsa: Use DT-based instantiation Laurent Pinchart
2015-05-27 13:26 ` [RFC/PATCH 0/9] IOMMU probe deferral support Marek Szyprowski
2015-05-28 17:36 ` Laura Abbott
2015-06-11 16:25 ` 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=555B12D5.5080608@arm.com \
--to=robin.murphy@arm.com \
--cc=Will.Deacon@arm.com \
--cc=arnd@arndb.de \
--cc=grant.likely@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=iommu@lists.linux-foundation.org \
--cc=joro@8bytes.org \
--cc=lauraa@codeaurora.org \
--cc=laurent.pinchart+renesas@ideasonboard.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=mitchelh@codeaurora.org \
--cc=thierry.reding@gmail.com \
/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