|
@@ -558,7 +558,7 @@ static pmd_t *ipmmu_alloc_pmd(struct ipmmu_vmsa_device *mmu, pgd_t *pgd,
|
|
|
|
|
|
static u64 ipmmu_page_prot(unsigned int prot, u64 type)
|
|
|
{
|
|
|
- u64 pgprot = ARM_VMSA_PTE_XN | ARM_VMSA_PTE_nG | ARM_VMSA_PTE_AF
|
|
|
+ u64 pgprot = ARM_VMSA_PTE_nG | ARM_VMSA_PTE_AF
|
|
|
| ARM_VMSA_PTE_SH_IS | ARM_VMSA_PTE_AP_UNPRIV
|
|
|
| ARM_VMSA_PTE_NS | type;
|
|
|
|
|
@@ -568,8 +568,8 @@ static u64 ipmmu_page_prot(unsigned int prot, u64 type)
|
|
|
if (prot & IOMMU_CACHE)
|
|
|
pgprot |= IMMAIR_ATTR_IDX_WBRWA << ARM_VMSA_PTE_ATTRINDX_SHIFT;
|
|
|
|
|
|
- if (prot & IOMMU_EXEC)
|
|
|
- pgprot &= ~ARM_VMSA_PTE_XN;
|
|
|
+ if (prot & IOMMU_NOEXEC)
|
|
|
+ pgprot |= ARM_VMSA_PTE_XN;
|
|
|
else if (!(prot & (IOMMU_READ | IOMMU_WRITE)))
|
|
|
/* If no access create a faulting entry to avoid TLB fills. */
|
|
|
pgprot &= ~ARM_VMSA_PTE_PAGE;
|