diff options
Diffstat (limited to 'arch/powerpc/include/asm/mmu.h')
| -rw-r--r-- | arch/powerpc/include/asm/mmu.h | 96 | 
1 files changed, 74 insertions, 22 deletions
diff --git a/arch/powerpc/include/asm/mmu.h b/arch/powerpc/include/asm/mmu.h index bb40a06d3b7..e61f24ed4e6 100644 --- a/arch/powerpc/include/asm/mmu.h +++ b/arch/powerpc/include/asm/mmu.h @@ -19,8 +19,7 @@  #define MMU_FTR_TYPE_40x		ASM_CONST(0x00000004)  #define MMU_FTR_TYPE_44x		ASM_CONST(0x00000008)  #define MMU_FTR_TYPE_FSL_E		ASM_CONST(0x00000010) -#define MMU_FTR_TYPE_3E			ASM_CONST(0x00000020) -#define MMU_FTR_TYPE_47x		ASM_CONST(0x00000040) +#define MMU_FTR_TYPE_47x		ASM_CONST(0x00000020)  /*   * This is individual features @@ -56,11 +55,6 @@   */  #define MMU_FTR_NEED_DTLB_SW_LRU	ASM_CONST(0x00200000) -/* This indicates that the processor uses the ISA 2.06 server tlbie - * mnemonics - */ -#define MMU_FTR_TLBIE_206		ASM_CONST(0x00400000) -  /* Enable use of TLB reservation.  Processor should support tlbsrx.   * instruction and MAS0[WQ].   */ @@ -70,17 +64,68 @@   */  #define MMU_FTR_USE_PAIRED_MAS		ASM_CONST(0x01000000) +/* MMU is SLB-based + */ +#define MMU_FTR_SLB			ASM_CONST(0x02000000) + +/* Support 16M large pages + */ +#define MMU_FTR_16M_PAGE		ASM_CONST(0x04000000) + +/* Supports TLBIEL variant + */ +#define MMU_FTR_TLBIEL			ASM_CONST(0x08000000) + +/* Supports tlbies w/o locking + */ +#define MMU_FTR_LOCKLESS_TLBIE		ASM_CONST(0x10000000) + +/* Large pages can be marked CI + */ +#define MMU_FTR_CI_LARGE_PAGE		ASM_CONST(0x20000000) + +/* 1T segments available + */ +#define MMU_FTR_1T_SEGMENT		ASM_CONST(0x40000000) + +/* Doesn't support the B bit (1T segment) in SLBIE + */ +#define MMU_FTR_NO_SLBIE_B		ASM_CONST(0x80000000) + +/* MMU feature bit sets for various CPUs */ +#define MMU_FTRS_DEFAULT_HPTE_ARCH_V2	\ +	MMU_FTR_HPTE_TABLE | MMU_FTR_PPCAS_ARCH_V2 +#define MMU_FTRS_POWER4		MMU_FTRS_DEFAULT_HPTE_ARCH_V2 +#define MMU_FTRS_PPC970		MMU_FTRS_POWER4 +#define MMU_FTRS_POWER5		MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE +#define MMU_FTRS_POWER6		MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE +#define MMU_FTRS_POWER7		MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE +#define MMU_FTRS_POWER8		MMU_FTRS_POWER4 | MMU_FTR_LOCKLESS_TLBIE +#define MMU_FTRS_CELL		MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \ +				MMU_FTR_CI_LARGE_PAGE +#define MMU_FTRS_PA6T		MMU_FTRS_DEFAULT_HPTE_ARCH_V2 | \ +				MMU_FTR_CI_LARGE_PAGE | MMU_FTR_NO_SLBIE_B  #ifndef __ASSEMBLY__  #include <asm/cputable.h> +#ifdef CONFIG_PPC_FSL_BOOK3E +#include <asm/percpu.h> +DECLARE_PER_CPU(int, next_tlbcam_idx); +#endif +  static inline int mmu_has_feature(unsigned long feature)  {  	return (cur_cpu_spec->mmu_features & feature);  } +static inline void mmu_clear_feature(unsigned long feature) +{ +	cur_cpu_spec->mmu_features &= ~feature; +} +  extern unsigned int __start___mmu_ftr_fixup, __stop___mmu_ftr_fixup; -/* MMU initialization (64-bit only fo now) */ +/* MMU initialization */  extern void early_init_mmu(void);  extern void early_init_mmu_secondary(void); @@ -94,6 +139,15 @@ extern void setup_initial_memory_limit(phys_addr_t first_memblock_base,  extern u64 ppc64_rma_size;  #endif /* CONFIG_PPC64 */ +struct mm_struct; +#ifdef CONFIG_DEBUG_VM +extern void assert_pte_locked(struct mm_struct *mm, unsigned long addr); +#else /* CONFIG_DEBUG_VM */ +static inline void assert_pte_locked(struct mm_struct *mm, unsigned long addr) +{ +} +#endif /* !CONFIG_DEBUG_VM */ +  #endif /* !__ASSEMBLY__ */  /* The kernel use the constants below to index in the page sizes array. @@ -111,26 +165,24 @@ extern u64 ppc64_rma_size;   * to think about, feedback welcome. --BenH.   */ -/* There are #define as they have to be used in assembly - * - * WARNING: If you change this list, make sure to update the array of - * names currently in arch/powerpc/mm/hugetlbpage.c or bad things will - * happen - */ +/* These are #defines as they have to be used in assembly */  #define MMU_PAGE_4K	0  #define MMU_PAGE_16K	1  #define MMU_PAGE_64K	2  #define MMU_PAGE_64K_AP	3	/* "Admixed pages" (hash64 only) */  #define MMU_PAGE_256K	4  #define MMU_PAGE_1M	5 -#define MMU_PAGE_8M	6 -#define MMU_PAGE_16M	7 -#define MMU_PAGE_256M	8 -#define MMU_PAGE_1G	9 -#define MMU_PAGE_16G	10 -#define MMU_PAGE_64G	11 -#define MMU_PAGE_COUNT	12 - +#define MMU_PAGE_2M	6 +#define MMU_PAGE_4M	7 +#define MMU_PAGE_8M	8 +#define MMU_PAGE_16M	9 +#define MMU_PAGE_64M	10 +#define MMU_PAGE_256M	11 +#define MMU_PAGE_1G	12 +#define MMU_PAGE_16G	13 +#define MMU_PAGE_64G	14 + +#define MMU_PAGE_COUNT	15  #if defined(CONFIG_PPC_STD_MMU_64)  /* 64-bit classic hash table MMU */  | 
