ARM: 9417/1: dma-mapping: Pass device to arm_iommu_create_mapping()
authorJason Gunthorpe <jgg@ziepe.ca>
Wed, 4 Sep 2024 12:36:02 +0000 (13:36 +0100)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Wed, 4 Sep 2024 14:02:07 +0000 (15:02 +0100)
All users of ARM IOMMU mappings create them for a particular device, so
change the interface to accept the device rather than forcing a vague
indirection through a bus type. This prepares for making a similar
change to iommu_domain_alloc() itself.

Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Vasant Hegde <vasant.hegde@amd.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Signed-off-by: Jason Gunthorpe <jgg@ziepe.ca>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
arch/arm/include/asm/dma-iommu.h
arch/arm/mm/dma-mapping.c
drivers/gpu/drm/exynos/exynos_drm_dma.c
drivers/iommu/ipmmu-vmsa.c
drivers/iommu/mtk_iommu_v1.c
drivers/media/platform/ti/omap3isp/isp.c

index 82ec1ccf1fee4c110881045b7f057fc6caea23b7..2ce4c5683e6d3cfae6116b359e1f09dbd101b400 100644 (file)
@@ -24,7 +24,7 @@ struct dma_iommu_mapping {
 };
 
 struct dma_iommu_mapping *
-arm_iommu_create_mapping(const struct bus_type *bus, dma_addr_t base, u64 size);
+arm_iommu_create_mapping(struct device *dev, dma_addr_t base, u64 size);
 
 void arm_iommu_release_mapping(struct dma_iommu_mapping *mapping);
 
index 5adf1769eee4245c383883a1b62ebd2e96eabda3..52f9c56cc3cbbe714cece2775b210c81ff88d294 100644 (file)
@@ -1532,7 +1532,7 @@ static const struct dma_map_ops iommu_ops = {
 
 /**
  * arm_iommu_create_mapping
- * @bus: pointer to the bus holding the client device (for IOMMU calls)
+ * @dev: pointer to the client device (for IOMMU calls)
  * @base: start address of the valid IO address space
  * @size: maximum size of the valid IO address space
  *
@@ -1544,7 +1544,7 @@ static const struct dma_map_ops iommu_ops = {
  * arm_iommu_attach_device function.
  */
 struct dma_iommu_mapping *
-arm_iommu_create_mapping(const struct bus_type *bus, dma_addr_t base, u64 size)
+arm_iommu_create_mapping(struct device *dev, dma_addr_t base, u64 size)
 {
        unsigned int bits = size >> PAGE_SHIFT;
        unsigned int bitmap_size = BITS_TO_LONGS(bits) * sizeof(long);
@@ -1585,7 +1585,7 @@ arm_iommu_create_mapping(const struct bus_type *bus, dma_addr_t base, u64 size)
 
        spin_lock_init(&mapping->lock);
 
-       mapping->domain = iommu_domain_alloc(bus);
+       mapping->domain = iommu_domain_alloc(dev->bus);
        if (!mapping->domain)
                goto err4;
 
@@ -1718,7 +1718,7 @@ static void arm_setup_iommu_dma_ops(struct device *dev)
                dma_base = dma_range_map_min(dev->dma_range_map);
                size = dma_range_map_max(dev->dma_range_map) - dma_base;
        }
-       mapping = arm_iommu_create_mapping(dev->bus, dma_base, size);
+       mapping = arm_iommu_create_mapping(dev, dma_base, size);
        if (IS_ERR(mapping)) {
                pr_warn("Failed to create %llu-byte IOMMU mapping for device %s\n",
                                size, dev_name(dev));
index e2c7373f20c6b791f9706c1dad0758f363c63073..6a6761935224ceb3aeb30649e5fc433199bbd955 100644 (file)
@@ -110,7 +110,7 @@ int exynos_drm_register_dma(struct drm_device *drm, struct device *dev,
                void *mapping = NULL;
 
                if (IS_ENABLED(CONFIG_ARM_DMA_USE_IOMMU))
-                       mapping = arm_iommu_create_mapping(&platform_bus_type,
+                       mapping = arm_iommu_create_mapping(dev,
                                EXYNOS_DEV_ADDR_START, EXYNOS_DEV_ADDR_SIZE);
                else if (IS_ENABLED(CONFIG_IOMMU_DMA))
                        mapping = iommu_get_domain_for_dev(priv->dma_dev);
index b657cc09605f4d482e08c7851b3bd664611f18a1..ff55b8c307126945d5583241d20ed2ba4597842a 100644 (file)
@@ -804,8 +804,7 @@ static int ipmmu_init_arm_mapping(struct device *dev)
        if (!mmu->mapping) {
                struct dma_iommu_mapping *mapping;
 
-               mapping = arm_iommu_create_mapping(&platform_bus_type,
-                                                  SZ_1G, SZ_2G);
+               mapping = arm_iommu_create_mapping(dev, SZ_1G, SZ_2G);
                if (IS_ERR(mapping)) {
                        dev_err(mmu->dev, "failed to create ARM IOMMU mapping\n");
                        ret = PTR_ERR(mapping);
index c6ea5b4baff3be9d3b518175ba5816e69f94e132..ee4e55b6b1900308bd06961d71269953e36e1e51 100644 (file)
@@ -433,8 +433,7 @@ static int mtk_iommu_v1_create_mapping(struct device *dev,
        mtk_mapping = data->mapping;
        if (!mtk_mapping) {
                /* MTK iommu support 4GB iova address space. */
-               mtk_mapping = arm_iommu_create_mapping(&platform_bus_type,
-                                               0, 1ULL << 32);
+               mtk_mapping = arm_iommu_create_mapping(dev, 0, 1ULL << 32);
                if (IS_ERR(mtk_mapping))
                        return PTR_ERR(mtk_mapping);
 
index 1cda23244c7bc70a8f3092ad9e434e2a0df31bb3..91101ba88ef01f44ea0a9e764204f9630160938a 100644 (file)
@@ -1965,7 +1965,7 @@ static int isp_attach_iommu(struct isp_device *isp)
         * Create the ARM mapping, used by the ARM DMA mapping core to allocate
         * VAs. This will allocate a corresponding IOMMU domain.
         */
-       mapping = arm_iommu_create_mapping(&platform_bus_type, SZ_1G, SZ_2G);
+       mapping = arm_iommu_create_mapping(isp->dev, SZ_1G, SZ_2G);
        if (IS_ERR(mapping)) {
                dev_err(isp->dev, "failed to create ARM IOMMU mapping\n");
                return PTR_ERR(mapping);