aboutsummaryrefslogtreecommitdiffstats
path: root/arch/openrisc
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-02-26 22:46:23 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-02-26 22:46:23 -0500
commita9a07d40bc9c57881555b64fe8bf66fd28e2f13a (patch)
tree20c08b4e6756db92bf7720d5ca1af67b83430828 /arch/openrisc
parent2003cd90c473f66d34114bc61c49e7d74d370894 (diff)
parent160d83781a32e94a1e337efd6722939001e62398 (diff)
Merge branch 'for-upstream' of git://openrisc.net/jonas/linux
Pull OpenRISC updates from Jonas Bonn: "An equal number of bug fixes and trivial cleanups; no new features. - Two patches to fix errors thrown by the updated toolchain. - Three other bug fixes. - Four trivial cleanups." * 'for-upstream' of git://openrisc.net/jonas/linux: openrisc: add missing header inclusion openrisc: really pass correct arg to schedule_tail Add bitops include needed for ext2 filesystem openrisc: update DTLB-miss handler last openrisc: fix up vmalloc page table loading openrisc idle: delete pm_idle openrisc: remove CONFIG_SYMBOL_PREFIX openrisc: avoid using function parameter regs in reset vector openrisc: remove unused current_regs
Diffstat (limited to 'arch/openrisc')
-rw-r--r--arch/openrisc/Kconfig4
-rw-r--r--arch/openrisc/include/asm/bitops.h1
-rw-r--r--arch/openrisc/include/asm/processor.h1
-rw-r--r--arch/openrisc/kernel/entry.S16
-rw-r--r--arch/openrisc/kernel/head.S13
-rw-r--r--arch/openrisc/mm/init.c17
6 files changed, 34 insertions, 18 deletions
diff --git a/arch/openrisc/Kconfig b/arch/openrisc/Kconfig
index 0ac66f67521f..35a4e5f6e71c 100644
--- a/arch/openrisc/Kconfig
+++ b/arch/openrisc/Kconfig
@@ -26,10 +26,6 @@ config OPENRISC
26config MMU 26config MMU
27 def_bool y 27 def_bool y
28 28
29config SYMBOL_PREFIX
30 string
31 default ""
32
33config HAVE_DMA_ATTRS 29config HAVE_DMA_ATTRS
34 def_bool y 30 def_bool y
35 31
diff --git a/arch/openrisc/include/asm/bitops.h b/arch/openrisc/include/asm/bitops.h
index a9e11efae14d..2c64f2228dc7 100644
--- a/arch/openrisc/include/asm/bitops.h
+++ b/arch/openrisc/include/asm/bitops.h
@@ -54,6 +54,7 @@
54 54
55#include <asm-generic/bitops/atomic.h> 55#include <asm-generic/bitops/atomic.h>
56#include <asm-generic/bitops/non-atomic.h> 56#include <asm-generic/bitops/non-atomic.h>
57#include <asm-generic/bitops/le.h>
57#include <asm-generic/bitops/ext2-atomic.h> 58#include <asm-generic/bitops/ext2-atomic.h>
58 59
59#endif /* __ASM_GENERIC_BITOPS_H */ 60#endif /* __ASM_GENERIC_BITOPS_H */
diff --git a/arch/openrisc/include/asm/processor.h b/arch/openrisc/include/asm/processor.h
index 33691380608e..cab746fa9e87 100644
--- a/arch/openrisc/include/asm/processor.h
+++ b/arch/openrisc/include/asm/processor.h
@@ -70,7 +70,6 @@ struct thread_struct {
70 */ 70 */
71 71
72#define task_pt_regs(task) user_regs(task_thread_info(task)) 72#define task_pt_regs(task) user_regs(task_thread_info(task))
73#define current_regs() user_regs(current_thread_info())
74 73
75#define INIT_SP (sizeof(init_stack) + (unsigned long) &init_stack) 74#define INIT_SP (sizeof(init_stack) + (unsigned long) &init_stack)
76 75
diff --git a/arch/openrisc/kernel/entry.S b/arch/openrisc/kernel/entry.S
index 54afd0a129fe..d8a455ede5a7 100644
--- a/arch/openrisc/kernel/entry.S
+++ b/arch/openrisc/kernel/entry.S
@@ -201,12 +201,17 @@ EXCEPTION_ENTRY(_bus_fault_handler)
201 l.nop 201 l.nop
202 202
203/* ---[ 0x300: Data Page Fault exception ]------------------------------- */ 203/* ---[ 0x300: Data Page Fault exception ]------------------------------- */
204EXCEPTION_ENTRY(_dtlb_miss_page_fault_handler)
205 l.and r5,r5,r0
206 l.j 1f
207 l.nop
204 208
205EXCEPTION_ENTRY(_data_page_fault_handler) 209EXCEPTION_ENTRY(_data_page_fault_handler)
206 /* set up parameters for do_page_fault */ 210 /* set up parameters for do_page_fault */
211 l.ori r5,r0,0x300 // exception vector
2121:
207 l.addi r3,r1,0 // pt_regs 213 l.addi r3,r1,0 // pt_regs
208 /* r4 set be EXCEPTION_HANDLE */ // effective address of fault 214 /* r4 set be EXCEPTION_HANDLE */ // effective address of fault
209 l.ori r5,r0,0x300 // exception vector
210 215
211 /* 216 /*
212 * __PHX__: TODO 217 * __PHX__: TODO
@@ -276,12 +281,17 @@ EXCEPTION_ENTRY(_data_page_fault_handler)
276 l.nop 281 l.nop
277 282
278/* ---[ 0x400: Insn Page Fault exception ]------------------------------- */ 283/* ---[ 0x400: Insn Page Fault exception ]------------------------------- */
284EXCEPTION_ENTRY(_itlb_miss_page_fault_handler)
285 l.and r5,r5,r0
286 l.j 1f
287 l.nop
279 288
280EXCEPTION_ENTRY(_insn_page_fault_handler) 289EXCEPTION_ENTRY(_insn_page_fault_handler)
281 /* set up parameters for do_page_fault */ 290 /* set up parameters for do_page_fault */
291 l.ori r5,r0,0x400 // exception vector
2921:
282 l.addi r3,r1,0 // pt_regs 293 l.addi r3,r1,0 // pt_regs
283 /* r4 set be EXCEPTION_HANDLE */ // effective address of fault 294 /* r4 set be EXCEPTION_HANDLE */ // effective address of fault
284 l.ori r5,r0,0x400 // exception vector
285 l.ori r6,r0,0x0 // !write access 295 l.ori r6,r0,0x0 // !write access
286 296
287 /* call fault.c handler in or32/mm/fault.c */ 297 /* call fault.c handler in or32/mm/fault.c */
@@ -1040,7 +1050,7 @@ ENTRY(_switch)
1040 * we are expected to have set up the arg to schedule_tail already, 1050 * we are expected to have set up the arg to schedule_tail already,
1041 * hence we do so here unconditionally: 1051 * hence we do so here unconditionally:
1042 */ 1052 */
1043 l.lwz r3,TI_STACK(r3) /* Load 'prev' as schedule_tail arg */ 1053 l.lwz r3,TI_TASK(r3) /* Load 'prev' as schedule_tail arg */
1044 l.jr r9 1054 l.jr r9
1045 l.nop 1055 l.nop
1046 1056
diff --git a/arch/openrisc/kernel/head.S b/arch/openrisc/kernel/head.S
index 1088b5fca3bd..1d3c9c28ac25 100644
--- a/arch/openrisc/kernel/head.S
+++ b/arch/openrisc/kernel/head.S
@@ -19,6 +19,7 @@
19#include <linux/threads.h> 19#include <linux/threads.h>
20#include <linux/errno.h> 20#include <linux/errno.h>
21#include <linux/init.h> 21#include <linux/init.h>
22#include <linux/serial_reg.h>
22#include <asm/processor.h> 23#include <asm/processor.h>
23#include <asm/page.h> 24#include <asm/page.h>
24#include <asm/mmu.h> 25#include <asm/mmu.h>
@@ -291,9 +292,9 @@
291 /* Jump to .init code at _start which lives in the .head section 292 /* Jump to .init code at _start which lives in the .head section
292 * and will be discarded after boot. 293 * and will be discarded after boot.
293 */ 294 */
294 LOAD_SYMBOL_2_GPR(r4, _start) 295 LOAD_SYMBOL_2_GPR(r15, _start)
295 tophys (r3,r4) /* MMU disabled */ 296 tophys (r13,r15) /* MMU disabled */
296 l.jr r3 297 l.jr r13
297 l.nop 298 l.nop
298 299
299/* ---[ 0x200: BUS exception ]------------------------------------------- */ 300/* ---[ 0x200: BUS exception ]------------------------------------------- */
@@ -1069,8 +1070,7 @@ d_pte_not_present:
1069 EXCEPTION_LOAD_GPR4 1070 EXCEPTION_LOAD_GPR4
1070 EXCEPTION_LOAD_GPR5 1071 EXCEPTION_LOAD_GPR5
1071 EXCEPTION_LOAD_GPR6 1072 EXCEPTION_LOAD_GPR6
1072 l.j _dispatch_do_dpage_fault 1073 EXCEPTION_HANDLE(_dtlb_miss_page_fault_handler)
1073 l.nop
1074 1074
1075/* ==============================================[ ITLB miss handler ]=== */ 1075/* ==============================================[ ITLB miss handler ]=== */
1076ENTRY(itlb_miss_handler) 1076ENTRY(itlb_miss_handler)
@@ -1192,8 +1192,7 @@ i_pte_not_present:
1192 EXCEPTION_LOAD_GPR4 1192 EXCEPTION_LOAD_GPR4
1193 EXCEPTION_LOAD_GPR5 1193 EXCEPTION_LOAD_GPR5
1194 EXCEPTION_LOAD_GPR6 1194 EXCEPTION_LOAD_GPR6
1195 l.j _dispatch_do_ipage_fault 1195 EXCEPTION_HANDLE(_itlb_miss_page_fault_handler)
1196 l.nop
1197 1196
1198/* ==============================================[ boot tlb handlers ]=== */ 1197/* ==============================================[ boot tlb handlers ]=== */
1199 1198
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);