aboutsummaryrefslogtreecommitdiffstats
path: root/arch/openrisc/mm/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/openrisc/mm/init.c')
-rw-r--r--arch/openrisc/mm/init.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/arch/openrisc/mm/init.c b/arch/openrisc/mm/init.c
index 79dea9740a3c..e7fdc50c4bf0 100644
--- a/arch/openrisc/mm/init.c
+++ b/arch/openrisc/mm/init.c
@@ -167,15 +167,26 @@ void __init paging_init(void)
167 unsigned long *dtlb_vector = __va(0x900); 167 unsigned long *dtlb_vector = __va(0x900);
168 unsigned long *itlb_vector = __va(0xa00); 168 unsigned long *itlb_vector = __va(0xa00);
169 169
170 printk(KERN_INFO "itlb_miss_handler %p\n", &itlb_miss_handler);
171 *itlb_vector = ((unsigned long)&itlb_miss_handler -
172 (unsigned long)itlb_vector) >> 2;
173
174 /* Soft ordering constraint to ensure that dtlb_vector is
175 * the last thing updated
176 */
177 barrier();
178
170 printk(KERN_INFO "dtlb_miss_handler %p\n", &dtlb_miss_handler); 179 printk(KERN_INFO "dtlb_miss_handler %p\n", &dtlb_miss_handler);
171 *dtlb_vector = ((unsigned long)&dtlb_miss_handler - 180 *dtlb_vector = ((unsigned long)&dtlb_miss_handler -
172 (unsigned long)dtlb_vector) >> 2; 181 (unsigned long)dtlb_vector) >> 2;
173 182
174 printk(KERN_INFO "itlb_miss_handler %p\n", &itlb_miss_handler);
175 *itlb_vector = ((unsigned long)&itlb_miss_handler -
176 (unsigned long)itlb_vector) >> 2;
177 } 183 }
178 184
185 /* Soft ordering constraint to ensure that cache invalidation and
186 * TLB flush really happen _after_ code has been modified.
187 */
188 barrier();
189
179 /* Invalidate instruction caches after code modification */ 190 /* Invalidate instruction caches after code modification */
180 mtspr(SPR_ICBIR, 0x900); 191 mtspr(SPR_ICBIR, 0x900);
181 mtspr(SPR_ICBIR, 0xa00); 192 mtspr(SPR_ICBIR, 0xa00);