iommu/mediatek: Set dma_mask for the master devices
authorYong Wu <yong.wu@mediatek.com>
Tue, 11 Apr 2023 09:31:39 +0000 (17:31 +0800)
committerJoerg Roedel <jroedel@suse.de>
Thu, 13 Apr 2023 09:59:27 +0000 (11:59 +0200)
MediaTek iommu arranges dma ranges for all the masters, this patch is to
help them set dma mask. This is to avoid each master setting their own
mask, but also to avoid a real issue, such as JPEG uses
"mediatek,mtk-jpgenc" for 2701/8183/8186/8188, then JPEG could ignore its
different dma_mask in different SoC to achieve common code.

Signed-off-by: Yong Wu <yong.wu@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Link: https://lore.kernel.org/r/20230411093144.2690-10-yong.wu@mediatek.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/mtk_iommu.c

index 9fee4b6efb7b9e7402edd2982ee8a9691e0ca5a6..95b1bdb58cbe1aafe7e272a102405ecd0a84aba3 100644 (file)
@@ -738,6 +738,14 @@ static int mtk_iommu_attach_device(struct iommu_domain *domain,
        }
        mutex_unlock(&data->mutex);
 
+       if (region_id > 0) {
+               ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(34));
+               if (ret) {
+                       dev_err(m4udev, "Failed to set dma_mask for %s(%d).\n", dev_name(dev), ret);
+                       return ret;
+               }
+       }
+
        return mtk_iommu_config(data, dev, true, region_id);
 
 err_unlock: