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 065/846] gpu: host1x: Add back arm_iommu_detach_device()
    Date
    From: Dmitry Osipenko <digetx@gmail.com>

    commit d5185965c3b59073c4520bad7dd2adf725b9abba upstream.

    Host1x DMA buffer isn't mapped properly when CONFIG_ARM_DMA_USE_IOMMU=y.
    The memory management code of Host1x 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 Host1x device from the offending implicit IOMMU
    domain. This fixes a completely broken Host1x DMA in case of ARM32
    multiplatform kernel config.

    Cc: stable@vger.kernel.org
    Fixes: af1cbfb9bf0f ("gpu: host1x: Support DMA mapping of buffers")
    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/host1x/dev.c | 15 +++++++++++++++
    1 file changed, 15 insertions(+)

    --- a/drivers/gpu/host1x/dev.c
    +++ b/drivers/gpu/host1x/dev.c
    @@ -18,6 +18,10 @@
    #include <trace/events/host1x.h>
    #undef CREATE_TRACE_POINTS

    +#if IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)
    +#include <asm/dma-iommu.h>
    +#endif
    +
    #include "bus.h"
    #include "channel.h"
    #include "debug.h"
    @@ -238,6 +242,17 @@ static struct iommu_domain *host1x_iommu
    struct iommu_domain *domain = iommu_get_domain_for_dev(host->dev);
    int err;

    +#if IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU)
    + if (host->dev->archdata.mapping) {
    + struct dma_iommu_mapping *mapping =
    + to_dma_iommu_mapping(host->dev);
    + arm_iommu_detach_device(host->dev);
    + arm_iommu_release_mapping(mapping);
    +
    + domain = iommu_get_domain_for_dev(host->dev);
    + }
    +#endif
    +
    /*
    * We may not always want to enable IOMMU support (for example if the
    * host1x firewall is already enabled and we don't support addressing

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