Commit 1dc7c8ed authored by Robin Murphy's avatar Robin Murphy Committed by Mathieu Poirier
Browse files

remoteproc: omap: Handle ARM dma_iommu_mapping



It's no longer practical for the OMAP IOMMU driver to trick
arm_setup_iommu_dma_ops() into ignoring its presence, so let's use the
same tactic as other IOMMU API users on 32-bit ARM and explicitly kick
the arch code's dma_iommu_mapping out of the way to avoid problems.

Fixes: 4720287c ("iommu: Remove struct iommu_ops *iommu from arch_setup_dma_ops()")
Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
Tested-by: default avatarBeleswar Padhi <b-padhi@ti.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/6186e311cb6f64a787f87fd41e49a73f409b789c.1730136799.git.robin.murphy@arm.com


[Fixed changelog title]
Signed-off-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
parent 7378aeb6
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -37,6 +37,10 @@

#include <linux/platform_data/dmtimer-omap.h>

#ifdef CONFIG_ARM_DMA_USE_IOMMU
#include <asm/dma-iommu.h>
#endif

#include "omap_remoteproc.h"
#include "remoteproc_internal.h"

@@ -1323,6 +1327,19 @@ static int omap_rproc_probe(struct platform_device *pdev)
	/* All existing OMAP IPU and DSP processors have an MMU */
	rproc->has_iommu = true;

#ifdef CONFIG_ARM_DMA_USE_IOMMU
	/*
	 * Throw away the ARM DMA mapping that we'll never use, so it doesn't
	 * interfere with the core rproc->domain and we get the right DMA ops.
	 */
	if (pdev->dev.archdata.mapping) {
		struct dma_iommu_mapping *mapping = to_dma_iommu_mapping(&pdev->dev);

		arm_iommu_detach_device(&pdev->dev);
		arm_iommu_release_mapping(mapping);
	}
#endif

	ret = omap_rproc_of_get_internal_memories(pdev, rproc);
	if (ret)
		return ret;