iommu/mediatek: Add a flag for iova 34bits case
authorYong Wu <yong.wu@mediatek.com>
Mon, 11 Jan 2021 11:18:55 +0000 (19:18 +0800)
committerWill Deacon <will@kernel.org>
Mon, 1 Feb 2021 11:31:17 +0000 (11:31 +0000)
Add a HW flag for if the HW support 34bit IOVA. the previous SoC
still use 32bit. normally the lvl1 pgtable size is 16KB when ias == 32.
if ias == 34, lvl1 pgtable size is 16KB * 4. The purpose of this patch
is to save 16KB*3 continuous memory for the previous SoC.

Signed-off-by: Yong Wu <yong.wu@mediatek.com>
Reviewed-by: Tomasz Figa <tfiga@chromium.org>
Link: https://lore.kernel.org/r/20210111111914.22211-15-yong.wu@mediatek.com
Signed-off-by: Will Deacon <will@kernel.org>
drivers/iommu/mtk_iommu.c

index 485f3b6d1a219a56c7e89b850bf34d1a7d80c78b..bf1277d5812108b8d1902c6ab943df6b3063ec30 100644 (file)
 #define HAS_SUB_COMM                   BIT(5)
 #define WR_THROT_EN                    BIT(6)
 #define HAS_LEGACY_IVRP_PADDR          BIT(7)
+#define IOVA_34_EN                     BIT(8)
 
 #define MTK_IOMMU_HAS_FLAG(pdata, _x) \
                ((((pdata)->flags) & (_x)) == (_x))
@@ -299,7 +300,7 @@ static int mtk_iommu_domain_finalise(struct mtk_iommu_domain *dom)
                        IO_PGTABLE_QUIRK_NO_PERMS |
                        IO_PGTABLE_QUIRK_ARM_MTK_EXT,
                .pgsize_bitmap = mtk_iommu_ops.pgsize_bitmap,
-               .ias = 32,
+               .ias = MTK_IOMMU_HAS_FLAG(data->plat_data, IOVA_34_EN) ? 34 : 32,
                .oas = 35,
                .iommu_dev = data->dev,
        };