static inline pte_t huge_ptep_get(pte_t *ptep)
{
pmd_t pmd = *((pmd_t *)ptep);
+ u32 pmdval = pmd_val(pmd);
pte_t retval;
if (!pmd_val(pmd))
return __pte(0);
retval = __pte((pteval_t) (pmd_val(pmd) & HPAGE_MASK)
- | arm_hugepteprotval);
+ | (pmdval & 0x0c) | ((pmdval >> 8) & 0x10)
+ | L_PTE_PRESENT | L_PTE_USER | L_PTE_VALID);
if (pmd_exec(pmd))
retval = pte_mkexec(retval);
flush_pmd_entry(pmdp);
}
-extern pmdval_t arm_hugepmdprotval;
-extern pteval_t arm_hugepteprotval;
-
#define pmd_mkhuge(pmd) (__pmd((pmd_val(pmd) & ~PMD_TYPE_MASK) | PMD_TYPE_SECT))
PMD_BIT_FUNC(mkold, &= ~PMD_DSECT_AF);
#define pmd_modify(pmd, prot) \
({ \
- pmd_t pmdret = __pmd((pmd_val(pmd) & (PMD_MASK | PMD_DOMAIN_MASK)) \
- | arm_hugepmdprotval); \
+ pmd_t pmdret = __pmd(pmd_val(pmd) & (PMD_MASK | PMD_DOMAIN_MASK)); \
pgprot_t inprot = prot; \
- pte_t newprot = __pte(pgprot_val(inprot)); \
+ u32 inprotval = pgprot_val(inprot); \
+ pte_t newprot = __pte(inprotval); \
\
if (pte_dirty(newprot)) \
pmdret = pmd_mkdirty(pmdret); \
pmdret = pmd_mkyoung(pmdret); \
else \
pmdret = pmd_mkold(pmdret); \
+ pmdret = __pmd(pmd_val(pmdret) | (inprotval & 0x0c) \
+ | ((inprotval << 8) & 0x1000) \
+ | PMD_TYPE_SECT | PMD_SECT_AP_WRITE \
+ | PMD_SECT_AP_READ | PMD_SECT_nG); \
\
pmdret; \
})
}
EXPORT_SYMBOL(get_mem_type);
-/*
- * If the system supports huge pages and we are running with short descriptors,
- * then compute the pmd and linux pte prot values for a huge page.
- *
- * These values are used by both the HugeTLB and THP code.
- */
-#if defined(CONFIG_SYS_SUPPORTS_HUGETLBFS) && !defined(CONFIG_ARM_LPAE)
-pmdval_t arm_hugepmdprotval;
-EXPORT_SYMBOL(arm_hugepmdprotval);
-
-pteval_t arm_hugepteprotval;
-EXPORT_SYMBOL(arm_hugepteprotval);
-#endif
-
-
/*
* Adjust the PMD section entries according to the CPU in use.
*/
if (t->prot_sect)
t->prot_sect |= PMD_DOMAIN(t->domain);
}
-
-#if defined(CONFIG_SYS_SUPPORTS_HUGETLBFS) && !defined(CONFIG_ARM_LPAE)
- /*
- * we assume all huge pages are user pages and that hardware access
- * flag updates are disabled (i.e. SCTLR.AFE == 0b).
- */
- arm_hugepteprotval = mem_types[MT_MEMORY].prot_pte | L_PTE_USER | L_PTE_VALID;
-
- arm_hugepmdprotval = mem_types[MT_MEMORY].prot_sect | PMD_SECT_AP_READ
- | PMD_SECT_nG;
-#endif
-
}
#ifdef CONFIG_ARM_DMA_MEM_BUFFERABLE