diff options
Diffstat (limited to 'arch/sparc64/mm/tsb.c')
-rw-r--r-- | arch/sparc64/mm/tsb.c | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/arch/sparc64/mm/tsb.c b/arch/sparc64/mm/tsb.c index c5dc4b0cc1c5..975242ab88ee 100644 --- a/arch/sparc64/mm/tsb.c +++ b/arch/sparc64/mm/tsb.c | |||
@@ -85,8 +85,7 @@ static void setup_tsb_params(struct mm_struct *mm, unsigned long tsb_bytes) | |||
85 | mm->context.tsb_nentries = tsb_bytes / sizeof(struct tsb); | 85 | mm->context.tsb_nentries = tsb_bytes / sizeof(struct tsb); |
86 | 86 | ||
87 | base = TSBMAP_BASE; | 87 | base = TSBMAP_BASE; |
88 | tte = (_PAGE_VALID | _PAGE_L | _PAGE_CP | | 88 | tte = pgprot_val(PAGE_KERNEL_LOCKED); |
89 | _PAGE_CV | _PAGE_P | _PAGE_W); | ||
90 | tsb_paddr = __pa(mm->context.tsb); | 89 | tsb_paddr = __pa(mm->context.tsb); |
91 | BUG_ON(tsb_paddr & (tsb_bytes - 1UL)); | 90 | BUG_ON(tsb_paddr & (tsb_bytes - 1UL)); |
92 | 91 | ||
@@ -99,55 +98,48 @@ static void setup_tsb_params(struct mm_struct *mm, unsigned long tsb_bytes) | |||
99 | #ifdef DCACHE_ALIASING_POSSIBLE | 98 | #ifdef DCACHE_ALIASING_POSSIBLE |
100 | base += (tsb_paddr & 8192); | 99 | base += (tsb_paddr & 8192); |
101 | #endif | 100 | #endif |
102 | tte |= _PAGE_SZ8K; | ||
103 | page_sz = 8192; | 101 | page_sz = 8192; |
104 | break; | 102 | break; |
105 | 103 | ||
106 | case 8192 << 1: | 104 | case 8192 << 1: |
107 | tsb_reg = 0x1UL; | 105 | tsb_reg = 0x1UL; |
108 | tte |= _PAGE_SZ64K; | ||
109 | page_sz = 64 * 1024; | 106 | page_sz = 64 * 1024; |
110 | break; | 107 | break; |
111 | 108 | ||
112 | case 8192 << 2: | 109 | case 8192 << 2: |
113 | tsb_reg = 0x2UL; | 110 | tsb_reg = 0x2UL; |
114 | tte |= _PAGE_SZ64K; | ||
115 | page_sz = 64 * 1024; | 111 | page_sz = 64 * 1024; |
116 | break; | 112 | break; |
117 | 113 | ||
118 | case 8192 << 3: | 114 | case 8192 << 3: |
119 | tsb_reg = 0x3UL; | 115 | tsb_reg = 0x3UL; |
120 | tte |= _PAGE_SZ64K; | ||
121 | page_sz = 64 * 1024; | 116 | page_sz = 64 * 1024; |
122 | break; | 117 | break; |
123 | 118 | ||
124 | case 8192 << 4: | 119 | case 8192 << 4: |
125 | tsb_reg = 0x4UL; | 120 | tsb_reg = 0x4UL; |
126 | tte |= _PAGE_SZ512K; | ||
127 | page_sz = 512 * 1024; | 121 | page_sz = 512 * 1024; |
128 | break; | 122 | break; |
129 | 123 | ||
130 | case 8192 << 5: | 124 | case 8192 << 5: |
131 | tsb_reg = 0x5UL; | 125 | tsb_reg = 0x5UL; |
132 | tte |= _PAGE_SZ512K; | ||
133 | page_sz = 512 * 1024; | 126 | page_sz = 512 * 1024; |
134 | break; | 127 | break; |
135 | 128 | ||
136 | case 8192 << 6: | 129 | case 8192 << 6: |
137 | tsb_reg = 0x6UL; | 130 | tsb_reg = 0x6UL; |
138 | tte |= _PAGE_SZ512K; | ||
139 | page_sz = 512 * 1024; | 131 | page_sz = 512 * 1024; |
140 | break; | 132 | break; |
141 | 133 | ||
142 | case 8192 << 7: | 134 | case 8192 << 7: |
143 | tsb_reg = 0x7UL; | 135 | tsb_reg = 0x7UL; |
144 | tte |= _PAGE_SZ4MB; | ||
145 | page_sz = 4 * 1024 * 1024; | 136 | page_sz = 4 * 1024 * 1024; |
146 | break; | 137 | break; |
147 | 138 | ||
148 | default: | 139 | default: |
149 | BUG(); | 140 | BUG(); |
150 | }; | 141 | }; |
142 | tte |= pte_sz_bits(page_sz); | ||
151 | 143 | ||
152 | if (tlb_type == cheetah_plus || tlb_type == hypervisor) { | 144 | if (tlb_type == cheetah_plus || tlb_type == hypervisor) { |
153 | /* Physical mapping, no locked TLB entry for TSB. */ | 145 | /* Physical mapping, no locked TLB entry for TSB. */ |