diff options
author | Ingo Molnar <mingo@kernel.org> | 2013-01-24 06:47:48 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2013-01-24 06:47:48 -0500 |
commit | befddb21c845f8fb49e637997891ef97c6a869dc (patch) | |
tree | 0e7629123184f2dd50291ad6d477b894175f0f26 /arch/mips/include/asm/pgtable-bits.h | |
parent | e716efde75267eab919cdb2bef5b2cb77f305326 (diff) | |
parent | 7d1f9aeff1ee4a20b1aeb377dd0f579fe9647619 (diff) |
Merge tag 'v3.8-rc4' into irq/core
Merge Linux 3.8-rc4 before pulling in new commits - we were on an old v3.7 base.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/mips/include/asm/pgtable-bits.h')
-rw-r--r-- | arch/mips/include/asm/pgtable-bits.h | 131 |
1 files changed, 80 insertions, 51 deletions
diff --git a/arch/mips/include/asm/pgtable-bits.h b/arch/mips/include/asm/pgtable-bits.h index da4ba49adcf6..f6a0439a4085 100644 --- a/arch/mips/include/asm/pgtable-bits.h +++ b/arch/mips/include/asm/pgtable-bits.h | |||
@@ -34,38 +34,72 @@ | |||
34 | */ | 34 | */ |
35 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) | 35 | #if defined(CONFIG_64BIT_PHYS_ADDR) && defined(CONFIG_CPU_MIPS32) |
36 | 36 | ||
37 | #define _PAGE_PRESENT (1<<6) /* implemented in software */ | 37 | /* |
38 | #define _PAGE_READ (1<<7) /* implemented in software */ | 38 | * The following bits are directly used by the TLB hardware |
39 | #define _PAGE_WRITE (1<<8) /* implemented in software */ | 39 | */ |
40 | #define _PAGE_ACCESSED (1<<9) /* implemented in software */ | 40 | #define _PAGE_R4KBUG (1 << 0) /* workaround for r4k bug */ |
41 | #define _PAGE_MODIFIED (1<<10) /* implemented in software */ | 41 | #define _PAGE_GLOBAL (1 << 0) |
42 | #define _PAGE_FILE (1<<10) /* set:pagecache unset:swap */ | 42 | #define _PAGE_VALID_SHIFT 1 |
43 | 43 | #define _PAGE_VALID (1 << _PAGE_VALID_SHIFT) | |
44 | #define _PAGE_R4KBUG (1<<0) /* workaround for r4k bug */ | 44 | #define _PAGE_SILENT_READ (1 << 1) /* synonym */ |
45 | #define _PAGE_GLOBAL (1<<0) | 45 | #define _PAGE_DIRTY_SHIFT 2 |
46 | #define _PAGE_VALID (1<<1) | 46 | #define _PAGE_DIRTY (1 << _PAGE_DIRTY_SHIFT) /* The MIPS dirty bit */ |
47 | #define _PAGE_SILENT_READ (1<<1) /* synonym */ | 47 | #define _PAGE_SILENT_WRITE (1 << 2) |
48 | #define _PAGE_DIRTY (1<<2) /* The MIPS dirty bit */ | 48 | #define _CACHE_SHIFT 3 |
49 | #define _PAGE_SILENT_WRITE (1<<2) | 49 | #define _CACHE_MASK (7 << 3) |
50 | #define _CACHE_SHIFT 3 | 50 | |
51 | #define _CACHE_MASK (7<<3) | 51 | /* |
52 | * The following bits are implemented in software | ||
53 | * | ||
54 | * _PAGE_FILE semantics: set:pagecache unset:swap | ||
55 | */ | ||
56 | #define _PAGE_PRESENT_SHIFT 6 | ||
57 | #define _PAGE_PRESENT (1 << _PAGE_PRESENT_SHIFT) | ||
58 | #define _PAGE_READ_SHIFT 7 | ||
59 | #define _PAGE_READ (1 << _PAGE_READ_SHIFT) | ||
60 | #define _PAGE_WRITE_SHIFT 8 | ||
61 | #define _PAGE_WRITE (1 << _PAGE_WRITE_SHIFT) | ||
62 | #define _PAGE_ACCESSED_SHIFT 9 | ||
63 | #define _PAGE_ACCESSED (1 << _PAGE_ACCESSED_SHIFT) | ||
64 | #define _PAGE_MODIFIED_SHIFT 10 | ||
65 | #define _PAGE_MODIFIED (1 << _PAGE_MODIFIED_SHIFT) | ||
66 | |||
67 | #define _PAGE_FILE (1 << 10) | ||
52 | 68 | ||
53 | #elif defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX) | 69 | #elif defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX) |
54 | 70 | ||
55 | #define _PAGE_PRESENT (1<<0) /* implemented in software */ | 71 | /* |
56 | #define _PAGE_READ (1<<1) /* implemented in software */ | 72 | * The following are implemented by software |
57 | #define _PAGE_WRITE (1<<2) /* implemented in software */ | 73 | * |
58 | #define _PAGE_ACCESSED (1<<3) /* implemented in software */ | 74 | * _PAGE_FILE semantics: set:pagecache unset:swap |
59 | #define _PAGE_MODIFIED (1<<4) /* implemented in software */ | 75 | */ |
60 | #define _PAGE_FILE (1<<4) /* set:pagecache unset:swap */ | 76 | #define _PAGE_PRESENT_SHIFT 0 |
61 | 77 | #define _PAGE_PRESENT (1 << _PAGE_PRESENT_SHIFT) | |
62 | #define _PAGE_GLOBAL (1<<8) | 78 | #define _PAGE_READ_SHIFT 1 |
63 | #define _PAGE_VALID (1<<9) | 79 | #define _PAGE_READ (1 << _PAGE_READ_SHIFT) |
64 | #define _PAGE_SILENT_READ (1<<9) /* synonym */ | 80 | #define _PAGE_WRITE_SHIFT 2 |
65 | #define _PAGE_DIRTY (1<<10) /* The MIPS dirty bit */ | 81 | #define _PAGE_WRITE (1 << _PAGE_WRITE_SHIFT) |
66 | #define _PAGE_SILENT_WRITE (1<<10) | 82 | #define _PAGE_ACCESSED_SHIFT 3 |
67 | #define _CACHE_UNCACHED (1<<11) | 83 | #define _PAGE_ACCESSED (1 << _PAGE_ACCESSED_SHIFT) |
68 | #define _CACHE_MASK (1<<11) | 84 | #define _PAGE_MODIFIED_SHIFT 4 |
85 | #define _PAGE_MODIFIED (1 << _PAGE_MODIFIED_SHIFT) | ||
86 | #define _PAGE_FILE_SHIFT 4 | ||
87 | #define _PAGE_FILE (1 << _PAGE_FILE_SHIFT) | ||
88 | |||
89 | /* | ||
90 | * And these are the hardware TLB bits | ||
91 | */ | ||
92 | #define _PAGE_GLOBAL_SHIFT 8 | ||
93 | #define _PAGE_GLOBAL (1 << _PAGE_GLOBAL_SHIFT) | ||
94 | #define _PAGE_VALID_SHIFT 9 | ||
95 | #define _PAGE_VALID (1 << _PAGE_VALID_SHIFT) | ||
96 | #define _PAGE_SILENT_READ (1 << _PAGE_VALID_SHIFT) /* synonym */ | ||
97 | #define _PAGE_DIRTY_SHIFT 10 | ||
98 | #define _PAGE_DIRTY (1 << _PAGE_DIRTY_SHIFT) | ||
99 | #define _PAGE_SILENT_WRITE (1 << _PAGE_DIRTY_SHIFT) | ||
100 | #define _CACHE_UNCACHED_SHIFT 11 | ||
101 | #define _CACHE_UNCACHED (1 << _CACHE_UNCACHED_SHIFT) | ||
102 | #define _CACHE_MASK (1 << _CACHE_UNCACHED_SHIFT) | ||
69 | 103 | ||
70 | #else /* 'Normal' r4K case */ | 104 | #else /* 'Normal' r4K case */ |
71 | /* | 105 | /* |
@@ -76,25 +110,25 @@ | |||
76 | * which is more than we need right now. | 110 | * which is more than we need right now. |
77 | */ | 111 | */ |
78 | 112 | ||
79 | /* implemented in software */ | 113 | /* |
114 | * The following bits are implemented in software | ||
115 | * | ||
116 | * _PAGE_READ / _PAGE_READ_SHIFT should be unused if cpu_has_rixi. | ||
117 | * _PAGE_FILE semantics: set:pagecache unset:swap | ||
118 | */ | ||
80 | #define _PAGE_PRESENT_SHIFT (0) | 119 | #define _PAGE_PRESENT_SHIFT (0) |
81 | #define _PAGE_PRESENT (1 << _PAGE_PRESENT_SHIFT) | 120 | #define _PAGE_PRESENT (1 << _PAGE_PRESENT_SHIFT) |
82 | /* implemented in software, should be unused if cpu_has_rixi. */ | ||
83 | #define _PAGE_READ_SHIFT (cpu_has_rixi ? _PAGE_PRESENT_SHIFT : _PAGE_PRESENT_SHIFT + 1) | 121 | #define _PAGE_READ_SHIFT (cpu_has_rixi ? _PAGE_PRESENT_SHIFT : _PAGE_PRESENT_SHIFT + 1) |
84 | #define _PAGE_READ ({BUG_ON(cpu_has_rixi); 1 << _PAGE_READ_SHIFT; }) | 122 | #define _PAGE_READ ({BUG_ON(cpu_has_rixi); 1 << _PAGE_READ_SHIFT; }) |
85 | /* implemented in software */ | ||
86 | #define _PAGE_WRITE_SHIFT (_PAGE_READ_SHIFT + 1) | 123 | #define _PAGE_WRITE_SHIFT (_PAGE_READ_SHIFT + 1) |
87 | #define _PAGE_WRITE (1 << _PAGE_WRITE_SHIFT) | 124 | #define _PAGE_WRITE (1 << _PAGE_WRITE_SHIFT) |
88 | /* implemented in software */ | ||
89 | #define _PAGE_ACCESSED_SHIFT (_PAGE_WRITE_SHIFT + 1) | 125 | #define _PAGE_ACCESSED_SHIFT (_PAGE_WRITE_SHIFT + 1) |
90 | #define _PAGE_ACCESSED (1 << _PAGE_ACCESSED_SHIFT) | 126 | #define _PAGE_ACCESSED (1 << _PAGE_ACCESSED_SHIFT) |
91 | /* implemented in software */ | ||
92 | #define _PAGE_MODIFIED_SHIFT (_PAGE_ACCESSED_SHIFT + 1) | 127 | #define _PAGE_MODIFIED_SHIFT (_PAGE_ACCESSED_SHIFT + 1) |
93 | #define _PAGE_MODIFIED (1 << _PAGE_MODIFIED_SHIFT) | 128 | #define _PAGE_MODIFIED (1 << _PAGE_MODIFIED_SHIFT) |
94 | /* set:pagecache unset:swap */ | ||
95 | #define _PAGE_FILE (_PAGE_MODIFIED) | 129 | #define _PAGE_FILE (_PAGE_MODIFIED) |
96 | 130 | ||
97 | #ifdef CONFIG_HUGETLB_PAGE | 131 | #ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT |
98 | /* huge tlb page */ | 132 | /* huge tlb page */ |
99 | #define _PAGE_HUGE_SHIFT (_PAGE_MODIFIED_SHIFT + 1) | 133 | #define _PAGE_HUGE_SHIFT (_PAGE_MODIFIED_SHIFT + 1) |
100 | #define _PAGE_HUGE (1 << _PAGE_HUGE_SHIFT) | 134 | #define _PAGE_HUGE (1 << _PAGE_HUGE_SHIFT) |
@@ -103,8 +137,17 @@ | |||
103 | #define _PAGE_HUGE ({BUG(); 1; }) /* Dummy value */ | 137 | #define _PAGE_HUGE ({BUG(); 1; }) /* Dummy value */ |
104 | #endif | 138 | #endif |
105 | 139 | ||
140 | #ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT | ||
141 | /* huge tlb page */ | ||
142 | #define _PAGE_SPLITTING_SHIFT (_PAGE_HUGE_SHIFT + 1) | ||
143 | #define _PAGE_SPLITTING (1 << _PAGE_SPLITTING_SHIFT) | ||
144 | #else | ||
145 | #define _PAGE_SPLITTING_SHIFT (_PAGE_HUGE_SHIFT) | ||
146 | #define _PAGE_SPLITTING ({BUG(); 1; }) /* Dummy value */ | ||
147 | #endif | ||
148 | |||
106 | /* Page cannot be executed */ | 149 | /* Page cannot be executed */ |
107 | #define _PAGE_NO_EXEC_SHIFT (cpu_has_rixi ? _PAGE_HUGE_SHIFT + 1 : _PAGE_HUGE_SHIFT) | 150 | #define _PAGE_NO_EXEC_SHIFT (cpu_has_rixi ? _PAGE_SPLITTING_SHIFT + 1 : _PAGE_SPLITTING_SHIFT) |
108 | #define _PAGE_NO_EXEC ({BUG_ON(!cpu_has_rixi); 1 << _PAGE_NO_EXEC_SHIFT; }) | 151 | #define _PAGE_NO_EXEC ({BUG_ON(!cpu_has_rixi); 1 << _PAGE_NO_EXEC_SHIFT; }) |
109 | 152 | ||
110 | /* Page cannot be read */ | 153 | /* Page cannot be read */ |
@@ -192,20 +235,6 @@ static inline uint64_t pte_to_entrylo(unsigned long pte_val) | |||
192 | #define _CACHE_CACHABLE_NONCOHERENT (5<<_CACHE_SHIFT) | 235 | #define _CACHE_CACHABLE_NONCOHERENT (5<<_CACHE_SHIFT) |
193 | #define _CACHE_UNCACHED_ACCELERATED (7<<_CACHE_SHIFT) | 236 | #define _CACHE_UNCACHED_ACCELERATED (7<<_CACHE_SHIFT) |
194 | 237 | ||
195 | #elif defined(CONFIG_CPU_RM9000) | ||
196 | |||
197 | #define _CACHE_WT (0<<_CACHE_SHIFT) | ||
198 | #define _CACHE_WTWA (1<<_CACHE_SHIFT) | ||
199 | #define _CACHE_UC_B (2<<_CACHE_SHIFT) | ||
200 | #define _CACHE_WB (3<<_CACHE_SHIFT) | ||
201 | #define _CACHE_CWBEA (4<<_CACHE_SHIFT) | ||
202 | #define _CACHE_CWB (5<<_CACHE_SHIFT) | ||
203 | #define _CACHE_UCNB (6<<_CACHE_SHIFT) | ||
204 | #define _CACHE_FPC (7<<_CACHE_SHIFT) | ||
205 | |||
206 | #define _CACHE_UNCACHED _CACHE_UC_B | ||
207 | #define _CACHE_CACHABLE_NONCOHERENT _CACHE_WB | ||
208 | |||
209 | #else | 238 | #else |
210 | 239 | ||
211 | #define _CACHE_CACHABLE_NO_WA (0<<_CACHE_SHIFT) /* R4600 only */ | 240 | #define _CACHE_CACHABLE_NO_WA (0<<_CACHE_SHIFT) /* R4600 only */ |