@@ -1544,6 +1544,19 @@ static int arm_smmu_domain_get_attr(struct iommu_domain *domain,
*((int *)data) = !!(smmu_domain->attributes
& (1 << DOMAIN_ATTR_ENABLE_TTBR1));
return 0;
+ case DOMAIN_ATTR_TTBR0: {
+ u64 val;
+ /* not valid until we are attached */
+ if (smmu_domain->smmu == NULL)
+ return -ENODEV;
+
+ val = smmu_domain->pgtbl_cfg.arm_lpae_s1_cfg.ttbr[0];
+ if (smmu_domain->cfg.cbar != CBAR_TYPE_S2_TRANS)
+ val |= (u64)ARM_SMMU_CB_ASID(smmu_domain->smmu,
+ &smmu_domain->cfg) << TTBRn_ASID_SHIFT;
+ *((u64 *)data) = val;
+ return 0;
+ }
default:
return -ENODEV;
}