Skip to content

Commit 65df7d8

Browse files
Fabojoergroedel
authored andcommitted
iommu/mediatek: add support for 6-bit encoded port IDs
Until now the port ID was always encoded as a 5-bit data. On MT8365, the port ID is encoded as a 6-bit data. This requires to add extra macro F_MMU_INT_ID_LARB_ID_EXT, and F_MMU_INT_ID_PORT_ID_EXT in order to support 6-bit encoded port IDs. Signed-off-by: Fabien Parent <[email protected]> Signed-off-by: Markus Schneider-Pargmann <[email protected]> Reviewed-by: AngeloGioacchino Del Regno <[email protected]> Reviewed-by: Yong Wu <[email protected]> Signed-off-by: Alexandre Mergnat <[email protected]> Reviewed-by: Matthias Brugger <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Joerg Roedel <[email protected]>
1 parent 59a316f commit 65df7d8

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

drivers/iommu/mtk_iommu.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,12 @@
108108
#define F_MMU_INT_ID_SUB_COMM_ID(a) (((a) >> 7) & 0x3)
109109
#define F_MMU_INT_ID_COMM_ID_EXT(a) (((a) >> 10) & 0x7)
110110
#define F_MMU_INT_ID_SUB_COMM_ID_EXT(a) (((a) >> 7) & 0x7)
111+
/* Macro for 5 bits length port ID field (default) */
111112
#define F_MMU_INT_ID_LARB_ID(a) (((a) >> 7) & 0x7)
112113
#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)
113117

114118
#define MTK_PROTECT_PA_ALIGN 256
115119
#define MTK_IOMMU_BANK_SZ 0x1000
@@ -139,6 +143,7 @@
139143
#define IFA_IOMMU_PCIE_SUPPORT BIT(16)
140144
#define PGTABLE_PA_35_EN BIT(17)
141145
#define TF_PORT_TO_ADDR_MT8173 BIT(18)
146+
#define INT_ID_PORT_WIDTH_6 BIT(19)
142147

143148
#define MTK_IOMMU_HAS_FLAG_MASK(pdata, _x, mask) \
144149
((((pdata)->flags) & (mask)) == (_x))
@@ -441,14 +446,19 @@ static irqreturn_t mtk_iommu_isr(int irq, void *dev_id)
441446
fault_pa |= (u64)pa34_32 << 32;
442447

443448
if (MTK_IOMMU_IS_TYPE(plat_data, MTK_IOMMU_TYPE_MM)) {
444-
fault_port = F_MMU_INT_ID_PORT_ID(regval);
445449
if (MTK_IOMMU_HAS_FLAG(plat_data, HAS_SUB_COMM_2BITS)) {
446450
fault_larb = F_MMU_INT_ID_COMM_ID(regval);
447451
sub_comm = F_MMU_INT_ID_SUB_COMM_ID(regval);
452+
fault_port = F_MMU_INT_ID_PORT_ID(regval);
448453
} else if (MTK_IOMMU_HAS_FLAG(plat_data, HAS_SUB_COMM_3BITS)) {
449454
fault_larb = F_MMU_INT_ID_COMM_ID_EXT(regval);
450455
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);
451460
} else {
461+
fault_port = F_MMU_INT_ID_PORT_ID(regval);
452462
fault_larb = F_MMU_INT_ID_LARB_ID(regval);
453463
}
454464
fault_larb = data->plat_data->larbid_remap[fault_larb][sub_comm];

0 commit comments

Comments
 (0)