diff options
Diffstat (limited to 'arch/arm/include/asm/proc-fns.h')
| -rw-r--r-- | arch/arm/include/asm/proc-fns.h | 21 | 
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/arm/include/asm/proc-fns.h b/arch/arm/include/asm/proc-fns.h index 9e92cb205e6..f3628fb3d2b 100644 --- a/arch/arm/include/asm/proc-fns.h +++ b/arch/arm/include/asm/proc-fns.h @@ -65,7 +65,11 @@ extern struct processor {  	 * Set a possibly extended PTE.  Non-extended PTEs should  	 * ignore 'ext'.  	 */ +#ifdef CONFIG_ARM_LPAE +	void (*set_pte_ext)(pte_t *ptep, pte_t pte); +#else  	void (*set_pte_ext)(pte_t *ptep, pte_t pte, unsigned int ext); +#endif  	/* Suspend/resume */  	unsigned int suspend_size; @@ -79,7 +83,11 @@ extern void cpu_proc_fin(void);  extern int cpu_do_idle(void);  extern void cpu_dcache_clean_area(void *, int);  extern void cpu_do_switch_mm(unsigned long pgd_phys, struct mm_struct *mm); +#ifdef CONFIG_ARM_LPAE +extern void cpu_set_pte_ext(pte_t *ptep, pte_t pte); +#else  extern void cpu_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext); +#endif  extern void cpu_reset(unsigned long addr) __attribute__((noreturn));  /* These three are private to arch/arm/kernel/suspend.c */ @@ -107,6 +115,18 @@ extern void cpu_resume(void);  #define cpu_switch_mm(pgd,mm) cpu_do_switch_mm(virt_to_phys(pgd),mm) +#ifdef CONFIG_ARM_LPAE +#define cpu_get_pgd()	\ +	({						\ +		unsigned long pg, pg2;			\ +		__asm__("mrrc	p15, 0, %0, %1, c2"	\ +			: "=r" (pg), "=r" (pg2)		\ +			:				\ +			: "cc");			\ +		pg &= ~(PTRS_PER_PGD*sizeof(pgd_t)-1);	\ +		(pgd_t *)phys_to_virt(pg);		\ +	}) +#else  #define cpu_get_pgd()	\  	({						\  		unsigned long pg;			\ @@ -115,6 +135,7 @@ extern void cpu_resume(void);  		pg &= ~0x3fff;				\  		(pgd_t *)phys_to_virt(pg);		\  	}) +#endif  #endif  |