aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHaren Myneni <haren@linux.vnet.ibm.com>2012-12-06 16:50:32 -0500
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2013-01-10 01:01:10 -0500
commit13e7a8e846c2ea38a552b986ea49332f965bbb7a (patch)
treeaf3d31b309222fbe23106740abff9418169d1cc3
parent92779245599bb3d7fb48066b11c4bfd6aa477198 (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.h37
-rw-r--r--arch/powerpc/include/asm/ppc_asm.h25
-rw-r--r--arch/powerpc/include/asm/reg.h1
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) \
116BEGIN_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); \
120END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,940)
121
122#define RESTORE_PPR_PACA(area, ra) \
123BEGIN_FTR_SECTION_NESTED(941) \
124 ld ra,area+EX_PPR(r13); \
125 mtspr SPRN_PPR,ra; \
126END_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 \
133BEGIN_FTR_SECTION_NESTED(942) \
134 HMT_MEDIUM; \
135END_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) \
142BEGIN_FTR_SECTION_NESTED(943) \
143 mfspr ra,SPRN_PPR; \
144 std ra,area+EX_PPR(r13); \
145 HMT_MEDIUM; \
146END_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 \
398BEGIN_FTR_SECTION_NESTED(944) \
399 HMT_MEDIUM_LOW; \
400END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,944)
401
402#define SET_DEFAULT_THREAD_PPR(ra, rb) \
403BEGIN_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); \
408END_FTR_SECTION_NESTED(CPU_FTR_HAS_PPR,CPU_FTR_HAS_PPR,945)
409
410#define RESTORE_PPR(ra, rb) \
411BEGIN_FTR_SECTION_NESTED(946) \
412 ld ra,PACACURRENT(r13); \
413 ld rb,TASKTHREADPPR(ra); \
414 mtspr SPRN_PPR,rb; /* Restore PPR */ \
415END_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 */