|
|
@@ -102,7 +102,6 @@ static inline u32 smmu_readl(struct tegra_smmu *smmu, unsigned long offset)
|
|
|
#define SMMU_TLB_FLUSH_VA_MATCH_ALL (0 << 0)
|
|
|
#define SMMU_TLB_FLUSH_VA_MATCH_SECTION (2 << 0)
|
|
|
#define SMMU_TLB_FLUSH_VA_MATCH_GROUP (3 << 0)
|
|
|
-#define SMMU_TLB_FLUSH_ASID(x) (((x) & 0x7f) << 24)
|
|
|
#define SMMU_TLB_FLUSH_VA_SECTION(addr) ((((addr) & 0xffc00000) >> 12) | \
|
|
|
SMMU_TLB_FLUSH_VA_MATCH_SECTION)
|
|
|
#define SMMU_TLB_FLUSH_VA_GROUP(addr) ((((addr) & 0xffffc000) >> 12) | \
|
|
|
@@ -205,8 +204,12 @@ static inline void smmu_flush_tlb_asid(struct tegra_smmu *smmu,
|
|
|
{
|
|
|
u32 value;
|
|
|
|
|
|
- value = SMMU_TLB_FLUSH_ASID_MATCH | SMMU_TLB_FLUSH_ASID(asid) |
|
|
|
- SMMU_TLB_FLUSH_VA_MATCH_ALL;
|
|
|
+ if (smmu->soc->num_asids == 4)
|
|
|
+ value = (asid & 0x3) << 29;
|
|
|
+ else
|
|
|
+ value = (asid & 0x7f) << 24;
|
|
|
+
|
|
|
+ value |= SMMU_TLB_FLUSH_ASID_MATCH | SMMU_TLB_FLUSH_VA_MATCH_ALL;
|
|
|
smmu_writel(smmu, value, SMMU_TLB_FLUSH);
|
|
|
}
|
|
|
|
|
|
@@ -216,8 +219,12 @@ static inline void smmu_flush_tlb_section(struct tegra_smmu *smmu,
|
|
|
{
|
|
|
u32 value;
|
|
|
|
|
|
- value = SMMU_TLB_FLUSH_ASID_MATCH | SMMU_TLB_FLUSH_ASID(asid) |
|
|
|
- SMMU_TLB_FLUSH_VA_SECTION(iova);
|
|
|
+ if (smmu->soc->num_asids == 4)
|
|
|
+ value = (asid & 0x3) << 29;
|
|
|
+ else
|
|
|
+ value = (asid & 0x7f) << 24;
|
|
|
+
|
|
|
+ value |= SMMU_TLB_FLUSH_ASID_MATCH | SMMU_TLB_FLUSH_VA_SECTION(iova);
|
|
|
smmu_writel(smmu, value, SMMU_TLB_FLUSH);
|
|
|
}
|
|
|
|
|
|
@@ -227,8 +234,12 @@ static inline void smmu_flush_tlb_group(struct tegra_smmu *smmu,
|
|
|
{
|
|
|
u32 value;
|
|
|
|
|
|
- value = SMMU_TLB_FLUSH_ASID_MATCH | SMMU_TLB_FLUSH_ASID(asid) |
|
|
|
- SMMU_TLB_FLUSH_VA_GROUP(iova);
|
|
|
+ if (smmu->soc->num_asids == 4)
|
|
|
+ value = (asid & 0x3) << 29;
|
|
|
+ else
|
|
|
+ value = (asid & 0x7f) << 24;
|
|
|
+
|
|
|
+ value |= SMMU_TLB_FLUSH_ASID_MATCH | SMMU_TLB_FLUSH_VA_GROUP(iova);
|
|
|
smmu_writel(smmu, value, SMMU_TLB_FLUSH);
|
|
|
}
|
|
|
|