Thanks, this fixes the DRM driver on 5.19-rc2 on the rk3288-veyron-jaq. Tested-by: Tomeu Vizoso <tomeu.viz...@collabora.com>
Cheers, Tomeu On Wed, Jun 15, 2022 at 5:52 PM Steven Price <steven.pr...@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.mur...@arm.com> > Signed-off-by: Steven Price <steven.pr...@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 > >