|
42 | 42 | #define F_INVLD_EN1 BIT(1)
|
43 | 43 |
|
44 | 44 | #define REG_MMU_MISC_CTRL 0x048
|
| 45 | +#define F_MMU_IN_ORDER_WR_EN_MASK (BIT(1) | BIT(17)) |
| 46 | +#define F_MMU_STANDARD_AXI_MODE_MASK (BIT(3) | BIT(19)) |
| 47 | + |
45 | 48 | #define REG_MMU_DCM_DIS 0x050
|
46 | 49 |
|
47 | 50 | #define REG_MMU_CTRL_REG 0x110
|
|
105 | 108 | #define HAS_BCLK BIT(1)
|
106 | 109 | #define HAS_VLD_PA_RNG BIT(2)
|
107 | 110 | #define RESET_AXI BIT(3)
|
| 111 | +#define OUT_ORDER_WR_EN BIT(4) |
108 | 112 |
|
109 | 113 | #define MTK_IOMMU_HAS_FLAG(pdata, _x) \
|
110 | 114 | ((((pdata)->flags) & (_x)) == (_x))
|
@@ -585,8 +589,14 @@ static int mtk_iommu_hw_init(const struct mtk_iommu_data *data)
|
585 | 589 |
|
586 | 590 | if (MTK_IOMMU_HAS_FLAG(data->plat_data, RESET_AXI)) {
|
587 | 591 | /* The register is called STANDARD_AXI_MODE in this case */
|
588 |
| - writel_relaxed(0, data->base + REG_MMU_MISC_CTRL); |
| 592 | + regval = 0; |
| 593 | + } else { |
| 594 | + regval = readl_relaxed(data->base + REG_MMU_MISC_CTRL); |
| 595 | + regval &= ~F_MMU_STANDARD_AXI_MODE_MASK; |
| 596 | + if (MTK_IOMMU_HAS_FLAG(data->plat_data, OUT_ORDER_WR_EN)) |
| 597 | + regval &= ~F_MMU_IN_ORDER_WR_EN_MASK; |
589 | 598 | }
|
| 599 | + writel_relaxed(regval, data->base + REG_MMU_MISC_CTRL); |
590 | 600 |
|
591 | 601 | if (devm_request_irq(data->dev, data->irq, mtk_iommu_isr, 0,
|
592 | 602 | dev_name(data->dev), (void *)data)) {
|
|
0 commit comments