diff options
-rw-r--r-- | arch/powerpc/kernel/entry_64.S | 6 | ||||
-rw-r--r-- | arch/powerpc/mm/hash_utils_64.c | 1 | ||||
-rw-r--r-- | arch/powerpc/mm/slb.c | 3 | ||||
-rw-r--r-- | include/asm-powerpc/cputable.h | 3 |
4 files changed, 11 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index 0ec134034899..148a3547c9aa 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S | |||
@@ -408,6 +408,12 @@ END_FTR_SECTION_IFSET(CPU_FTR_1T_SEGMENT) | |||
408 | std r7,SLBSHADOW_STACKVSID(r9) /* Save VSID */ | 408 | std r7,SLBSHADOW_STACKVSID(r9) /* Save VSID */ |
409 | std r0,SLBSHADOW_STACKESID(r9) /* Save ESID */ | 409 | std r0,SLBSHADOW_STACKESID(r9) /* Save ESID */ |
410 | 410 | ||
411 | /* No need to check for CPU_FTR_NO_SLBIE_B here, since when | ||
412 | * we have 1TB segments, the only CPUs known to have the errata | ||
413 | * only support less than 1TB of system memory and we'll never | ||
414 | * actually hit this code path. | ||
415 | */ | ||
416 | |||
411 | slbie r6 | 417 | slbie r6 |
412 | slbie r6 /* Workaround POWER5 < DD2.1 issue */ | 418 | slbie r6 /* Workaround POWER5 < DD2.1 issue */ |
413 | slbmte r7,r0 | 419 | slbmte r7,r0 |
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c index 09da90b53850..c78dc912411f 100644 --- a/arch/powerpc/mm/hash_utils_64.c +++ b/arch/powerpc/mm/hash_utils_64.c | |||
@@ -212,6 +212,7 @@ static int __init htab_dt_scan_seg_sizes(unsigned long node, | |||
212 | return 1; | 212 | return 1; |
213 | } | 213 | } |
214 | } | 214 | } |
215 | cur_cpu_spec->cpu_features &= ~CPU_FTR_NO_SLBIE_B; | ||
215 | return 0; | 216 | return 0; |
216 | } | 217 | } |
217 | 218 | ||
diff --git a/arch/powerpc/mm/slb.c b/arch/powerpc/mm/slb.c index 6c164cec9d2c..bbd2c512ee05 100644 --- a/arch/powerpc/mm/slb.c +++ b/arch/powerpc/mm/slb.c | |||
@@ -157,7 +157,8 @@ void switch_slb(struct task_struct *tsk, struct mm_struct *mm) | |||
157 | unsigned long stack = KSTK_ESP(tsk); | 157 | unsigned long stack = KSTK_ESP(tsk); |
158 | unsigned long unmapped_base; | 158 | unsigned long unmapped_base; |
159 | 159 | ||
160 | if (offset <= SLB_CACHE_ENTRIES) { | 160 | if (!cpu_has_feature(CPU_FTR_NO_SLBIE_B) && |
161 | offset <= SLB_CACHE_ENTRIES) { | ||
161 | int i; | 162 | int i; |
162 | asm volatile("isync" : : : "memory"); | 163 | asm volatile("isync" : : : "memory"); |
163 | for (i = 0; i < offset; i++) { | 164 | for (i = 0; i < offset; i++) { |
diff --git a/include/asm-powerpc/cputable.h b/include/asm-powerpc/cputable.h index ae093ef68363..9d74338e3dec 100644 --- a/include/asm-powerpc/cputable.h +++ b/include/asm-powerpc/cputable.h | |||
@@ -165,6 +165,7 @@ extern void do_feature_fixups(unsigned long value, void *fixup_start, | |||
165 | #define CPU_FTR_SPURR LONG_ASM_CONST(0x0001000000000000) | 165 | #define CPU_FTR_SPURR LONG_ASM_CONST(0x0001000000000000) |
166 | #define CPU_FTR_DSCR LONG_ASM_CONST(0x0002000000000000) | 166 | #define CPU_FTR_DSCR LONG_ASM_CONST(0x0002000000000000) |
167 | #define CPU_FTR_1T_SEGMENT LONG_ASM_CONST(0x0004000000000000) | 167 | #define CPU_FTR_1T_SEGMENT LONG_ASM_CONST(0x0004000000000000) |
168 | #define CPU_FTR_NO_SLBIE_B LONG_ASM_CONST(0x0008000000000000) | ||
168 | 169 | ||
169 | #ifndef __ASSEMBLY__ | 170 | #ifndef __ASSEMBLY__ |
170 | 171 | ||
@@ -367,7 +368,7 @@ extern void do_feature_fixups(unsigned long value, void *fixup_start, | |||
367 | #define CPU_FTRS_PA6T (CPU_FTR_USE_TB | \ | 368 | #define CPU_FTRS_PA6T (CPU_FTR_USE_TB | \ |
368 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \ | 369 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \ |
369 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_CI_LARGE_PAGE | \ | 370 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_CI_LARGE_PAGE | \ |
370 | CPU_FTR_PURR | CPU_FTR_REAL_LE) | 371 | CPU_FTR_PURR | CPU_FTR_REAL_LE | CPU_FTR_NO_SLBIE_B) |
371 | #define CPU_FTRS_COMPATIBLE (CPU_FTR_USE_TB | \ | 372 | #define CPU_FTRS_COMPATIBLE (CPU_FTR_USE_TB | \ |
372 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2) | 373 | CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2) |
373 | 374 | ||