iommu/arm-smmu: Allow implementation specific write_s2cr
[linux-2.6-microblaze.git] / drivers / iommu / arm / arm-smmu / arm-smmu.c
index dad7fa8..bcbacf2 100644 (file)
@@ -929,9 +929,16 @@ static void arm_smmu_write_smr(struct arm_smmu_device *smmu, int idx)
 static void arm_smmu_write_s2cr(struct arm_smmu_device *smmu, int idx)
 {
        struct arm_smmu_s2cr *s2cr = smmu->s2crs + idx;
-       u32 reg = FIELD_PREP(ARM_SMMU_S2CR_TYPE, s2cr->type) |
-                 FIELD_PREP(ARM_SMMU_S2CR_CBNDX, s2cr->cbndx) |
-                 FIELD_PREP(ARM_SMMU_S2CR_PRIVCFG, s2cr->privcfg);
+       u32 reg;
+
+       if (smmu->impl && smmu->impl->write_s2cr) {
+               smmu->impl->write_s2cr(smmu, idx);
+               return;
+       }
+
+       reg = FIELD_PREP(ARM_SMMU_S2CR_TYPE, s2cr->type) |
+             FIELD_PREP(ARM_SMMU_S2CR_CBNDX, s2cr->cbndx) |
+             FIELD_PREP(ARM_SMMU_S2CR_PRIVCFG, s2cr->privcfg);
 
        if (smmu->features & ARM_SMMU_FEAT_EXIDS && smmu->smrs &&
            smmu->smrs[idx].valid)