[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