diff options
author | Haren Myneni <haren@linux.vnet.ibm.com> | 2012-12-06 16:50:32 -0500 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2013-01-10 01:01:10 -0500 |
commit | 13e7a8e846c2ea38a552b986ea49332f965bbb7a (patch) | |
tree | af3d31b309222fbe23106740abff9418169d1cc3 | |
parent | 92779245599bb3d7fb48066b11c4bfd6aa477198 (diff) |
powerpc: Macros for saving/restore PPR
[PATCH 5/6] powerpc: Macros for saving/restore PPR
Several macros are defined for saving and restore user defined PPR value.
Signed-off-by: Haren Myneni <haren@us.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-rw-r--r-- | arch/powerpc/include/asm/exception-64s.h | 37 | ||||
-rw-r--r-- | arch/powerpc/include/asm/ppc_asm.h | 25 | ||||
-rw-r--r-- | arch/powerpc/include/asm/reg.h | 1 |
3 files changed, 63 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h index ed3cdcb50198..391e01387248 100644 --- a/arch/powerpc/include/asm/exception-64s.h +++ b/arch/powerpc/include/asm/exception-64s.h | |||
@@ -108,6 +108,43 @@ | |||
108 | #define RESTORE_LR(reg, area) | 108 | #define RESTORE_LR(reg, area) |
109 | #endif | 109 | #endif |
110 | 110 | ||
111 | /* | ||
112 | * PPR save/restore macros used in exceptions_64s.S | ||
113 | * Used for P7 or later processors | ||
114 | */ | ||
115 | #define SAVE_PPR(area, ra, rb) \ | ||
116 | BEGIN_FTR_SECTION_NESTED(940) \ | ||
117 | ld ra,PACACURRENT(r13); \ | ||
118 | ld rb,area+EX_PPR(r13); /* Read PPR from paca */ \ | ||
119 | std rb,TASKTHREADPPR(ra); \ | ||
120 | END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,940) | ||
121 | |||
122 | #define RESTORE_PPR_PACA(area, ra) \ | ||
123 | BEGIN_FTR_SECTION_NESTED(941) \ | ||
124 | ld ra,area+EX_PPR(r13); \ | ||
125 | mtspr SPRN_PPR,ra; \ | ||
126 | END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,941) | ||
127 | |||
128 | /* | ||
129 | * Increase the priority on systems where PPR save/restore is not | ||
130 | * implemented/ supported. | ||
131 | */ | ||
132 | #define HMT_MEDIUM_PPR_DISCARD \ | ||
133 | BEGIN_FTR_SECTION_NESTED(942) \ | ||
134 | HMT_MEDIUM; \ | ||
135 | END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,0,942) /*non P7*/ | ||
136 | |||
137 | /* | ||
138 | * Save PPR in paca whenever some register is available to use. | ||
139 | * Then increase the priority. | ||
140 | */ | ||
141 | #define HMT_MEDIUM_PPR_SAVE(area, ra) \ | ||
142 | BEGIN_FTR_SECTION_NESTED(943) \ | ||
143 | mfspr ra,SPRN_PPR; \ | ||
144 | std ra,area+EX_PPR(r13); \ | ||
145 | HMT_MEDIUM; \ | ||
146 | END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,943) | ||
147 | |||
111 | #define __EXCEPTION_PROLOG_1(area, extra, vec) \ | 148 | #define __EXCEPTION_PROLOG_1(area, extra, vec) \ |
112 | GET_PACA(r13); \ | 149 | GET_PACA(r13); \ |
113 | std r9,area+EX_R9(r13); /* save r9 - r12 */ \ | 150 | std r9,area+EX_R9(r13); /* save r9 - r12 */ \ |
diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h index 376e36d707f9..c2d0e58aba31 100644 --- a/arch/powerpc/include/asm/ppc_asm.h +++ b/arch/powerpc/include/asm/ppc_asm.h | |||
@@ -389,6 +389,31 @@ END_FTR_SECTION_IFCLR(CPU_FTR_601) | |||
389 | FTR_SECTION_ELSE_NESTED(848); \ | 389 | FTR_SECTION_ELSE_NESTED(848); \ |
390 | mtocrf (FXM), RS; \ | 390 | mtocrf (FXM), RS; \ |
391 | ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_NOEXECUTE, 848) | 391 | ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_NOEXECUTE, 848) |
392 | |||
393 | /* | ||
394 | * PPR restore macros used in entry_64.S | ||
395 | * Used for P7 or later processors | ||
396 | */ | ||
397 | #define HMT_MEDIUM_LOW_HAS_PPR \ | ||
398 | BEGIN_FTR_SECTION_NESTED(944) \ | ||
399 | HMT_MEDIUM_LOW; \ | ||
400 | END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,944) | ||
401 | |||
402 | #define SET_DEFAULT_THREAD_PPR(ra, rb) \ | ||
403 | BEGIN_FTR_SECTION_NESTED(945) \ | ||
404 | lis ra,INIT_PPR@highest; /* default ppr=3 */ \ | ||
405 | ld rb,PACACURRENT(r13); \ | ||
406 | sldi ra,ra,32; /* 11- 13 bits are used for ppr */ \ | ||
407 | std ra,TASKTHREADPPR(rb); \ | ||
408 | END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,945) | ||
409 | |||
410 | #define RESTORE_PPR(ra, rb) \ | ||
411 | BEGIN_FTR_SECTION_NESTED(946) \ | ||
412 | ld ra,PACACURRENT(r13); \ | ||
413 | ld rb,TASKTHREADPPR(ra); \ | ||
414 | mtspr SPRN_PPR,rb; /* Restore PPR */ \ | ||
415 | END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,946) | ||
416 | |||
392 | #endif | 417 | #endif |
393 | 418 | ||
394 | /* | 419 | /* |
diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h index af88486b0c23..1bdba54839b4 100644 --- a/arch/powerpc/include/asm/reg.h +++ b/arch/powerpc/include/asm/reg.h | |||
@@ -289,6 +289,7 @@ | |||
289 | #define SPRN_DBAT6U 0x23C /* Data BAT 6 Upper Register */ | 289 | #define SPRN_DBAT6U 0x23C /* Data BAT 6 Upper Register */ |
290 | #define SPRN_DBAT7L 0x23F /* Data BAT 7 Lower Register */ | 290 | #define SPRN_DBAT7L 0x23F /* Data BAT 7 Lower Register */ |
291 | #define SPRN_DBAT7U 0x23E /* Data BAT 7 Upper Register */ | 291 | #define SPRN_DBAT7U 0x23E /* Data BAT 7 Upper Register */ |
292 | #define SPRN_PPR 0x380 /* SMT Thread status Register */ | ||
292 | 293 | ||
293 | #define SPRN_DEC 0x016 /* Decrement Register */ | 294 | #define SPRN_DEC 0x016 /* Decrement Register */ |
294 | #define SPRN_DER 0x095 /* Debug Enable Regsiter */ | 295 | #define SPRN_DER 0x095 /* Debug Enable Regsiter */ |