Message ID | 20180819142421.22567-1-digetx@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v1] drm/tegra: Detach devices from IOMMU DMA domain on arm32 | expand |
On Sun, Aug 19, 2018 at 05:24:20PM +0300, Dmitry Osipenko wrote: > All Tegra DRM devices are getting attached to an implicit IOMMU DMA > domain if CONFIG_ARM_DMA_USE_IOMMU=y. Since Tegra DRM driver manages IOMMU > by itself, the devices must be detached from the implicit domain using > arch-specific IOMMU-API. Note that this works only for arm32 and not for > arm64, which will remain broken if CONFIG_IOMMU_DMA is enabled. > > Signed-off-by: Dmitry Osipenko <digetx@gmail.com> > --- > drivers/gpu/drm/tegra/drm.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) Applied, thanks. Thierry
diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c index a2bd5876c633..b2ac2411e0ff 100644 --- a/drivers/gpu/drm/tegra/drm.c +++ b/drivers/gpu/drm/tegra/drm.c @@ -15,6 +15,10 @@ #include <drm/drm_atomic.h> #include <drm/drm_atomic_helper.h> +#if IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU) +#include <asm/dma-iommu.h> +#endif + #include "drm.h" #include "gem.h" @@ -1068,6 +1072,14 @@ struct iommu_group *host1x_client_iommu_attach(struct host1x_client *client, } if (!shared || (shared && (group != tegra->group))) { +#if IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU) + if (client->dev->archdata.mapping) { + struct dma_iommu_mapping *mapping = + to_dma_iommu_mapping(client->dev); + arm_iommu_detach_device(client->dev); + arm_iommu_release_mapping(mapping); + } +#endif err = iommu_attach_group(tegra->domain, group); if (err < 0) { iommu_group_put(group);
All Tegra DRM devices are getting attached to an implicit IOMMU DMA domain if CONFIG_ARM_DMA_USE_IOMMU=y. Since Tegra DRM driver manages IOMMU by itself, the devices must be detached from the implicit domain using arch-specific IOMMU-API. Note that this works only for arm32 and not for arm64, which will remain broken if CONFIG_IOMMU_DMA is enabled. Signed-off-by: Dmitry Osipenko <digetx@gmail.com> --- drivers/gpu/drm/tegra/drm.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)