linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: mark.yao@rock-chips.com (Mark yao)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC 0/3] Unify IOMMU-based DMA-mapping code for ARM and ARM64
Date: Mon, 18 Apr 2016 10:18:37 +0800	[thread overview]
Message-ID: <571443FD.9090508@rock-chips.com> (raw)
In-Reply-To: <1455870164-25337-1-git-send-email-m.szyprowski@samsung.com>

Hi Marek

With your patches, do drm/rockchip dma-mapping rewrite, IOMMU works good 
on drm/rockchip ARM64 platform.

Thanks for your patches.

On 2016?02?19? 16:22, Marek Szyprowski wrote:
> Dear All,
>
> This is an initial RFC on the unification of IOMMU-based DMA-mapping
> code for ARM and ARM64 architectures.
>
> Right now ARM architecture still use my old code for IOMMU-based
> DMA-mapping glue, initially merged in commit
> 4ce63fcd919c32d22528e54dcd89506962933719 ("ARM: dma-mapping: add support
> for IOMMU mapper"). In meantime ARM64 got a new, slightly improved
> implementation provided by Robin Murphy in commit
> 13b8629f651164d71f4d38b821925f93ba4236c8 ("arm64: Add IOMMU dma_ops").
>
> Both implementations are very similar thus their unification is desired
> to avoid duplicating future works and simplify code, which uses this
> layer on both architectures. In this patchset I've selected the new
> implementation (from ARM64 architecture) as a base. This means that
> ARM-specific, old interface (arm_iommu_* functions) for configuring
> IOMMU domains will be no longer available and its users have to be
> converted to new API.
>
> Besides lack of old interface, the second difference is additional
> requirements for IOMMU drivers. New code relies on the support for
> IOMMU_DOMAIN_DMA and default IOMMU domain, which is automatically
> attached by the IOMMU core.
>
> The new code also assumes that the IOMMU-based DMA-mapping ops are
> mainly configured from arch_setup_dma_ops() function, which means that
> the IOMMU driver should provide needed of_xlate callbacks and initialize
> IOMMU ops for device nodes. However it should be also possible to
> initialize IOMMU-based DMA-mapping ops for client devices directly from
> IOMMU drivers by calling common_iommu_setup_dma_ops() (some drivers used
> such approach).
>
> IOMMU drivers should be also aware of the fact that the
> default domain is attached via device_attach and then device_attach
> callback can be called once again with different domain without previous
> detach from default domain. For more information on this issue, see the
> following thread:
> https://lists.linaro.org/pipermail/linaro-mm-sig/2016-February/004625.html
>
> Currently there are 4 users of the old arm_iommu_* interface:
> 1. Exynos DRM driver
> 2. Rockchip DRM driver
> 3. OMAP3 ISP camera driver
> 4. Renesas VMSA-compatible IPMMU driver
>
> In this patchset I've converted Exynos DRM driver for the new API (patch
> 1). This required some changes in the memory management model inside the
> driver and removal of some hacks, which were used to setup IOMMU-based
> DMA-mapping ops on the 'exynos-drm' virtual device and common IOMMU
> domain for all Exynos DRM sub-devices, those changes have been posted
> separately here: http://www.spinics.net/lists/dri-devel/msg100861.html
> Rockchip DRM driver requires similar conversion.
>
> Converting OMAP3 ISP camera driver to new API requires adding support
> for IOMMU groups to OMAP IOMMU driver, because the new DMA/IOMMU code
> used IOMMU_DOMAIN_DMA type domains and default groups.
>
> Renesas IPMMU driver needs also to be extended with IOMMU_DOMAIN_DMA domain
> type support. It can also be prepared for IOMMU_OF_DECLARE and of_xlate
> callback-based initialization to let core to automatically setup of
> IOMMU-based DMA mapping implementation.
>
> Patch 2 moves existing code from arch/arm64 to drivers/iommu and
> introduces some minor changes in function names - mainly adding arch_
> prefix to some dma-mapping internal functions, which stay in arch/arm64/
> (functions of similar names are present in arch/arm). Patch 3 adapts ARM
> architecture for the common code.
>
> I would like to get your comments on the proposed approach. There is
> still some work that need to be done to convert remaining users of the
> old API and updating IOMMU drivers to the new API requirements. This
> change need to be tested on the all affected ARM sub-architectures.
>
> Right now patches were tested on only Exynos based boards: ARM 32bit:
> Exynos4412 and Exynos5422 boards and ARM 64 bit Exnyos 5433 (with some
> out-of-tree DTS).
>
> To ease testing I've prepared a branch with all the patches needed
> (there are all needed patches for Exynos subarch, which have been posted
> as separate patchsets):
> https://git.linaro.org/people/marek.szyprowski/linux-srpol.git v4.5-dma-iommu-unification
>
> Patches are based on Linux v4.5-rc4 vanilla tree.
>
> Best regards
> Marek Szyprowski
> Samsung R&D Institute Poland
>
>
> Patch summary:
>
> Marek Szyprowski (3):
>    drm/exynos: rewrite IOMMU support code
>    iommu: dma-iommu: move IOMMU/DMA-mapping code from ARM64 arch to drivers
>    iommu: dma-iommu: use common implementation also on ARM architecture
>
>   arch/arm/Kconfig                          |   22 +-
>   arch/arm/include/asm/device.h             |    9 -
>   arch/arm/include/asm/dma-iommu.h          |   37 -
>   arch/arm/include/asm/dma-mapping.h        |   59 +-
>   arch/arm/mm/dma-mapping.c                 | 1158 +----------------------------
>   arch/arm64/include/asm/dma-mapping.h      |   39 +-
>   arch/arm64/mm/dma-mapping.c               |  491 +-----------
>   drivers/gpu/drm/exynos/Kconfig            |    2 +-
>   drivers/gpu/drm/exynos/exynos_drm_drv.c   |    7 +-
>   drivers/gpu/drm/exynos/exynos_drm_drv.h   |    2 +-
>   drivers/gpu/drm/exynos/exynos_drm_iommu.c |   91 ++-
>   drivers/gpu/drm/exynos/exynos_drm_iommu.h |    2 +-
>   drivers/gpu/drm/rockchip/Kconfig          |    1 +
>   drivers/iommu/Kconfig                     |    1 +
>   drivers/iommu/Makefile                    |    2 +-
>   drivers/iommu/dma-iommu-ops.c             |  471 ++++++++++++
>   drivers/media/platform/Kconfig            |    1 +
>   include/linux/dma-iommu.h                 |   14 +
>   18 files changed, 679 insertions(+), 1730 deletions(-)
>   delete mode 100644 arch/arm/include/asm/dma-iommu.h
>   create mode 100644 drivers/iommu/dma-iommu-ops.c
>


-- 
?ark Yao

  parent reply	other threads:[~2016-04-18  2:18 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-19  8:22 [RFC 0/3] Unify IOMMU-based DMA-mapping code for ARM and ARM64 Marek Szyprowski
2016-02-19  8:22 ` [RFC 1/3] drm/exynos: rewrite IOMMU support code Marek Szyprowski
2016-02-19  8:22 ` [RFC 2/3] iommu: dma-iommu: move IOMMU/DMA-mapping code from ARM64 arch to drivers Marek Szyprowski
2016-04-18  2:20   ` Mark yao
2016-02-19  8:22 ` [RFC 3/3] iommu: dma-iommu: use common implementation also on ARM architecture Marek Szyprowski
2016-02-19 10:30   ` Arnd Bergmann
2016-02-25 12:26     ` Marek Szyprowski
2016-02-25 14:44       ` Arnd Bergmann
2016-03-15 12:33     ` Robin Murphy
2016-03-15 11:18   ` Magnus Damm
2016-03-15 11:45     ` Robin Murphy
2016-03-15 12:03     ` Marek Szyprowski
2016-04-18  2:20   ` Mark yao
2016-04-18  2:18 ` Mark yao [this message]
2016-04-19  3:17 ` [PATCH] drm/rockchip: rewrite IOMMU support code Mark Yao

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=571443FD.9090508@rock-chips.com \
    --to=mark.yao@rock-chips.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).