|
108 | 108 | #define F_MMU_INT_ID_SUB_COMM_ID(a) (((a) >> 7) & 0x3)
|
109 | 109 | #define F_MMU_INT_ID_COMM_ID_EXT(a) (((a) >> 10) & 0x7)
|
110 | 110 | #define F_MMU_INT_ID_SUB_COMM_ID_EXT(a) (((a) >> 7) & 0x7)
|
| 111 | +/* Macro for 5 bits length port ID field (default) */ |
111 | 112 | #define F_MMU_INT_ID_LARB_ID(a) (((a) >> 7) & 0x7)
|
112 | 113 | #define F_MMU_INT_ID_PORT_ID(a) (((a) >> 2) & 0x1f)
|
| 114 | +/* Macro for 6 bits length port ID field */ |
| 115 | +#define F_MMU_INT_ID_LARB_ID_WID_6(a) (((a) >> 8) & 0x7) |
| 116 | +#define F_MMU_INT_ID_PORT_ID_WID_6(a) (((a) >> 2) & 0x3f) |
113 | 117 |
|
114 | 118 | #define MTK_PROTECT_PA_ALIGN 256
|
115 | 119 | #define MTK_IOMMU_BANK_SZ 0x1000
|
|
139 | 143 | #define IFA_IOMMU_PCIE_SUPPORT BIT(16)
|
140 | 144 | #define PGTABLE_PA_35_EN BIT(17)
|
141 | 145 | #define TF_PORT_TO_ADDR_MT8173 BIT(18)
|
| 146 | +#define INT_ID_PORT_WIDTH_6 BIT(19) |
142 | 147 |
|
143 | 148 | #define MTK_IOMMU_HAS_FLAG_MASK(pdata, _x, mask) \
|
144 | 149 | ((((pdata)->flags) & (mask)) == (_x))
|
@@ -441,14 +446,19 @@ static irqreturn_t mtk_iommu_isr(int irq, void *dev_id)
|
441 | 446 | fault_pa |= (u64)pa34_32 << 32;
|
442 | 447 |
|
443 | 448 | if (MTK_IOMMU_IS_TYPE(plat_data, MTK_IOMMU_TYPE_MM)) {
|
444 |
| - fault_port = F_MMU_INT_ID_PORT_ID(regval); |
445 | 449 | if (MTK_IOMMU_HAS_FLAG(plat_data, HAS_SUB_COMM_2BITS)) {
|
446 | 450 | fault_larb = F_MMU_INT_ID_COMM_ID(regval);
|
447 | 451 | sub_comm = F_MMU_INT_ID_SUB_COMM_ID(regval);
|
| 452 | + fault_port = F_MMU_INT_ID_PORT_ID(regval); |
448 | 453 | } else if (MTK_IOMMU_HAS_FLAG(plat_data, HAS_SUB_COMM_3BITS)) {
|
449 | 454 | fault_larb = F_MMU_INT_ID_COMM_ID_EXT(regval);
|
450 | 455 | sub_comm = F_MMU_INT_ID_SUB_COMM_ID_EXT(regval);
|
| 456 | + fault_port = F_MMU_INT_ID_PORT_ID(regval); |
| 457 | + } else if (MTK_IOMMU_HAS_FLAG(plat_data, INT_ID_PORT_WIDTH_6)) { |
| 458 | + fault_port = F_MMU_INT_ID_PORT_ID_WID_6(regval); |
| 459 | + fault_larb = F_MMU_INT_ID_LARB_ID_WID_6(regval); |
451 | 460 | } else {
|
| 461 | + fault_port = F_MMU_INT_ID_PORT_ID(regval); |
452 | 462 | fault_larb = F_MMU_INT_ID_LARB_ID(regval);
|
453 | 463 | }
|
454 | 464 | fault_larb = data->plat_data->larbid_remap[fault_larb][sub_comm];
|
|
0 commit comments