Skip to content

Commit a09e840

Browse files
xuchengci24968joergroedel
authored andcommitted
iommu/mediatek: Add MT8188 IOMMU Support
MT8188 has 3 IOMMU, containing 2 MM IOMMUs, one is for vdo, the other is for vpp. and 1 INFRA IOMMU. Signed-off-by: Chengci.Xu <[email protected]> Signed-off-by: Yong Wu <[email protected]> Reviewed-by: AngeloGioacchino Del Regno <[email protected]> Reviewed-by: Alexandre Mergnat <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Joerg Roedel <[email protected]>
1 parent 946e719 commit a09e840

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

drivers/iommu/mtk_iommu.c

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
15971643
static 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

Comments
 (0)