Message ID | 20220615154830.555422-1-steven.price@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/rockchip: Detach from ARM DMA domain in attach_device | expand |
Thanks, this fixes the DRM driver on 5.19-rc2 on the rk3288-veyron-jaq. Tested-by: Tomeu Vizoso <tomeu.vizoso@collabora.com> Cheers, Tomeu On Wed, Jun 15, 2022 at 5:52 PM Steven Price <steven.price@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@arm.com> > Signed-off-by: Steven Price <steven.price@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 > >
On Wed, 15 Jun 2022 16:48:30 +0100, Steven Price 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. Applied, thanks! [1/1] drm/rockchip: Detach from ARM DMA domain in attach_device commit: 8490cad4dc4e2ee265ba9e12cd47bdfd6b9a3d34 Best regards,
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");
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@arm.com> Signed-off-by: Steven Price <steven.price@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(+)