Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b32aaa61 authored by Mitchel Humpherys's avatar Mitchel Humpherys Committed by Neeti Desai
Browse files

iommu/arm-smmu: Assign page table memory on domain finalization



When a domain is attached for the first time, memory for its top level
of page tables is allocated.  If it's a secure domain, this memory needs
to be assigned to a secure VMID.  Currently, it's not being assigned to
a secure VMID, so when the domain is torn down and unassigned we get a
warning.  Fix this by adding the missing assign call after initial
domain allocation.

Change-Id: I9ff2418749e768e17b4598f5f89e587ad7828d52
Signed-off-by: default avatarMitchel Humpherys <mitchelh@codeaurora.org>
parent 402575ce
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -1325,6 +1325,8 @@ static void arm_smmu_init_context_bank(struct arm_smmu_domain *smmu_domain,
	writel_relaxed(reg, cb_base + ARM_SMMU_CB_SCTLR);
}

static void arm_smmu_assign_table(struct arm_smmu_domain *smmu_domain);

static int arm_smmu_init_domain_context(struct iommu_domain *domain,
					struct arm_smmu_device *smmu)
{
@@ -1421,6 +1423,11 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
		ret = -ENOMEM;
		goto out_clear_smmu;
	}
	/*
	 * assign any page table memory that might have been allocated
	 * during alloc_io_pgtable_ops
	 */
	arm_smmu_assign_table(smmu_domain);

	/* Update our support page sizes to reflect the page table format */
	arm_smmu_ops.pgsize_bitmap = smmu_domain->pgtbl_cfg.pgsize_bitmap;
@@ -1712,6 +1719,12 @@ static int arm_smmu_attach_dynamic(struct iommu_domain *domain,
	if (!pgtbl_ops)
		return -ENOMEM;

	/*
	 * assign any page table memory that might have been allocated
	 * during alloc_io_pgtable_ops
	 */
	arm_smmu_assign_table(smmu_domain);

	cfg->vmid = cfg->cbndx + 2;
	smmu_domain->smmu = smmu;