@@ -170,6 +170,7 @@ enum mtk_iommu_plat {
170170 M4U_MT8173 ,
171171 M4U_MT8183 ,
172172 M4U_MT8186 ,
173+ M4U_MT8188 ,
173174 M4U_MT8192 ,
174175 M4U_MT8195 ,
175176 M4U_MT8365 ,
@@ -1594,6 +1595,51 @@ static const struct mtk_iommu_plat_data mt8186_data_mm = {
15941595 .iova_region_larb_msk = mt8186_larb_region_msk ,
15951596};
15961597
1598+ static const struct mtk_iommu_plat_data mt8188_data_infra = {
1599+ .m4u_plat = M4U_MT8188 ,
1600+ .flags = WR_THROT_EN | DCM_DISABLE | STD_AXI_MODE | PM_CLK_AO |
1601+ MTK_IOMMU_TYPE_INFRA | IFA_IOMMU_PCIE_SUPPORT |
1602+ PGTABLE_PA_35_EN | CFG_IFA_MASTER_IN_ATF ,
1603+ .inv_sel_reg = REG_MMU_INV_SEL_GEN2 ,
1604+ .banks_num = 1 ,
1605+ .banks_enable = {true},
1606+ .iova_region = single_domain ,
1607+ .iova_region_nr = ARRAY_SIZE (single_domain ),
1608+ };
1609+
1610+ static const struct mtk_iommu_plat_data mt8188_data_vdo = {
1611+ .m4u_plat = M4U_MT8188 ,
1612+ .flags = HAS_BCLK | HAS_SUB_COMM_3BITS | OUT_ORDER_WR_EN |
1613+ WR_THROT_EN | IOVA_34_EN | SHARE_PGTABLE |
1614+ PGTABLE_PA_35_EN | MTK_IOMMU_TYPE_MM ,
1615+ .hw_list = & m4ulist ,
1616+ .inv_sel_reg = REG_MMU_INV_SEL_GEN2 ,
1617+ .banks_num = 1 ,
1618+ .banks_enable = {true},
1619+ .iova_region = mt8192_multi_dom ,
1620+ .iova_region_nr = ARRAY_SIZE (mt8192_multi_dom ),
1621+ .larbid_remap = {{2 }, {0 }, {21 }, {0 }, {19 }, {9 , 10 ,
1622+ 11 /* 11a */ , 25 /* 11c */ },
1623+ {13 , 0 , 29 /* 16b */ , 30 /* 17b */ , 0 }, {5 }},
1624+ };
1625+
1626+ static const struct mtk_iommu_plat_data mt8188_data_vpp = {
1627+ .m4u_plat = M4U_MT8188 ,
1628+ .flags = HAS_BCLK | HAS_SUB_COMM_3BITS | OUT_ORDER_WR_EN |
1629+ WR_THROT_EN | IOVA_34_EN | SHARE_PGTABLE |
1630+ PGTABLE_PA_35_EN | MTK_IOMMU_TYPE_MM ,
1631+ .hw_list = & m4ulist ,
1632+ .inv_sel_reg = REG_MMU_INV_SEL_GEN2 ,
1633+ .banks_num = 1 ,
1634+ .banks_enable = {true},
1635+ .iova_region = mt8192_multi_dom ,
1636+ .iova_region_nr = ARRAY_SIZE (mt8192_multi_dom ),
1637+ .larbid_remap = {{1 }, {3 }, {23 }, {7 }, {MTK_INVALID_LARBID },
1638+ {12 , 15 , 24 /* 11b */ }, {14 , MTK_INVALID_LARBID ,
1639+ 16 /* 16a */ , 17 /* 17a */ , MTK_INVALID_LARBID ,
1640+ 27 , 28 /* ccu0 */ , MTK_INVALID_LARBID }, {4 , 6 }},
1641+ };
1642+
15971643static const unsigned int mt8192_larb_region_msk [MT8192_MULTI_REGION_NR_MAX ][MTK_LARB_NR_MAX ] = {
15981644 [0 ] = {~0 , ~0 }, /* Region0: larb0/1 */
15991645 [1 ] = {0 , 0 , 0 , 0 , ~0 , ~0 , 0 , ~0 }, /* Region1: larb4/5/7 */
@@ -1702,6 +1748,9 @@ static const struct of_device_id mtk_iommu_of_ids[] = {
17021748 { .compatible = "mediatek,mt8173-m4u" , .data = & mt8173_data },
17031749 { .compatible = "mediatek,mt8183-m4u" , .data = & mt8183_data },
17041750 { .compatible = "mediatek,mt8186-iommu-mm" , .data = & mt8186_data_mm }, /* mm: m4u */
1751+ { .compatible = "mediatek,mt8188-iommu-infra" , .data = & mt8188_data_infra },
1752+ { .compatible = "mediatek,mt8188-iommu-vdo" , .data = & mt8188_data_vdo },
1753+ { .compatible = "mediatek,mt8188-iommu-vpp" , .data = & mt8188_data_vpp },
17051754 { .compatible = "mediatek,mt8192-m4u" , .data = & mt8192_data },
17061755 { .compatible = "mediatek,mt8195-iommu-infra" , .data = & mt8195_data_infra },
17071756 { .compatible = "mediatek,mt8195-iommu-vdo" , .data = & mt8195_data_vdo },
0 commit comments