@@ -170,6 +170,7 @@ enum mtk_iommu_plat {
170
170
M4U_MT8173 ,
171
171
M4U_MT8183 ,
172
172
M4U_MT8186 ,
173
+ M4U_MT8188 ,
173
174
M4U_MT8192 ,
174
175
M4U_MT8195 ,
175
176
M4U_MT8365 ,
@@ -1594,6 +1595,51 @@ static const struct mtk_iommu_plat_data mt8186_data_mm = {
1594
1595
.iova_region_larb_msk = mt8186_larb_region_msk ,
1595
1596
};
1596
1597
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
+
1597
1643
static const unsigned int mt8192_larb_region_msk [MT8192_MULTI_REGION_NR_MAX ][MTK_LARB_NR_MAX ] = {
1598
1644
[0 ] = {~0 , ~0 }, /* Region0: larb0/1 */
1599
1645
[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[] = {
1702
1748
{ .compatible = "mediatek,mt8173-m4u" , .data = & mt8173_data },
1703
1749
{ .compatible = "mediatek,mt8183-m4u" , .data = & mt8183_data },
1704
1750
{ .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 },
1705
1754
{ .compatible = "mediatek,mt8192-m4u" , .data = & mt8192_data },
1706
1755
{ .compatible = "mediatek,mt8195-iommu-infra" , .data = & mt8195_data_infra },
1707
1756
{ .compatible = "mediatek,mt8195-iommu-vdo" , .data = & mt8195_data_vdo },
0 commit comments