Skip to content

Commit 7e87226

Browse files
zhengnan-chenjoergroedel
authored andcommitted
iommu/mediatek: mt8189: Add APU IOMMUs support
Add support for mt8189 APU IOMMUs. Signed-off-by: Zhengnan Chen <zhengnan.chen@mediatek.com> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> Reviewed-by: Yong Wu <yong.wu@mediatek.com> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
1 parent 97c7b66 commit 7e87226

1 file changed

Lines changed: 34 additions & 0 deletions

File tree

drivers/iommu/mtk_iommu.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@
139139
/* 2 bits: iommu type */
140140
#define MTK_IOMMU_TYPE_MM (0x0 << 13)
141141
#define MTK_IOMMU_TYPE_INFRA (0x1 << 13)
142+
#define MTK_IOMMU_TYPE_APU (0x2 << 13)
142143
#define MTK_IOMMU_TYPE_MASK (0x3 << 13)
143144
/* PM and clock always on. e.g. infra iommu */
144145
#define PM_CLK_AO BIT(15)
@@ -173,6 +174,7 @@ enum mtk_iommu_plat {
173174
M4U_MT8183,
174175
M4U_MT8186,
175176
M4U_MT8188,
177+
M4U_MT8189,
176178
M4U_MT8192,
177179
M4U_MT8195,
178180
M4U_MT8365,
@@ -336,6 +338,7 @@ static int mtk_iommu_hw_init(const struct mtk_iommu_data *data, unsigned int ban
336338
*/
337339
#define MTK_IOMMU_4GB_MODE_REMAP_BASE 0x140000000UL
338340

341+
static LIST_HEAD(apulist); /* List the apu iommu HWs */
339342
static LIST_HEAD(m4ulist); /* List all the M4U HWs */
340343

341344
#define for_each_m4u(data, head) list_for_each_entry(data, head, list)
@@ -351,6 +354,15 @@ static const struct mtk_iommu_iova_region single_domain[] = {
351354
#define MT8192_MULTI_REGION_NR (IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT) ? \
352355
MT8192_MULTI_REGION_NR_MAX : 1)
353356

357+
static const struct mtk_iommu_iova_region mt8189_multi_dom_apu[] = {
358+
{ .iova_base = 0x200000ULL, .size = SZ_512M}, /* APU SECURE */
359+
#if IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT)
360+
{ .iova_base = SZ_1G, .size = 0xc0000000}, /* APU CODE */
361+
{ .iova_base = 0x70000000ULL, .size = 0x12600000}, /* APU VLM */
362+
{ .iova_base = SZ_4G, .size = SZ_4G * 3}, /* APU VPU */
363+
#endif
364+
};
365+
354366
static const struct mtk_iommu_iova_region mt8192_multi_dom[MT8192_MULTI_REGION_NR] = {
355367
{ .iova_base = 0x0, .size = MTK_IOMMU_IOVA_SZ_4G}, /* 0 ~ 4G, */
356368
#if IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT)
@@ -1725,6 +1737,27 @@ static const struct mtk_iommu_plat_data mt8188_data_vpp = {
17251737
27, 28 /* ccu0 */, MTK_INVALID_LARBID}, {4, 6}},
17261738
};
17271739

1740+
static const unsigned int mt8189_apu_region_msk[][MTK_LARB_NR_MAX] = {
1741+
[0] = {[0] = BIT(2)}, /* Region0: fake larb 0 APU_SECURE */
1742+
[1] = {[0] = BIT(1)}, /* Region1: fake larb 0 APU_CODE */
1743+
[2] = {[0] = BIT(3)}, /* Region2: fake larb 0 APU_VLM */
1744+
[3] = {[0] = BIT(0)}, /* Region3: fake larb 0 APU_DATA */
1745+
};
1746+
1747+
static const struct mtk_iommu_plat_data mt8189_data_apu = {
1748+
.m4u_plat = M4U_MT8189,
1749+
.flags = IOVA_34_EN | DCM_DISABLE |
1750+
MTK_IOMMU_TYPE_APU | PGTABLE_PA_35_EN,
1751+
.hw_list = &apulist,
1752+
.inv_sel_reg = REG_MMU_INV_SEL_GEN2,
1753+
.banks_num = 1,
1754+
.banks_enable = {true},
1755+
.iova_region = mt8189_multi_dom_apu,
1756+
.iova_region_nr = ARRAY_SIZE(mt8189_multi_dom_apu),
1757+
.larbid_remap = {{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}},
1758+
.iova_region_larb_msk = mt8189_apu_region_msk,
1759+
};
1760+
17281761
static const struct mtk_iommu_plat_data mt8192_data = {
17291762
.m4u_plat = M4U_MT8192,
17301763
.flags = HAS_BCLK | HAS_SUB_COMM_2BITS | OUT_ORDER_WR_EN |
@@ -1826,6 +1859,7 @@ static const struct of_device_id mtk_iommu_of_ids[] = {
18261859
{ .compatible = "mediatek,mt8188-iommu-infra", .data = &mt8188_data_infra},
18271860
{ .compatible = "mediatek,mt8188-iommu-vdo", .data = &mt8188_data_vdo},
18281861
{ .compatible = "mediatek,mt8188-iommu-vpp", .data = &mt8188_data_vpp},
1862+
{ .compatible = "mediatek,mt8189-iommu-apu", .data = &mt8189_data_apu},
18291863
{ .compatible = "mediatek,mt8192-m4u", .data = &mt8192_data},
18301864
{ .compatible = "mediatek,mt8195-iommu-infra", .data = &mt8195_data_infra},
18311865
{ .compatible = "mediatek,mt8195-iommu-vdo", .data = &mt8195_data_vdo},

0 commit comments

Comments
 (0)