diff options
| author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-04-28 00:36:39 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-04-28 00:36:39 -0400 |
| commit | d35cc56ddfc948d8df1aa6d41ac345fcec01854d (patch) | |
| tree | 7e23a0e3dde639236e019aa88309d919941958e5 /arch/arm/kernel | |
| parent | 86d56134f1b67d0c18025ba5cade95c048ed528d (diff) | |
| parent | d1db0eea852497762cab43b905b879dfcd3b8987 (diff) | |
Merge 3.15-rc3 into staging-next
Diffstat (limited to 'arch/arm/kernel')
| -rw-r--r-- | arch/arm/kernel/Makefile | 1 | ||||
| -rw-r--r-- | arch/arm/kernel/calls.S | 1 | ||||
| -rw-r--r-- | arch/arm/kernel/head.S | 2 | ||||
| -rw-r--r-- | arch/arm/kernel/iwmmxt.S | 8 | ||||
| -rw-r--r-- | arch/arm/kernel/machine_kexec.c | 7 | ||||
| -rw-r--r-- | arch/arm/kernel/pj4-cp0.c | 42 | ||||
| -rw-r--r-- | arch/arm/kernel/sys_oabi-compat.c | 6 |
7 files changed, 58 insertions, 9 deletions
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile index a766bcbaf8ad..040619c32d68 100644 --- a/arch/arm/kernel/Makefile +++ b/arch/arm/kernel/Makefile | |||
| @@ -79,6 +79,7 @@ obj-$(CONFIG_CPU_XSCALE) += xscale-cp0.o | |||
| 79 | obj-$(CONFIG_CPU_XSC3) += xscale-cp0.o | 79 | obj-$(CONFIG_CPU_XSC3) += xscale-cp0.o |
| 80 | obj-$(CONFIG_CPU_MOHAWK) += xscale-cp0.o | 80 | obj-$(CONFIG_CPU_MOHAWK) += xscale-cp0.o |
| 81 | obj-$(CONFIG_CPU_PJ4) += pj4-cp0.o | 81 | obj-$(CONFIG_CPU_PJ4) += pj4-cp0.o |
| 82 | obj-$(CONFIG_CPU_PJ4B) += pj4-cp0.o | ||
| 82 | obj-$(CONFIG_IWMMXT) += iwmmxt.o | 83 | obj-$(CONFIG_IWMMXT) += iwmmxt.o |
| 83 | obj-$(CONFIG_PERF_EVENTS) += perf_regs.o | 84 | obj-$(CONFIG_PERF_EVENTS) += perf_regs.o |
| 84 | obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o perf_event_cpu.o | 85 | obj-$(CONFIG_HW_PERF_EVENTS) += perf_event.o perf_event_cpu.o |
diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S index 166e945de832..8f51bdcdacbb 100644 --- a/arch/arm/kernel/calls.S +++ b/arch/arm/kernel/calls.S | |||
| @@ -391,6 +391,7 @@ | |||
| 391 | CALL(sys_finit_module) | 391 | CALL(sys_finit_module) |
| 392 | /* 380 */ CALL(sys_sched_setattr) | 392 | /* 380 */ CALL(sys_sched_setattr) |
| 393 | CALL(sys_sched_getattr) | 393 | CALL(sys_sched_getattr) |
| 394 | CALL(sys_renameat2) | ||
| 394 | #ifndef syscalls_counted | 395 | #ifndef syscalls_counted |
| 395 | .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls | 396 | .equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls |
| 396 | #define syscalls_counted | 397 | #define syscalls_counted |
diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S index f8c08839edf3..591d6e4a6492 100644 --- a/arch/arm/kernel/head.S +++ b/arch/arm/kernel/head.S | |||
| @@ -587,7 +587,7 @@ __fixup_pv_table: | |||
| 587 | add r6, r6, r3 @ adjust __pv_phys_pfn_offset address | 587 | add r6, r6, r3 @ adjust __pv_phys_pfn_offset address |
| 588 | add r7, r7, r3 @ adjust __pv_offset address | 588 | add r7, r7, r3 @ adjust __pv_offset address |
| 589 | mov r0, r8, lsr #12 @ convert to PFN | 589 | mov r0, r8, lsr #12 @ convert to PFN |
| 590 | str r0, [r6, #LOW_OFFSET] @ save computed PHYS_OFFSET to __pv_phys_pfn_offset | 590 | str r0, [r6] @ save computed PHYS_OFFSET to __pv_phys_pfn_offset |
| 591 | strcc ip, [r7, #HIGH_OFFSET] @ save to __pv_offset high bits | 591 | strcc ip, [r7, #HIGH_OFFSET] @ save to __pv_offset high bits |
| 592 | mov r6, r3, lsr #24 @ constant for add/sub instructions | 592 | mov r6, r3, lsr #24 @ constant for add/sub instructions |
| 593 | teq r3, r6, lsl #24 @ must be 16MiB aligned | 593 | teq r3, r6, lsl #24 @ must be 16MiB aligned |
diff --git a/arch/arm/kernel/iwmmxt.S b/arch/arm/kernel/iwmmxt.S index a08783823b32..2452dd1bef53 100644 --- a/arch/arm/kernel/iwmmxt.S +++ b/arch/arm/kernel/iwmmxt.S | |||
| @@ -19,12 +19,16 @@ | |||
| 19 | #include <asm/thread_info.h> | 19 | #include <asm/thread_info.h> |
| 20 | #include <asm/asm-offsets.h> | 20 | #include <asm/asm-offsets.h> |
| 21 | 21 | ||
| 22 | #if defined(CONFIG_CPU_PJ4) | 22 | #if defined(CONFIG_CPU_PJ4) || defined(CONFIG_CPU_PJ4B) |
| 23 | #define PJ4(code...) code | 23 | #define PJ4(code...) code |
| 24 | #define XSC(code...) | 24 | #define XSC(code...) |
| 25 | #else | 25 | #elif defined(CONFIG_CPU_MOHAWK) || \ |
| 26 | defined(CONFIG_CPU_XSC3) || \ | ||
| 27 | defined(CONFIG_CPU_XSCALE) | ||
| 26 | #define PJ4(code...) | 28 | #define PJ4(code...) |
| 27 | #define XSC(code...) code | 29 | #define XSC(code...) code |
| 30 | #else | ||
| 31 | #error "Unsupported iWMMXt architecture" | ||
| 28 | #endif | 32 | #endif |
| 29 | 33 | ||
| 30 | #define MMX_WR0 (0x00) | 34 | #define MMX_WR0 (0x00) |
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c index f0d180d8b29f..8cf0996aa1a8 100644 --- a/arch/arm/kernel/machine_kexec.c +++ b/arch/arm/kernel/machine_kexec.c | |||
| @@ -184,3 +184,10 @@ void machine_kexec(struct kimage *image) | |||
| 184 | 184 | ||
| 185 | soft_restart(reboot_entry_phys); | 185 | soft_restart(reboot_entry_phys); |
| 186 | } | 186 | } |
| 187 | |||
| 188 | void arch_crash_save_vmcoreinfo(void) | ||
| 189 | { | ||
| 190 | #ifdef CONFIG_ARM_LPAE | ||
| 191 | VMCOREINFO_CONFIG(ARM_LPAE); | ||
| 192 | #endif | ||
| 193 | } | ||
diff --git a/arch/arm/kernel/pj4-cp0.c b/arch/arm/kernel/pj4-cp0.c index fc7208636284..8153e36b2491 100644 --- a/arch/arm/kernel/pj4-cp0.c +++ b/arch/arm/kernel/pj4-cp0.c | |||
| @@ -45,7 +45,7 @@ static int iwmmxt_do(struct notifier_block *self, unsigned long cmd, void *t) | |||
| 45 | return NOTIFY_DONE; | 45 | return NOTIFY_DONE; |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | static struct notifier_block iwmmxt_notifier_block = { | 48 | static struct notifier_block __maybe_unused iwmmxt_notifier_block = { |
| 49 | .notifier_call = iwmmxt_do, | 49 | .notifier_call = iwmmxt_do, |
| 50 | }; | 50 | }; |
| 51 | 51 | ||
| @@ -72,6 +72,33 @@ static void __init pj4_cp_access_write(u32 value) | |||
| 72 | : "=r" (temp) : "r" (value)); | 72 | : "=r" (temp) : "r" (value)); |
| 73 | } | 73 | } |
| 74 | 74 | ||
| 75 | static int __init pj4_get_iwmmxt_version(void) | ||
| 76 | { | ||
| 77 | u32 cp_access, wcid; | ||
| 78 | |||
| 79 | cp_access = pj4_cp_access_read(); | ||
| 80 | pj4_cp_access_write(cp_access | 0xf); | ||
| 81 | |||
| 82 | /* check if coprocessor 0 and 1 are available */ | ||
| 83 | if ((pj4_cp_access_read() & 0xf) != 0xf) { | ||
| 84 | pj4_cp_access_write(cp_access); | ||
| 85 | return -ENODEV; | ||
| 86 | } | ||
| 87 | |||
| 88 | /* read iWMMXt coprocessor id register p1, c0 */ | ||
| 89 | __asm__ __volatile__ ("mrc p1, 0, %0, c0, c0, 0\n" : "=r" (wcid)); | ||
| 90 | |||
| 91 | pj4_cp_access_write(cp_access); | ||
| 92 | |||
| 93 | /* iWMMXt v1 */ | ||
| 94 | if ((wcid & 0xffffff00) == 0x56051000) | ||
| 95 | return 1; | ||
| 96 | /* iWMMXt v2 */ | ||
| 97 | if ((wcid & 0xffffff00) == 0x56052000) | ||
| 98 | return 2; | ||
| 99 | |||
| 100 | return -EINVAL; | ||
| 101 | } | ||
| 75 | 102 | ||
| 76 | /* | 103 | /* |
| 77 | * Disable CP0/CP1 on boot, and let call_fpe() and the iWMMXt lazy | 104 | * Disable CP0/CP1 on boot, and let call_fpe() and the iWMMXt lazy |
| @@ -79,17 +106,26 @@ static void __init pj4_cp_access_write(u32 value) | |||
| 79 | */ | 106 | */ |
| 80 | static int __init pj4_cp0_init(void) | 107 | static int __init pj4_cp0_init(void) |
| 81 | { | 108 | { |
| 82 | u32 cp_access; | 109 | u32 __maybe_unused cp_access; |
| 110 | int vers; | ||
| 83 | 111 | ||
| 84 | if (!cpu_is_pj4()) | 112 | if (!cpu_is_pj4()) |
| 85 | return 0; | 113 | return 0; |
| 86 | 114 | ||
| 115 | vers = pj4_get_iwmmxt_version(); | ||
| 116 | if (vers < 0) | ||
| 117 | return 0; | ||
| 118 | |||
| 119 | #ifndef CONFIG_IWMMXT | ||
| 120 | pr_info("PJ4 iWMMXt coprocessor detected, but kernel support is missing.\n"); | ||
| 121 | #else | ||
| 87 | cp_access = pj4_cp_access_read() & ~0xf; | 122 | cp_access = pj4_cp_access_read() & ~0xf; |
| 88 | pj4_cp_access_write(cp_access); | 123 | pj4_cp_access_write(cp_access); |
| 89 | 124 | ||
| 90 | printk(KERN_INFO "PJ4 iWMMXt coprocessor enabled.\n"); | 125 | pr_info("PJ4 iWMMXt v%d coprocessor enabled.\n", vers); |
| 91 | elf_hwcap |= HWCAP_IWMMXT; | 126 | elf_hwcap |= HWCAP_IWMMXT; |
| 92 | thread_register_notifier(&iwmmxt_notifier_block); | 127 | thread_register_notifier(&iwmmxt_notifier_block); |
| 128 | #endif | ||
| 93 | 129 | ||
| 94 | return 0; | 130 | return 0; |
| 95 | } | 131 | } |
diff --git a/arch/arm/kernel/sys_oabi-compat.c b/arch/arm/kernel/sys_oabi-compat.c index 702bd329d9d0..e90a3148f385 100644 --- a/arch/arm/kernel/sys_oabi-compat.c +++ b/arch/arm/kernel/sys_oabi-compat.c | |||
| @@ -203,9 +203,9 @@ asmlinkage long sys_oabi_fcntl64(unsigned int fd, unsigned int cmd, | |||
| 203 | int ret; | 203 | int ret; |
| 204 | 204 | ||
| 205 | switch (cmd) { | 205 | switch (cmd) { |
| 206 | case F_GETLKP: | 206 | case F_OFD_GETLK: |
| 207 | case F_SETLKP: | 207 | case F_OFD_SETLK: |
| 208 | case F_SETLKPW: | 208 | case F_OFD_SETLKW: |
| 209 | case F_GETLK64: | 209 | case F_GETLK64: |
| 210 | case F_SETLK64: | 210 | case F_SETLK64: |
| 211 | case F_SETLKW64: | 211 | case F_SETLKW64: |
