diff options
| author | Takashi Iwai <tiwai@suse.de> | 2017-05-02 02:25:25 -0400 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2017-05-02 02:25:25 -0400 |
| commit | a5c3b32a1146e44f6b38fdfdfffc27842953420c (patch) | |
| tree | eca93f51c8deabe77ed079a3e9190717b6380009 /arch/powerpc | |
| parent | d7dc450d5a7162de96edbed6b1792240c2f3a55f (diff) | |
| parent | 20d5c84bef067b7e804a163e2abca16c47125bad (diff) | |
Merge tag 'asoc-v4.12' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Updates for v4.12
A quiet release for the core, but lots of new drivers this time around:
- A new, generalized, API for hooking up jacks which makes it easier to
write generic machine drivers for simple cases.
- Continuing fixes for issues with the x86 CPU drivers.
- New drivers for Cirrus CS35L35, DIO DIO2125, Everest ES7132,
HiSilicon hi6210, Maxim MAX98927, MT2701 systems with WM8960, Nuvoton
NAU8824, Odroid systems, ST STM32 SAI controllers and x86 systems with
DA7213
Diffstat (limited to 'arch/powerpc')
| -rw-r--r-- | arch/powerpc/crypto/crc32c-vpmsum_glue.c | 3 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/exception-64s.h | 8 | ||||
| -rw-r--r-- | arch/powerpc/kernel/align.c | 27 | ||||
| -rw-r--r-- | arch/powerpc/kernel/entry_64.S | 6 | ||||
| -rw-r--r-- | arch/powerpc/kernel/exceptions-64s.S | 2 | ||||
| -rw-r--r-- | arch/powerpc/kernel/idle_book3s.S | 20 | ||||
| -rw-r--r-- | arch/powerpc/kernel/misc_64.S | 4 | ||||
| -rw-r--r-- | arch/powerpc/kernel/setup_64.c | 9 | ||||
| -rw-r--r-- | arch/powerpc/kvm/book3s_64_mmu_hv.c | 4 | ||||
| -rw-r--r-- | arch/powerpc/mm/hash_native_64.c | 7 | ||||
| -rw-r--r-- | arch/powerpc/mm/init_64.c | 3 |
11 files changed, 68 insertions, 25 deletions
diff --git a/arch/powerpc/crypto/crc32c-vpmsum_glue.c b/arch/powerpc/crypto/crc32c-vpmsum_glue.c index 411994551afc..f058e0c3e4d4 100644 --- a/arch/powerpc/crypto/crc32c-vpmsum_glue.c +++ b/arch/powerpc/crypto/crc32c-vpmsum_glue.c | |||
| @@ -33,10 +33,13 @@ static u32 crc32c_vpmsum(u32 crc, unsigned char const *p, size_t len) | |||
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | if (len & ~VMX_ALIGN_MASK) { | 35 | if (len & ~VMX_ALIGN_MASK) { |
| 36 | preempt_disable(); | ||
| 36 | pagefault_disable(); | 37 | pagefault_disable(); |
| 37 | enable_kernel_altivec(); | 38 | enable_kernel_altivec(); |
| 38 | crc = __crc32c_vpmsum(crc, p, len & ~VMX_ALIGN_MASK); | 39 | crc = __crc32c_vpmsum(crc, p, len & ~VMX_ALIGN_MASK); |
| 40 | disable_kernel_altivec(); | ||
| 39 | pagefault_enable(); | 41 | pagefault_enable(); |
| 42 | preempt_enable(); | ||
| 40 | } | 43 | } |
| 41 | 44 | ||
| 42 | tail = len & VMX_ALIGN_MASK; | 45 | tail = len & VMX_ALIGN_MASK; |
diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h index 14752eee3d0c..ed3beadd2cc5 100644 --- a/arch/powerpc/include/asm/exception-64s.h +++ b/arch/powerpc/include/asm/exception-64s.h | |||
| @@ -236,9 +236,9 @@ END_FTR_SECTION_NESTED(ftr,ftr,943) | |||
| 236 | mtctr reg; \ | 236 | mtctr reg; \ |
| 237 | bctr | 237 | bctr |
| 238 | 238 | ||
| 239 | #define BRANCH_LINK_TO_FAR(reg, label) \ | 239 | #define BRANCH_LINK_TO_FAR(label) \ |
| 240 | __LOAD_FAR_HANDLER(reg, label); \ | 240 | __LOAD_FAR_HANDLER(r12, label); \ |
| 241 | mtctr reg; \ | 241 | mtctr r12; \ |
| 242 | bctrl | 242 | bctrl |
| 243 | 243 | ||
| 244 | /* | 244 | /* |
| @@ -265,7 +265,7 @@ END_FTR_SECTION_NESTED(ftr,ftr,943) | |||
| 265 | #define BRANCH_TO_COMMON(reg, label) \ | 265 | #define BRANCH_TO_COMMON(reg, label) \ |
| 266 | b label | 266 | b label |
| 267 | 267 | ||
| 268 | #define BRANCH_LINK_TO_FAR(reg, label) \ | 268 | #define BRANCH_LINK_TO_FAR(label) \ |
| 269 | bl label | 269 | bl label |
| 270 | 270 | ||
| 271 | #define BRANCH_TO_KVM(reg, label) \ | 271 | #define BRANCH_TO_KVM(reg, label) \ |
diff --git a/arch/powerpc/kernel/align.c b/arch/powerpc/kernel/align.c index cbc7c42cdb74..ec7a8b099dd9 100644 --- a/arch/powerpc/kernel/align.c +++ b/arch/powerpc/kernel/align.c | |||
| @@ -807,14 +807,25 @@ int fix_alignment(struct pt_regs *regs) | |||
| 807 | nb = aligninfo[instr].len; | 807 | nb = aligninfo[instr].len; |
| 808 | flags = aligninfo[instr].flags; | 808 | flags = aligninfo[instr].flags; |
| 809 | 809 | ||
| 810 | /* ldbrx/stdbrx overlap lfs/stfs in the DSISR unfortunately */ | 810 | /* |
| 811 | if (IS_XFORM(instruction) && ((instruction >> 1) & 0x3ff) == 532) { | 811 | * Handle some cases which give overlaps in the DSISR values. |
| 812 | nb = 8; | 812 | */ |
| 813 | flags = LD+SW; | 813 | if (IS_XFORM(instruction)) { |
| 814 | } else if (IS_XFORM(instruction) && | 814 | switch (get_xop(instruction)) { |
| 815 | ((instruction >> 1) & 0x3ff) == 660) { | 815 | case 532: /* ldbrx */ |
| 816 | nb = 8; | 816 | nb = 8; |
| 817 | flags = ST+SW; | 817 | flags = LD+SW; |
| 818 | break; | ||
| 819 | case 660: /* stdbrx */ | ||
| 820 | nb = 8; | ||
| 821 | flags = ST+SW; | ||
| 822 | break; | ||
| 823 | case 20: /* lwarx */ | ||
| 824 | case 84: /* ldarx */ | ||
| 825 | case 116: /* lharx */ | ||
| 826 | case 276: /* lqarx */ | ||
| 827 | return 0; /* not emulated ever */ | ||
| 828 | } | ||
| 818 | } | 829 | } |
| 819 | 830 | ||
| 820 | /* Byteswap little endian loads and stores */ | 831 | /* Byteswap little endian loads and stores */ |
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index 6432d4bf08c8..767ef6d68c9e 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S | |||
| @@ -689,7 +689,7 @@ resume_kernel: | |||
| 689 | 689 | ||
| 690 | addi r8,r1,INT_FRAME_SIZE /* Get the kprobed function entry */ | 690 | addi r8,r1,INT_FRAME_SIZE /* Get the kprobed function entry */ |
| 691 | 691 | ||
| 692 | lwz r3,GPR1(r1) | 692 | ld r3,GPR1(r1) |
| 693 | subi r3,r3,INT_FRAME_SIZE /* dst: Allocate a trampoline exception frame */ | 693 | subi r3,r3,INT_FRAME_SIZE /* dst: Allocate a trampoline exception frame */ |
| 694 | mr r4,r1 /* src: current exception frame */ | 694 | mr r4,r1 /* src: current exception frame */ |
| 695 | mr r1,r3 /* Reroute the trampoline frame to r1 */ | 695 | mr r1,r3 /* Reroute the trampoline frame to r1 */ |
| @@ -703,8 +703,8 @@ resume_kernel: | |||
| 703 | addi r6,r6,8 | 703 | addi r6,r6,8 |
| 704 | bdnz 2b | 704 | bdnz 2b |
| 705 | 705 | ||
| 706 | /* Do real store operation to complete stwu */ | 706 | /* Do real store operation to complete stdu */ |
| 707 | lwz r5,GPR1(r1) | 707 | ld r5,GPR1(r1) |
| 708 | std r8,0(r5) | 708 | std r8,0(r5) |
| 709 | 709 | ||
| 710 | /* Clear _TIF_EMULATE_STACK_STORE flag */ | 710 | /* Clear _TIF_EMULATE_STACK_STORE flag */ |
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index 857bf7c5b946..6353019966e6 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S | |||
| @@ -982,7 +982,7 @@ TRAMP_REAL_BEGIN(hmi_exception_early) | |||
| 982 | EXCEPTION_PROLOG_COMMON_2(PACA_EXGEN) | 982 | EXCEPTION_PROLOG_COMMON_2(PACA_EXGEN) |
| 983 | EXCEPTION_PROLOG_COMMON_3(0xe60) | 983 | EXCEPTION_PROLOG_COMMON_3(0xe60) |
| 984 | addi r3,r1,STACK_FRAME_OVERHEAD | 984 | addi r3,r1,STACK_FRAME_OVERHEAD |
| 985 | BRANCH_LINK_TO_FAR(r4, hmi_exception_realmode) | 985 | BRANCH_LINK_TO_FAR(hmi_exception_realmode) /* Function call ABI */ |
| 986 | /* Windup the stack. */ | 986 | /* Windup the stack. */ |
| 987 | /* Move original HSRR0 and HSRR1 into the respective regs */ | 987 | /* Move original HSRR0 and HSRR1 into the respective regs */ |
| 988 | ld r9,_MSR(r1) | 988 | ld r9,_MSR(r1) |
diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S index 995728736677..6fd08219248d 100644 --- a/arch/powerpc/kernel/idle_book3s.S +++ b/arch/powerpc/kernel/idle_book3s.S | |||
| @@ -449,9 +449,23 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300) | |||
| 449 | _GLOBAL(pnv_wakeup_tb_loss) | 449 | _GLOBAL(pnv_wakeup_tb_loss) |
| 450 | ld r1,PACAR1(r13) | 450 | ld r1,PACAR1(r13) |
| 451 | /* | 451 | /* |
| 452 | * Before entering any idle state, the NVGPRs are saved in the stack | 452 | * Before entering any idle state, the NVGPRs are saved in the stack. |
| 453 | * and they are restored before switching to the process context. Hence | 453 | * If there was a state loss, or PACA_NAPSTATELOST was set, then the |
| 454 | * until they are restored, they are free to be used. | 454 | * NVGPRs are restored. If we are here, it is likely that state is lost, |
| 455 | * but not guaranteed -- neither ISA207 nor ISA300 tests to reach | ||
| 456 | * here are the same as the test to restore NVGPRS: | ||
| 457 | * PACA_THREAD_IDLE_STATE test for ISA207, PSSCR test for ISA300, | ||
| 458 | * and SRR1 test for restoring NVGPRs. | ||
| 459 | * | ||
| 460 | * We are about to clobber NVGPRs now, so set NAPSTATELOST to | ||
| 461 | * guarantee they will always be restored. This might be tightened | ||
| 462 | * with careful reading of specs (particularly for ISA300) but this | ||
| 463 | * is already a slow wakeup path and it's simpler to be safe. | ||
| 464 | */ | ||
| 465 | li r0,1 | ||
| 466 | stb r0,PACA_NAPSTATELOST(r13) | ||
| 467 | |||
| 468 | /* | ||
| 455 | * | 469 | * |
| 456 | * Save SRR1 and LR in NVGPRs as they might be clobbered in | 470 | * Save SRR1 and LR in NVGPRs as they might be clobbered in |
| 457 | * opal_call() (called in CHECK_HMI_INTERRUPT). SRR1 is required | 471 | * opal_call() (called in CHECK_HMI_INTERRUPT). SRR1 is required |
diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S index ae179cb1bb3c..c119044cad0d 100644 --- a/arch/powerpc/kernel/misc_64.S +++ b/arch/powerpc/kernel/misc_64.S | |||
| @@ -67,7 +67,7 @@ PPC64_CACHES: | |||
| 67 | * flush all bytes from start through stop-1 inclusive | 67 | * flush all bytes from start through stop-1 inclusive |
| 68 | */ | 68 | */ |
| 69 | 69 | ||
| 70 | _GLOBAL(flush_icache_range) | 70 | _GLOBAL_TOC(flush_icache_range) |
| 71 | BEGIN_FTR_SECTION | 71 | BEGIN_FTR_SECTION |
| 72 | PURGE_PREFETCHED_INS | 72 | PURGE_PREFETCHED_INS |
| 73 | blr | 73 | blr |
| @@ -120,7 +120,7 @@ EXPORT_SYMBOL(flush_icache_range) | |||
| 120 | * | 120 | * |
| 121 | * flush all bytes from start to stop-1 inclusive | 121 | * flush all bytes from start to stop-1 inclusive |
| 122 | */ | 122 | */ |
| 123 | _GLOBAL(flush_dcache_range) | 123 | _GLOBAL_TOC(flush_dcache_range) |
| 124 | 124 | ||
| 125 | /* | 125 | /* |
| 126 | * Flush the data cache to memory | 126 | * Flush the data cache to memory |
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c index 9cfaa8b69b5f..f997154dfc41 100644 --- a/arch/powerpc/kernel/setup_64.c +++ b/arch/powerpc/kernel/setup_64.c | |||
| @@ -236,6 +236,15 @@ static void cpu_ready_for_interrupts(void) | |||
| 236 | mtspr(SPRN_LPCR, lpcr | LPCR_AIL_3); | 236 | mtspr(SPRN_LPCR, lpcr | LPCR_AIL_3); |
| 237 | } | 237 | } |
| 238 | 238 | ||
| 239 | /* | ||
| 240 | * Fixup HFSCR:TM based on CPU features. The bit is set by our | ||
| 241 | * early asm init because at that point we haven't updated our | ||
| 242 | * CPU features from firmware and device-tree. Here we have, | ||
| 243 | * so let's do it. | ||
| 244 | */ | ||
| 245 | if (cpu_has_feature(CPU_FTR_HVMODE) && !cpu_has_feature(CPU_FTR_TM_COMP)) | ||
| 246 | mtspr(SPRN_HFSCR, mfspr(SPRN_HFSCR) & ~HFSCR_TM); | ||
| 247 | |||
| 239 | /* Set IR and DR in PACA MSR */ | 248 | /* Set IR and DR in PACA MSR */ |
| 240 | get_paca()->kernel_msr = MSR_KERNEL; | 249 | get_paca()->kernel_msr = MSR_KERNEL; |
| 241 | } | 250 | } |
diff --git a/arch/powerpc/kvm/book3s_64_mmu_hv.c b/arch/powerpc/kvm/book3s_64_mmu_hv.c index 8c68145ba1bd..710e491206ed 100644 --- a/arch/powerpc/kvm/book3s_64_mmu_hv.c +++ b/arch/powerpc/kvm/book3s_64_mmu_hv.c | |||
| @@ -1487,6 +1487,10 @@ long kvm_vm_ioctl_resize_hpt_prepare(struct kvm *kvm, | |||
| 1487 | /* start new resize */ | 1487 | /* start new resize */ |
| 1488 | 1488 | ||
| 1489 | resize = kzalloc(sizeof(*resize), GFP_KERNEL); | 1489 | resize = kzalloc(sizeof(*resize), GFP_KERNEL); |
| 1490 | if (!resize) { | ||
| 1491 | ret = -ENOMEM; | ||
| 1492 | goto out; | ||
| 1493 | } | ||
| 1490 | resize->order = shift; | 1494 | resize->order = shift; |
| 1491 | resize->kvm = kvm; | 1495 | resize->kvm = kvm; |
| 1492 | INIT_WORK(&resize->work, resize_hpt_prepare_work); | 1496 | INIT_WORK(&resize->work, resize_hpt_prepare_work); |
diff --git a/arch/powerpc/mm/hash_native_64.c b/arch/powerpc/mm/hash_native_64.c index cc332608e656..65bb8f33b399 100644 --- a/arch/powerpc/mm/hash_native_64.c +++ b/arch/powerpc/mm/hash_native_64.c | |||
| @@ -638,6 +638,10 @@ static void native_flush_hash_range(unsigned long number, int local) | |||
| 638 | unsigned long psize = batch->psize; | 638 | unsigned long psize = batch->psize; |
| 639 | int ssize = batch->ssize; | 639 | int ssize = batch->ssize; |
| 640 | int i; | 640 | int i; |
| 641 | unsigned int use_local; | ||
| 642 | |||
| 643 | use_local = local && mmu_has_feature(MMU_FTR_TLBIEL) && | ||
| 644 | mmu_psize_defs[psize].tlbiel && !cxl_ctx_in_use(); | ||
| 641 | 645 | ||
| 642 | local_irq_save(flags); | 646 | local_irq_save(flags); |
| 643 | 647 | ||
| @@ -667,8 +671,7 @@ static void native_flush_hash_range(unsigned long number, int local) | |||
| 667 | } pte_iterate_hashed_end(); | 671 | } pte_iterate_hashed_end(); |
| 668 | } | 672 | } |
| 669 | 673 | ||
| 670 | if (mmu_has_feature(MMU_FTR_TLBIEL) && | 674 | if (use_local) { |
| 671 | mmu_psize_defs[psize].tlbiel && local) { | ||
| 672 | asm volatile("ptesync":::"memory"); | 675 | asm volatile("ptesync":::"memory"); |
| 673 | for (i = 0; i < number; i++) { | 676 | for (i = 0; i < number; i++) { |
| 674 | vpn = batch->vpn[i]; | 677 | vpn = batch->vpn[i]; |
diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c index 9be992083d2a..c22f207aa656 100644 --- a/arch/powerpc/mm/init_64.c +++ b/arch/powerpc/mm/init_64.c | |||
| @@ -397,8 +397,7 @@ static void early_check_vec5(void) | |||
| 397 | void __init mmu_early_init_devtree(void) | 397 | void __init mmu_early_init_devtree(void) |
| 398 | { | 398 | { |
| 399 | /* Disable radix mode based on kernel command line. */ | 399 | /* Disable radix mode based on kernel command line. */ |
| 400 | /* We don't yet have the machinery to do radix as a guest. */ | 400 | if (disable_radix) |
| 401 | if (disable_radix || !(mfmsr() & MSR_HV)) | ||
| 402 | cur_cpu_spec->mmu_features &= ~MMU_FTR_TYPE_RADIX; | 401 | cur_cpu_spec->mmu_features &= ~MMU_FTR_TYPE_RADIX; |
| 403 | 402 | ||
| 404 | /* | 403 | /* |
