Commit 7442cf9ac2de31b33311209476cd81398d3863cf
Exists in
ti-lsk-linux-4.1.y
and in
10 other branches
Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
Pull powerpc fixes from Ben Herrenschmidt: "Here is a handful of powerpc fixes for 3.16. They are all pretty simple and self contained and should still make this release" * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc: powerpc: use _GLOBAL_TOC for memmove powerpc/pseries: dynamically added OF nodes need to call of_node_init powerpc: subpage_protect: Increase the array size to take care of 64TB powerpc: Fix bugs in emulate_step() powerpc: Disable doorbells on Power8 DD1.x
Showing 7 changed files Side-by-side Diff
arch/powerpc/include/asm/cputable.h
... | ... | @@ -447,6 +447,7 @@ |
447 | 447 | CPU_FTR_DBELL | CPU_FTR_HAS_PPR | CPU_FTR_DAWR | \ |
448 | 448 | CPU_FTR_ARCH_207S | CPU_FTR_TM_COMP) |
449 | 449 | #define CPU_FTRS_POWER8E (CPU_FTRS_POWER8 | CPU_FTR_PMAO_BUG) |
450 | +#define CPU_FTRS_POWER8_DD1 (CPU_FTRS_POWER8 & ~CPU_FTR_DBELL) | |
450 | 451 | #define CPU_FTRS_CELL (CPU_FTR_USE_TB | CPU_FTR_LWSYNC | \ |
451 | 452 | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ |
452 | 453 | CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
arch/powerpc/include/asm/mmu-hash64.h
... | ... | @@ -22,6 +22,7 @@ |
22 | 22 | */ |
23 | 23 | #include <asm/pgtable-ppc64.h> |
24 | 24 | #include <asm/bug.h> |
25 | +#include <asm/processor.h> | |
25 | 26 | |
26 | 27 | /* |
27 | 28 | * Segment table |
... | ... | @@ -496,7 +497,7 @@ |
496 | 497 | */ |
497 | 498 | struct subpage_prot_table { |
498 | 499 | unsigned long maxaddr; /* only addresses < this are protected */ |
499 | - unsigned int **protptrs[2]; | |
500 | + unsigned int **protptrs[(TASK_SIZE_USER64 >> 43)]; | |
500 | 501 | unsigned int *low_prot[4]; |
501 | 502 | }; |
502 | 503 |
arch/powerpc/kernel/cputable.c
... | ... | @@ -527,6 +527,26 @@ |
527 | 527 | .machine_check_early = __machine_check_early_realmode_p8, |
528 | 528 | .platform = "power8", |
529 | 529 | }, |
530 | + { /* Power8 DD1: Does not support doorbell IPIs */ | |
531 | + .pvr_mask = 0xffffff00, | |
532 | + .pvr_value = 0x004d0100, | |
533 | + .cpu_name = "POWER8 (raw)", | |
534 | + .cpu_features = CPU_FTRS_POWER8_DD1, | |
535 | + .cpu_user_features = COMMON_USER_POWER8, | |
536 | + .cpu_user_features2 = COMMON_USER2_POWER8, | |
537 | + .mmu_features = MMU_FTRS_POWER8, | |
538 | + .icache_bsize = 128, | |
539 | + .dcache_bsize = 128, | |
540 | + .num_pmcs = 6, | |
541 | + .pmc_type = PPC_PMC_IBM, | |
542 | + .oprofile_cpu_type = "ppc64/power8", | |
543 | + .oprofile_type = PPC_OPROFILE_INVALID, | |
544 | + .cpu_setup = __setup_cpu_power8, | |
545 | + .cpu_restore = __restore_cpu_power8, | |
546 | + .flush_tlb = __flush_tlb_power8, | |
547 | + .machine_check_early = __machine_check_early_realmode_p8, | |
548 | + .platform = "power8", | |
549 | + }, | |
530 | 550 | { /* Power8 */ |
531 | 551 | .pvr_mask = 0xffff0000, |
532 | 552 | .pvr_value = 0x004d0000, |
arch/powerpc/lib/mem_64.S
arch/powerpc/lib/sstep.c
... | ... | @@ -1198,7 +1198,7 @@ |
1198 | 1198 | sh = regs->gpr[rb] & 0x3f; |
1199 | 1199 | ival = (signed int) regs->gpr[rd]; |
1200 | 1200 | regs->gpr[ra] = ival >> (sh < 32 ? sh : 31); |
1201 | - if (ival < 0 && (sh >= 32 || (ival & ((1 << sh) - 1)) != 0)) | |
1201 | + if (ival < 0 && (sh >= 32 || (ival & ((1ul << sh) - 1)) != 0)) | |
1202 | 1202 | regs->xer |= XER_CA; |
1203 | 1203 | else |
1204 | 1204 | regs->xer &= ~XER_CA; |
... | ... | @@ -1208,7 +1208,7 @@ |
1208 | 1208 | sh = rb; |
1209 | 1209 | ival = (signed int) regs->gpr[rd]; |
1210 | 1210 | regs->gpr[ra] = ival >> sh; |
1211 | - if (ival < 0 && (ival & ((1 << sh) - 1)) != 0) | |
1211 | + if (ival < 0 && (ival & ((1ul << sh) - 1)) != 0) | |
1212 | 1212 | regs->xer |= XER_CA; |
1213 | 1213 | else |
1214 | 1214 | regs->xer &= ~XER_CA; |
... | ... | @@ -1216,7 +1216,7 @@ |
1216 | 1216 | |
1217 | 1217 | #ifdef __powerpc64__ |
1218 | 1218 | case 27: /* sld */ |
1219 | - sh = regs->gpr[rd] & 0x7f; | |
1219 | + sh = regs->gpr[rb] & 0x7f; | |
1220 | 1220 | if (sh < 64) |
1221 | 1221 | regs->gpr[ra] = regs->gpr[rd] << sh; |
1222 | 1222 | else |
... | ... | @@ -1235,7 +1235,7 @@ |
1235 | 1235 | sh = regs->gpr[rb] & 0x7f; |
1236 | 1236 | ival = (signed long int) regs->gpr[rd]; |
1237 | 1237 | regs->gpr[ra] = ival >> (sh < 64 ? sh : 63); |
1238 | - if (ival < 0 && (sh >= 64 || (ival & ((1 << sh) - 1)) != 0)) | |
1238 | + if (ival < 0 && (sh >= 64 || (ival & ((1ul << sh) - 1)) != 0)) | |
1239 | 1239 | regs->xer |= XER_CA; |
1240 | 1240 | else |
1241 | 1241 | regs->xer &= ~XER_CA; |
... | ... | @@ -1246,7 +1246,7 @@ |
1246 | 1246 | sh = rb | ((instr & 2) << 4); |
1247 | 1247 | ival = (signed long int) regs->gpr[rd]; |
1248 | 1248 | regs->gpr[ra] = ival >> sh; |
1249 | - if (ival < 0 && (ival & ((1 << sh) - 1)) != 0) | |
1249 | + if (ival < 0 && (ival & ((1ul << sh) - 1)) != 0) | |
1250 | 1250 | regs->xer |= XER_CA; |
1251 | 1251 | else |
1252 | 1252 | regs->xer &= ~XER_CA; |
arch/powerpc/platforms/pseries/dlpar.c