nested_domain
static inline struct nested_domain *to_ndomain(struct iommu_domain *dom)
return container_of(dom, struct nested_domain, domain);
struct nested_domain *ndom = to_ndomain(dom);
struct nested_domain *ndom = to_ndomain(dom);
struct nested_domain *ndom;
struct arm_smmu_nested_domain *nested_domain)
FIELD_GET(STRTAB_STE_0_CFG, le64_to_cpu(nested_domain->ste[0]));
ret = iommufd_viommu_get_vdev_id(&nested_domain->vsmmu->core,
vmaster->vsmmu = nested_domain->vsmmu;
struct arm_smmu_nested_domain *nested_domain =
if (nested_domain->vsmmu->smmu != master->smmu)
if (FIELD_GET(STRTAB_STE_0_CFG, le64_to_cpu(nested_domain->ste[0])) ==
state.disable_ats = !nested_domain->enable_ats;
arm_smmu_make_nested_domain_ste(&ste, master, nested_domain,
struct arm_smmu_nested_domain *nested_domain;
nested_domain = kzalloc_obj(*nested_domain, GFP_KERNEL_ACCOUNT);
if (!nested_domain)
nested_domain->domain.type = IOMMU_DOMAIN_NESTED;
nested_domain->domain.ops = &arm_smmu_nested_ops;
nested_domain->enable_ats = enable_ats;
nested_domain->vsmmu = vsmmu;
nested_domain->ste[0] = arg.ste[0];
nested_domain->ste[1] = arg.ste[1] & ~cpu_to_le64(STRTAB_STE_1_EATS);
return &nested_domain->domain;
struct arm_smmu_nested_domain *nested_domain, bool ats_enabled)
target, master, nested_domain->vsmmu->s2_parent, ats_enabled);
target->data[0] |= nested_domain->ste[0] &
target->data[1] |= nested_domain->ste[1];
struct arm_smmu_nested_domain *nested_domain, bool ats_enabled)
FIELD_GET(STRTAB_STE_0_CFG, le64_to_cpu(nested_domain->ste[0]));
if (!(nested_domain->ste[0] & cpu_to_le64(STRTAB_STE_0_V)))
arm_smmu_make_nested_cd_table_ste(target, master, nested_domain,
nested_domain->vsmmu->s2_parent,
struct arm_smmu_nested_domain *nested_domain);
struct arm_smmu_nested_domain *nested_domain)
FIXTURE_VARIANT_ADD(scoped_domains, nested_domain) {