lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 066/846] drm/tegra: Add back arm_iommu_detach_device()
    Date
    From: Dmitry Osipenko <digetx@gmail.com>

    commit d210919dbdc8a82c676cc3e3c370b1802be63124 upstream.

    DMA buffers of 2D/3D engines aren't mapped properly when
    CONFIG_ARM_DMA_USE_IOMMU=y. The memory management code of Tegra DRM driver
    has a longstanding overhaul overdue and it's not obvious where the problem
    is in this case. Hence let's add back the old workaround which we already
    had sometime before. It explicitly detaches DRM devices from the offending
    implicit IOMMU domain. This fixes a completely broken 2d/3d drivers in
    case of ARM32 multiplatform kernel config.

    Cc: stable@vger.kernel.org
    Fixes: fa6661b7aa0b ("drm/tegra: Optionally attach clients to the IOMMU")
    Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/gpu/drm/tegra/drm.c | 15 +++++++++++++++
    1 file changed, 15 insertions(+)

    --- a/drivers/gpu/drm/tegra/drm.c
    +++ b/drivers/gpu/drm/tegra/drm.c
    @@ -21,6 +21,10 @@
    #include <drm/drm_prime.h>
    #include <drm/drm_vblank.h>

    +#if IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)
    +#include <asm/dma-iommu.h>
    +#endif
    +
    #include "dc.h"
    #include "drm.h"
    #include "gem.h"
    @@ -936,6 +940,17 @@ int host1x_client_iommu_attach(struct ho
    struct iommu_group *group = NULL;
    int err;

    +#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);
    +
    + domain = iommu_get_domain_for_dev(client->dev);
    + }
    +#endif
    +
    /*
    * If the host1x client is already attached to an IOMMU domain that is
    * not the shared IOMMU domain, don't try to attach it to a different

    \
     
     \ /
      Last update: 2022-01-24 23:10    [W:2.310 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site