[PATCH] drm/rockchip: Detach from ARM DMA domain in attach_device

Tomeu Vizoso tomeu at tomeuvizoso.net
Mon Jul 4 15:13:34 UTC 2022


Thanks, this fixes the DRM driver on 5.19-rc2 on the rk3288-veyron-jaq.

Tested-by: Tomeu Vizoso <tomeu.vizoso at collabora.com>

Cheers,

Tomeu

On Wed, Jun 15, 2022 at 5:52 PM Steven Price <steven.price at arm.com> wrote:

> Since commit 1ea2a07a532b ("iommu: Add DMA ownership management
> interfaces") the Rockchip display driver on the Firefly RK3288 fails to
> initialise properly. This is because ARM DMA domain is still attached.
>
> Let's follow the lead of exynos and tegra and add code to explicitly
> remove the ARM domain before attaching a new one.
>
> Suggested-by: Robin Murphy <robin.murphy at arm.com>
> Signed-off-by: Steven Price <steven.price at arm.com>
> ---
> See also the thread[1] where I reported the regression.
>
> [1]
> https://lore.kernel.org/linux-kernel/da9cca0a-ec5b-2e73-9de0-a930f7d947b2%40arm.com
> ---
>  drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
>
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> index 67d38f53d3e5..13ed33e74457 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
> @@ -23,6 +23,14 @@
>  #include <drm/drm_probe_helper.h>
>  #include <drm/drm_vblank.h>
>
> +#if defined(CONFIG_ARM_DMA_USE_IOMMU)
> +#include <asm/dma-iommu.h>
> +#else
> +#define arm_iommu_detach_device(...)   ({ })
> +#define arm_iommu_release_mapping(...) ({ })
> +#define to_dma_iommu_mapping(dev) NULL
> +#endif
> +
>  #include "rockchip_drm_drv.h"
>  #include "rockchip_drm_fb.h"
>  #include "rockchip_drm_gem.h"
> @@ -49,6 +57,15 @@ int rockchip_drm_dma_attach_device(struct drm_device
> *drm_dev,
>         if (!private->domain)
>                 return 0;
>
> +       if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)) {
> +               struct dma_iommu_mapping *mapping =
> to_dma_iommu_mapping(dev);
> +
> +               if (mapping) {
> +                       arm_iommu_detach_device(dev);
> +                       arm_iommu_release_mapping(mapping);
> +               }
> +       }
> +
>         ret = iommu_attach_device(private->domain, dev);
>         if (ret) {
>                 DRM_DEV_ERROR(dev, "Failed to attach iommu device\n");
> --
> 2.25.1
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20220704/663c3aae/attachment-0001.htm>


More information about the dri-devel mailing list