|
105 | 105 | #define REG_MMU1_INT_ID 0x154 |
106 | 106 | #define F_MMU_INT_ID_COMM_ID(a) (((a) >> 9) & 0x7) |
107 | 107 | #define F_MMU_INT_ID_SUB_COMM_ID(a) (((a) >> 7) & 0x3) |
| 108 | +#define F_MMU_INT_ID_COMM_ID_EXT(a) (((a) >> 10) & 0x7) |
| 109 | +#define F_MMU_INT_ID_SUB_COMM_ID_EXT(a) (((a) >> 7) & 0x7) |
108 | 110 | #define F_MMU_INT_ID_LARB_ID(a) (((a) >> 7) & 0x7) |
109 | 111 | #define F_MMU_INT_ID_PORT_ID(a) (((a) >> 2) & 0x1f) |
110 | 112 |
|
|
116 | 118 | #define HAS_VLD_PA_RNG BIT(2) |
117 | 119 | #define RESET_AXI BIT(3) |
118 | 120 | #define OUT_ORDER_WR_EN BIT(4) |
119 | | -#define HAS_SUB_COMM BIT(5) |
120 | | -#define WR_THROT_EN BIT(6) |
121 | | -#define HAS_LEGACY_IVRP_PADDR BIT(7) |
122 | | -#define IOVA_34_EN BIT(8) |
123 | | -#define SHARE_PGTABLE BIT(9) /* 2 HW share pgtable */ |
124 | | -#define DCM_DISABLE BIT(10) |
125 | | -#define STD_AXI_MODE BIT(11) /* For non MM iommu */ |
| 121 | +#define HAS_SUB_COMM_2BITS BIT(5) |
| 122 | +#define HAS_SUB_COMM_3BITS BIT(6) |
| 123 | +#define WR_THROT_EN BIT(7) |
| 124 | +#define HAS_LEGACY_IVRP_PADDR BIT(8) |
| 125 | +#define IOVA_34_EN BIT(9) |
| 126 | +#define SHARE_PGTABLE BIT(10) /* 2 HW share pgtable */ |
| 127 | +#define DCM_DISABLE BIT(11) |
| 128 | +#define STD_AXI_MODE BIT(12) /* For non MM iommu */ |
126 | 129 |
|
127 | 130 | #define MTK_IOMMU_HAS_FLAG(pdata, _x) \ |
128 | 131 | ((((pdata)->flags) & (_x)) == (_x)) |
@@ -290,9 +293,12 @@ static irqreturn_t mtk_iommu_isr(int irq, void *dev_id) |
290 | 293 | fault_pa |= (u64)pa34_32 << 32; |
291 | 294 |
|
292 | 295 | fault_port = F_MMU_INT_ID_PORT_ID(regval); |
293 | | - if (MTK_IOMMU_HAS_FLAG(data->plat_data, HAS_SUB_COMM)) { |
| 296 | + if (MTK_IOMMU_HAS_FLAG(data->plat_data, HAS_SUB_COMM_2BITS)) { |
294 | 297 | fault_larb = F_MMU_INT_ID_COMM_ID(regval); |
295 | 298 | sub_comm = F_MMU_INT_ID_SUB_COMM_ID(regval); |
| 299 | + } else if (MTK_IOMMU_HAS_FLAG(data->plat_data, HAS_SUB_COMM_3BITS)) { |
| 300 | + fault_larb = F_MMU_INT_ID_COMM_ID_EXT(regval); |
| 301 | + sub_comm = F_MMU_INT_ID_SUB_COMM_ID_EXT(regval); |
296 | 302 | } else { |
297 | 303 | fault_larb = F_MMU_INT_ID_LARB_ID(regval); |
298 | 304 | } |
@@ -1068,7 +1074,7 @@ static const struct mtk_iommu_plat_data mt2712_data = { |
1068 | 1074 |
|
1069 | 1075 | static const struct mtk_iommu_plat_data mt6779_data = { |
1070 | 1076 | .m4u_plat = M4U_MT6779, |
1071 | | - .flags = HAS_SUB_COMM | OUT_ORDER_WR_EN | WR_THROT_EN, |
| 1077 | + .flags = HAS_SUB_COMM_2BITS | OUT_ORDER_WR_EN | WR_THROT_EN, |
1072 | 1078 | .inv_sel_reg = REG_MMU_INV_SEL_GEN2, |
1073 | 1079 | .iova_region = single_domain, |
1074 | 1080 | .iova_region_nr = ARRAY_SIZE(single_domain), |
@@ -1105,7 +1111,7 @@ static const struct mtk_iommu_plat_data mt8183_data = { |
1105 | 1111 |
|
1106 | 1112 | static const struct mtk_iommu_plat_data mt8192_data = { |
1107 | 1113 | .m4u_plat = M4U_MT8192, |
1108 | | - .flags = HAS_BCLK | HAS_SUB_COMM | OUT_ORDER_WR_EN | |
| 1114 | + .flags = HAS_BCLK | HAS_SUB_COMM_2BITS | OUT_ORDER_WR_EN | |
1109 | 1115 | WR_THROT_EN | IOVA_34_EN, |
1110 | 1116 | .inv_sel_reg = REG_MMU_INV_SEL_GEN2, |
1111 | 1117 | .iova_region = mt8192_multi_dom, |
|
0 commit comments