diff options
Diffstat (limited to 'arch')
84 files changed, 578 insertions, 285 deletions
diff --git a/arch/arc/include/asm/processor.h b/arch/arc/include/asm/processor.h index 4e547296831d..52312cb5dbe2 100644 --- a/arch/arc/include/asm/processor.h +++ b/arch/arc/include/asm/processor.h | |||
| @@ -47,9 +47,6 @@ struct thread_struct { | |||
| 47 | /* Forward declaration, a strange C thing */ | 47 | /* Forward declaration, a strange C thing */ |
| 48 | struct task_struct; | 48 | struct task_struct; |
| 49 | 49 | ||
| 50 | /* Return saved PC of a blocked thread */ | ||
| 51 | unsigned long thread_saved_pc(struct task_struct *t); | ||
| 52 | |||
| 53 | #define task_pt_regs(p) \ | 50 | #define task_pt_regs(p) \ |
| 54 | ((struct pt_regs *)(THREAD_SIZE + (void *)task_stack_page(p)) - 1) | 51 | ((struct pt_regs *)(THREAD_SIZE + (void *)task_stack_page(p)) - 1) |
| 55 | 52 | ||
| @@ -72,18 +69,21 @@ unsigned long thread_saved_pc(struct task_struct *t); | |||
| 72 | #define release_segments(mm) do { } while (0) | 69 | #define release_segments(mm) do { } while (0) |
| 73 | 70 | ||
| 74 | #define KSTK_EIP(tsk) (task_pt_regs(tsk)->ret) | 71 | #define KSTK_EIP(tsk) (task_pt_regs(tsk)->ret) |
| 72 | #define KSTK_ESP(tsk) (task_pt_regs(tsk)->sp) | ||
| 75 | 73 | ||
| 76 | /* | 74 | /* |
| 77 | * Where abouts of Task's sp, fp, blink when it was last seen in kernel mode. | 75 | * Where abouts of Task's sp, fp, blink when it was last seen in kernel mode. |
| 78 | * Look in process.c for details of kernel stack layout | 76 | * Look in process.c for details of kernel stack layout |
| 79 | */ | 77 | */ |
| 80 | #define KSTK_ESP(tsk) (tsk->thread.ksp) | 78 | #define TSK_K_ESP(tsk) (tsk->thread.ksp) |
| 81 | 79 | ||
| 82 | #define KSTK_REG(tsk, off) (*((unsigned int *)(KSTK_ESP(tsk) + \ | 80 | #define TSK_K_REG(tsk, off) (*((unsigned int *)(TSK_K_ESP(tsk) + \ |
| 83 | sizeof(struct callee_regs) + off))) | 81 | sizeof(struct callee_regs) + off))) |
| 84 | 82 | ||
| 85 | #define KSTK_BLINK(tsk) KSTK_REG(tsk, 4) | 83 | #define TSK_K_BLINK(tsk) TSK_K_REG(tsk, 4) |
| 86 | #define KSTK_FP(tsk) KSTK_REG(tsk, 0) | 84 | #define TSK_K_FP(tsk) TSK_K_REG(tsk, 0) |
| 85 | |||
| 86 | #define thread_saved_pc(tsk) TSK_K_BLINK(tsk) | ||
| 87 | 87 | ||
| 88 | extern void start_thread(struct pt_regs * regs, unsigned long pc, | 88 | extern void start_thread(struct pt_regs * regs, unsigned long pc, |
| 89 | unsigned long usp); | 89 | unsigned long usp); |
diff --git a/arch/arc/include/asm/stacktrace.h b/arch/arc/include/asm/stacktrace.h new file mode 100644 index 000000000000..b29b6064ea14 --- /dev/null +++ b/arch/arc/include/asm/stacktrace.h | |||
| @@ -0,0 +1,37 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2014-15 Synopsys, Inc. (www.synopsys.com) | ||
| 3 | * Copyright (C) 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License version 2 as | ||
| 7 | * published by the Free Software Foundation. | ||
| 8 | */ | ||
| 9 | |||
| 10 | #ifndef __ASM_STACKTRACE_H | ||
| 11 | #define __ASM_STACKTRACE_H | ||
| 12 | |||
| 13 | #include <linux/sched.h> | ||
| 14 | |||
| 15 | /** | ||
| 16 | * arc_unwind_core - Unwind the kernel mode stack for an execution context | ||
| 17 | * @tsk: NULL for current task, specific task otherwise | ||
| 18 | * @regs: pt_regs used to seed the unwinder {SP, FP, BLINK, PC} | ||
| 19 | * If NULL, use pt_regs of @tsk (if !NULL) otherwise | ||
| 20 | * use the current values of {SP, FP, BLINK, PC} | ||
| 21 | * @consumer_fn: Callback invoked for each frame unwound | ||
| 22 | * Returns 0 to continue unwinding, -1 to stop | ||
| 23 | * @arg: Arg to callback | ||
| 24 | * | ||
| 25 | * Returns the address of first function in stack | ||
| 26 | * | ||
| 27 | * Semantics: | ||
| 28 | * - synchronous unwinding (e.g. dump_stack): @tsk NULL, @regs NULL | ||
| 29 | * - Asynchronous unwinding of sleeping task: @tsk !NULL, @regs NULL | ||
| 30 | * - Asynchronous unwinding of intr/excp etc: @tsk !NULL, @regs !NULL | ||
| 31 | */ | ||
| 32 | notrace noinline unsigned int arc_unwind_core( | ||
| 33 | struct task_struct *tsk, struct pt_regs *regs, | ||
| 34 | int (*consumer_fn) (unsigned int, void *), | ||
| 35 | void *arg); | ||
| 36 | |||
| 37 | #endif /* __ASM_STACKTRACE_H */ | ||
diff --git a/arch/arc/kernel/process.c b/arch/arc/kernel/process.c index fdd89715d2d3..98c00a2d4dd9 100644 --- a/arch/arc/kernel/process.c +++ b/arch/arc/kernel/process.c | |||
| @@ -192,29 +192,6 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu) | |||
| 192 | return 0; | 192 | return 0; |
| 193 | } | 193 | } |
| 194 | 194 | ||
| 195 | /* | ||
| 196 | * API: expected by schedular Code: If thread is sleeping where is that. | ||
| 197 | * What is this good for? it will be always the scheduler or ret_from_fork. | ||
| 198 | * So we hard code that anyways. | ||
| 199 | */ | ||
| 200 | unsigned long thread_saved_pc(struct task_struct *t) | ||
| 201 | { | ||
| 202 | struct pt_regs *regs = task_pt_regs(t); | ||
| 203 | unsigned long blink = 0; | ||
| 204 | |||
| 205 | /* | ||
| 206 | * If the thread being queried for in not itself calling this, then it | ||
| 207 | * implies it is not executing, which in turn implies it is sleeping, | ||
| 208 | * which in turn implies it got switched OUT by the schedular. | ||
| 209 | * In that case, it's kernel mode blink can reliably retrieved as per | ||
| 210 | * the picture above (right above pt_regs). | ||
| 211 | */ | ||
| 212 | if (t != current && t->state != TASK_RUNNING) | ||
| 213 | blink = *((unsigned int *)regs - 1); | ||
| 214 | |||
| 215 | return blink; | ||
| 216 | } | ||
| 217 | |||
| 218 | int elf_check_arch(const struct elf32_hdr *x) | 195 | int elf_check_arch(const struct elf32_hdr *x) |
| 219 | { | 196 | { |
| 220 | unsigned int eflags; | 197 | unsigned int eflags; |
diff --git a/arch/arc/kernel/stacktrace.c b/arch/arc/kernel/stacktrace.c index 9ce47cfe2303..92320d6f737c 100644 --- a/arch/arc/kernel/stacktrace.c +++ b/arch/arc/kernel/stacktrace.c | |||
| @@ -43,6 +43,10 @@ static void seed_unwind_frame_info(struct task_struct *tsk, | |||
| 43 | struct pt_regs *regs, | 43 | struct pt_regs *regs, |
| 44 | struct unwind_frame_info *frame_info) | 44 | struct unwind_frame_info *frame_info) |
| 45 | { | 45 | { |
| 46 | /* | ||
| 47 | * synchronous unwinding (e.g. dump_stack) | ||
| 48 | * - uses current values of SP and friends | ||
| 49 | */ | ||
| 46 | if (tsk == NULL && regs == NULL) { | 50 | if (tsk == NULL && regs == NULL) { |
| 47 | unsigned long fp, sp, blink, ret; | 51 | unsigned long fp, sp, blink, ret; |
| 48 | frame_info->task = current; | 52 | frame_info->task = current; |
| @@ -61,12 +65,17 @@ static void seed_unwind_frame_info(struct task_struct *tsk, | |||
| 61 | frame_info->regs.r63 = ret; | 65 | frame_info->regs.r63 = ret; |
| 62 | frame_info->call_frame = 0; | 66 | frame_info->call_frame = 0; |
| 63 | } else if (regs == NULL) { | 67 | } else if (regs == NULL) { |
| 68 | /* | ||
| 69 | * Asynchronous unwinding of sleeping task | ||
| 70 | * - Gets SP etc from task's pt_regs (saved bottom of kernel | ||
| 71 | * mode stack of task) | ||
| 72 | */ | ||
| 64 | 73 | ||
| 65 | frame_info->task = tsk; | 74 | frame_info->task = tsk; |
| 66 | 75 | ||
| 67 | frame_info->regs.r27 = KSTK_FP(tsk); | 76 | frame_info->regs.r27 = TSK_K_FP(tsk); |
| 68 | frame_info->regs.r28 = KSTK_ESP(tsk); | 77 | frame_info->regs.r28 = TSK_K_ESP(tsk); |
| 69 | frame_info->regs.r31 = KSTK_BLINK(tsk); | 78 | frame_info->regs.r31 = TSK_K_BLINK(tsk); |
| 70 | frame_info->regs.r63 = (unsigned int)__switch_to; | 79 | frame_info->regs.r63 = (unsigned int)__switch_to; |
| 71 | 80 | ||
| 72 | /* In the prologue of __switch_to, first FP is saved on stack | 81 | /* In the prologue of __switch_to, first FP is saved on stack |
| @@ -83,6 +92,10 @@ static void seed_unwind_frame_info(struct task_struct *tsk, | |||
| 83 | frame_info->call_frame = 0; | 92 | frame_info->call_frame = 0; |
| 84 | 93 | ||
| 85 | } else { | 94 | } else { |
| 95 | /* | ||
| 96 | * Asynchronous unwinding of intr/exception | ||
| 97 | * - Just uses the pt_regs passed | ||
| 98 | */ | ||
| 86 | frame_info->task = tsk; | 99 | frame_info->task = tsk; |
| 87 | 100 | ||
| 88 | frame_info->regs.r27 = regs->fp; | 101 | frame_info->regs.r27 = regs->fp; |
| @@ -95,7 +108,7 @@ static void seed_unwind_frame_info(struct task_struct *tsk, | |||
| 95 | 108 | ||
| 96 | #endif | 109 | #endif |
| 97 | 110 | ||
| 98 | static noinline unsigned int | 111 | notrace noinline unsigned int |
| 99 | arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs, | 112 | arc_unwind_core(struct task_struct *tsk, struct pt_regs *regs, |
| 100 | int (*consumer_fn) (unsigned int, void *), void *arg) | 113 | int (*consumer_fn) (unsigned int, void *), void *arg) |
| 101 | { | 114 | { |
diff --git a/arch/arc/kernel/unaligned.c b/arch/arc/kernel/unaligned.c index 7ff5b5c183bb..74db59b6f392 100644 --- a/arch/arc/kernel/unaligned.c +++ b/arch/arc/kernel/unaligned.c | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #include <linux/types.h> | 14 | #include <linux/types.h> |
| 15 | #include <linux/perf_event.h> | ||
| 15 | #include <linux/ptrace.h> | 16 | #include <linux/ptrace.h> |
| 16 | #include <linux/uaccess.h> | 17 | #include <linux/uaccess.h> |
| 17 | #include <asm/disasm.h> | 18 | #include <asm/disasm.h> |
| @@ -253,6 +254,7 @@ int misaligned_fixup(unsigned long address, struct pt_regs *regs, | |||
| 253 | } | 254 | } |
| 254 | } | 255 | } |
| 255 | 256 | ||
| 257 | perf_sw_event(PERF_COUNT_SW_ALIGNMENT_FAULTS, 1, regs, address); | ||
| 256 | return 0; | 258 | return 0; |
| 257 | 259 | ||
| 258 | fault: | 260 | fault: |
diff --git a/arch/arc/mm/fault.c b/arch/arc/mm/fault.c index 563cb27e37f5..6a2e006cbcce 100644 --- a/arch/arc/mm/fault.c +++ b/arch/arc/mm/fault.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/ptrace.h> | 14 | #include <linux/ptrace.h> |
| 15 | #include <linux/uaccess.h> | 15 | #include <linux/uaccess.h> |
| 16 | #include <linux/kdebug.h> | 16 | #include <linux/kdebug.h> |
| 17 | #include <linux/perf_event.h> | ||
| 17 | #include <asm/pgalloc.h> | 18 | #include <asm/pgalloc.h> |
| 18 | #include <asm/mmu.h> | 19 | #include <asm/mmu.h> |
| 19 | 20 | ||
| @@ -139,13 +140,20 @@ good_area: | |||
| 139 | return; | 140 | return; |
| 140 | } | 141 | } |
| 141 | 142 | ||
| 143 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); | ||
| 144 | |||
| 142 | if (likely(!(fault & VM_FAULT_ERROR))) { | 145 | if (likely(!(fault & VM_FAULT_ERROR))) { |
| 143 | if (flags & FAULT_FLAG_ALLOW_RETRY) { | 146 | if (flags & FAULT_FLAG_ALLOW_RETRY) { |
| 144 | /* To avoid updating stats twice for retry case */ | 147 | /* To avoid updating stats twice for retry case */ |
| 145 | if (fault & VM_FAULT_MAJOR) | 148 | if (fault & VM_FAULT_MAJOR) { |
| 146 | tsk->maj_flt++; | 149 | tsk->maj_flt++; |
| 147 | else | 150 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, |
| 151 | regs, address); | ||
| 152 | } else { | ||
| 148 | tsk->min_flt++; | 153 | tsk->min_flt++; |
| 154 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, | ||
| 155 | regs, address); | ||
| 156 | } | ||
| 149 | 157 | ||
| 150 | if (fault & VM_FAULT_RETRY) { | 158 | if (fault & VM_FAULT_RETRY) { |
| 151 | flags &= ~FAULT_FLAG_ALLOW_RETRY; | 159 | flags &= ~FAULT_FLAG_ALLOW_RETRY; |
diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi index 6cc25ed912ee..2c6248d9a9ef 100644 --- a/arch/arm/boot/dts/am335x-bone-common.dtsi +++ b/arch/arm/boot/dts/am335x-bone-common.dtsi | |||
| @@ -195,6 +195,7 @@ | |||
| 195 | 195 | ||
| 196 | &usb0 { | 196 | &usb0 { |
| 197 | status = "okay"; | 197 | status = "okay"; |
| 198 | dr_mode = "peripheral"; | ||
| 198 | }; | 199 | }; |
| 199 | 200 | ||
| 200 | &usb1 { | 201 | &usb1 { |
diff --git a/arch/arm/boot/dts/am437x-idk-evm.dts b/arch/arm/boot/dts/am437x-idk-evm.dts index f9a17e2ca8cb..0198f5a62b96 100644 --- a/arch/arm/boot/dts/am437x-idk-evm.dts +++ b/arch/arm/boot/dts/am437x-idk-evm.dts | |||
| @@ -133,20 +133,6 @@ | |||
| 133 | >; | 133 | >; |
| 134 | }; | 134 | }; |
| 135 | 135 | ||
| 136 | i2c1_pins_default: i2c1_pins_default { | ||
| 137 | pinctrl-single,pins = < | ||
| 138 | 0x15c (PIN_INPUT | SLEWCTRL_FAST | MUX_MODE2) /* spi0_cs0.i2c1_scl */ | ||
| 139 | 0x158 (PIN_INPUT | SLEWCTRL_FAST | MUX_MODE2) /* spi0_d1.i2c1_sda */ | ||
| 140 | >; | ||
| 141 | }; | ||
| 142 | |||
| 143 | i2c1_pins_sleep: i2c1_pins_sleep { | ||
| 144 | pinctrl-single,pins = < | ||
| 145 | 0x15c (PIN_INPUT_PULLDOWN | MUX_MODE7) /* spi0_cs0.i2c1_scl */ | ||
| 146 | 0x158 (PIN_INPUT_PULLDOWN | MUX_MODE7) /* spi0_d1.i2c1_sda */ | ||
| 147 | >; | ||
| 148 | }; | ||
| 149 | |||
| 150 | mmc1_pins_default: pinmux_mmc1_pins_default { | 136 | mmc1_pins_default: pinmux_mmc1_pins_default { |
| 151 | pinctrl-single,pins = < | 137 | pinctrl-single,pins = < |
| 152 | 0x100 (PIN_INPUT | MUX_MODE0) /* mmc0_clk.mmc0_clk */ | 138 | 0x100 (PIN_INPUT | MUX_MODE0) /* mmc0_clk.mmc0_clk */ |
| @@ -254,7 +240,7 @@ | |||
| 254 | status = "okay"; | 240 | status = "okay"; |
| 255 | pinctrl-names = "default", "sleep"; | 241 | pinctrl-names = "default", "sleep"; |
| 256 | pinctrl-0 = <&i2c0_pins_default>; | 242 | pinctrl-0 = <&i2c0_pins_default>; |
| 257 | pinctrl-1 = <&i2c0_pins_default>; | 243 | pinctrl-1 = <&i2c0_pins_sleep>; |
| 258 | clock-frequency = <400000>; | 244 | clock-frequency = <400000>; |
| 259 | 245 | ||
| 260 | at24@50 { | 246 | at24@50 { |
| @@ -262,17 +248,10 @@ | |||
| 262 | pagesize = <64>; | 248 | pagesize = <64>; |
| 263 | reg = <0x50>; | 249 | reg = <0x50>; |
| 264 | }; | 250 | }; |
| 265 | }; | ||
| 266 | |||
| 267 | &i2c1 { | ||
| 268 | status = "okay"; | ||
| 269 | pinctrl-names = "default", "sleep"; | ||
| 270 | pinctrl-0 = <&i2c1_pins_default>; | ||
| 271 | pinctrl-1 = <&i2c1_pins_default>; | ||
| 272 | clock-frequency = <400000>; | ||
| 273 | 251 | ||
| 274 | tps: tps62362@60 { | 252 | tps: tps62362@60 { |
| 275 | compatible = "ti,tps62362"; | 253 | compatible = "ti,tps62362"; |
| 254 | reg = <0x60>; | ||
| 276 | regulator-name = "VDD_MPU"; | 255 | regulator-name = "VDD_MPU"; |
| 277 | regulator-min-microvolt = <950000>; | 256 | regulator-min-microvolt = <950000>; |
| 278 | regulator-max-microvolt = <1330000>; | 257 | regulator-max-microvolt = <1330000>; |
diff --git a/arch/arm/boot/dts/am57xx-beagle-x15.dts b/arch/arm/boot/dts/am57xx-beagle-x15.dts index 03750af3b49a..6463f9ef2b54 100644 --- a/arch/arm/boot/dts/am57xx-beagle-x15.dts +++ b/arch/arm/boot/dts/am57xx-beagle-x15.dts | |||
| @@ -549,14 +549,6 @@ | |||
| 549 | pinctrl-0 = <&usb1_pins>; | 549 | pinctrl-0 = <&usb1_pins>; |
| 550 | }; | 550 | }; |
| 551 | 551 | ||
| 552 | &omap_dwc3_1 { | ||
| 553 | extcon = <&extcon_usb1>; | ||
| 554 | }; | ||
| 555 | |||
| 556 | &omap_dwc3_2 { | ||
| 557 | extcon = <&extcon_usb2>; | ||
| 558 | }; | ||
| 559 | |||
| 560 | &usb2 { | 552 | &usb2 { |
| 561 | dr_mode = "peripheral"; | 553 | dr_mode = "peripheral"; |
| 562 | }; | 554 | }; |
diff --git a/arch/arm/boot/dts/dm8168-evm.dts b/arch/arm/boot/dts/dm8168-evm.dts index 857d0289ad4d..d3a29c1b8417 100644 --- a/arch/arm/boot/dts/dm8168-evm.dts +++ b/arch/arm/boot/dts/dm8168-evm.dts | |||
| @@ -35,6 +35,18 @@ | |||
| 35 | DM816X_IOPAD(0x0aac, PIN_INPUT | MUX_MODE0) /* SPI_D1 */ | 35 | DM816X_IOPAD(0x0aac, PIN_INPUT | MUX_MODE0) /* SPI_D1 */ |
| 36 | >; | 36 | >; |
| 37 | }; | 37 | }; |
| 38 | |||
| 39 | usb0_pins: pinmux_usb0_pins { | ||
| 40 | pinctrl-single,pins = < | ||
| 41 | DM816X_IOPAD(0x0d00, MUX_MODE0) /* USB0_DRVVBUS */ | ||
| 42 | >; | ||
| 43 | }; | ||
| 44 | |||
| 45 | usb1_pins: pinmux_usb0_pins { | ||
| 46 | pinctrl-single,pins = < | ||
| 47 | DM816X_IOPAD(0x0d04, MUX_MODE0) /* USB1_DRVVBUS */ | ||
| 48 | >; | ||
| 49 | }; | ||
| 38 | }; | 50 | }; |
| 39 | 51 | ||
| 40 | &i2c1 { | 52 | &i2c1 { |
| @@ -127,3 +139,16 @@ | |||
| 127 | &mmc1 { | 139 | &mmc1 { |
| 128 | vmmc-supply = <&vmmcsd_fixed>; | 140 | vmmc-supply = <&vmmcsd_fixed>; |
| 129 | }; | 141 | }; |
| 142 | |||
| 143 | /* At least dm8168-evm rev c won't support multipoint, later may */ | ||
| 144 | &usb0 { | ||
| 145 | pinctrl-names = "default"; | ||
| 146 | pinctrl-0 = <&usb0_pins>; | ||
| 147 | mentor,multipoint = <0>; | ||
| 148 | }; | ||
| 149 | |||
| 150 | &usb1 { | ||
| 151 | pinctrl-names = "default"; | ||
| 152 | pinctrl-0 = <&usb1_pins>; | ||
| 153 | mentor,multipoint = <0>; | ||
| 154 | }; | ||
diff --git a/arch/arm/boot/dts/dm816x.dtsi b/arch/arm/boot/dts/dm816x.dtsi index d98d0f7de380..3c97b5f2addc 100644 --- a/arch/arm/boot/dts/dm816x.dtsi +++ b/arch/arm/boot/dts/dm816x.dtsi | |||
| @@ -97,10 +97,31 @@ | |||
| 97 | 97 | ||
| 98 | /* Device Configuration Registers */ | 98 | /* Device Configuration Registers */ |
| 99 | scm_conf: syscon@600 { | 99 | scm_conf: syscon@600 { |
| 100 | compatible = "syscon"; | 100 | compatible = "syscon", "simple-bus"; |
| 101 | reg = <0x600 0x110>; | 101 | reg = <0x600 0x110>; |
| 102 | #address-cells = <1>; | 102 | #address-cells = <1>; |
| 103 | #size-cells = <1>; | 103 | #size-cells = <1>; |
| 104 | ranges = <0 0x600 0x110>; | ||
| 105 | |||
| 106 | usb_phy0: usb-phy@20 { | ||
| 107 | compatible = "ti,dm8168-usb-phy"; | ||
| 108 | reg = <0x20 0x8>; | ||
| 109 | reg-names = "phy"; | ||
| 110 | clocks = <&main_fapll 6>; | ||
| 111 | clock-names = "refclk"; | ||
| 112 | #phy-cells = <0>; | ||
| 113 | syscon = <&scm_conf>; | ||
| 114 | }; | ||
| 115 | |||
| 116 | usb_phy1: usb-phy@28 { | ||
| 117 | compatible = "ti,dm8168-usb-phy"; | ||
| 118 | reg = <0x28 0x8>; | ||
| 119 | reg-names = "phy"; | ||
| 120 | clocks = <&main_fapll 6>; | ||
| 121 | clock-names = "refclk"; | ||
| 122 | #phy-cells = <0>; | ||
| 123 | syscon = <&scm_conf>; | ||
| 124 | }; | ||
| 104 | }; | 125 | }; |
| 105 | 126 | ||
| 106 | scrm_clocks: clocks { | 127 | scrm_clocks: clocks { |
| @@ -357,7 +378,10 @@ | |||
| 357 | reg-names = "mc", "control"; | 378 | reg-names = "mc", "control"; |
| 358 | interrupts = <18>; | 379 | interrupts = <18>; |
| 359 | interrupt-names = "mc"; | 380 | interrupt-names = "mc"; |
| 360 | dr_mode = "otg"; | 381 | dr_mode = "host"; |
| 382 | interface-type = <0>; | ||
| 383 | phys = <&usb_phy0>; | ||
| 384 | phy-names = "usb2-phy"; | ||
| 361 | mentor,multipoint = <1>; | 385 | mentor,multipoint = <1>; |
| 362 | mentor,num-eps = <16>; | 386 | mentor,num-eps = <16>; |
| 363 | mentor,ram-bits = <12>; | 387 | mentor,ram-bits = <12>; |
| @@ -366,13 +390,15 @@ | |||
| 366 | 390 | ||
| 367 | usb1: usb@47401800 { | 391 | usb1: usb@47401800 { |
| 368 | compatible = "ti,musb-am33xx"; | 392 | compatible = "ti,musb-am33xx"; |
| 369 | status = "disabled"; | ||
| 370 | reg = <0x47401c00 0x400 | 393 | reg = <0x47401c00 0x400 |
| 371 | 0x47401800 0x200>; | 394 | 0x47401800 0x200>; |
| 372 | reg-names = "mc", "control"; | 395 | reg-names = "mc", "control"; |
| 373 | interrupts = <19>; | 396 | interrupts = <19>; |
| 374 | interrupt-names = "mc"; | 397 | interrupt-names = "mc"; |
| 375 | dr_mode = "otg"; | 398 | dr_mode = "host"; |
| 399 | interface-type = <0>; | ||
| 400 | phys = <&usb_phy1>; | ||
| 401 | phy-names = "usb2-phy"; | ||
| 376 | mentor,multipoint = <1>; | 402 | mentor,multipoint = <1>; |
| 377 | mentor,num-eps = <16>; | 403 | mentor,num-eps = <16>; |
| 378 | mentor,ram-bits = <12>; | 404 | mentor,ram-bits = <12>; |
diff --git a/arch/arm/boot/dts/dra7-evm.dts b/arch/arm/boot/dts/dra7-evm.dts index 746cddb1b8f5..3290a96ba586 100644 --- a/arch/arm/boot/dts/dra7-evm.dts +++ b/arch/arm/boot/dts/dra7-evm.dts | |||
| @@ -543,14 +543,6 @@ | |||
| 543 | }; | 543 | }; |
| 544 | }; | 544 | }; |
| 545 | 545 | ||
| 546 | &omap_dwc3_1 { | ||
| 547 | extcon = <&extcon_usb1>; | ||
| 548 | }; | ||
| 549 | |||
| 550 | &omap_dwc3_2 { | ||
| 551 | extcon = <&extcon_usb2>; | ||
| 552 | }; | ||
| 553 | |||
| 554 | &usb1 { | 546 | &usb1 { |
| 555 | dr_mode = "peripheral"; | 547 | dr_mode = "peripheral"; |
| 556 | pinctrl-names = "default"; | 548 | pinctrl-names = "default"; |
diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi index 5827fedafd43..127608d79033 100644 --- a/arch/arm/boot/dts/dra7.dtsi +++ b/arch/arm/boot/dts/dra7.dtsi | |||
| @@ -249,8 +249,8 @@ | |||
| 249 | <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, | 249 | <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>, |
| 250 | <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>; | 250 | <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>; |
| 251 | #dma-cells = <1>; | 251 | #dma-cells = <1>; |
| 252 | #dma-channels = <32>; | 252 | dma-channels = <32>; |
| 253 | #dma-requests = <127>; | 253 | dma-requests = <127>; |
| 254 | }; | 254 | }; |
| 255 | 255 | ||
| 256 | gpio1: gpio@4ae10000 { | 256 | gpio1: gpio@4ae10000 { |
| @@ -1090,8 +1090,8 @@ | |||
| 1090 | <0x4A096800 0x40>; /* pll_ctrl */ | 1090 | <0x4A096800 0x40>; /* pll_ctrl */ |
| 1091 | reg-names = "phy_rx", "phy_tx", "pll_ctrl"; | 1091 | reg-names = "phy_rx", "phy_tx", "pll_ctrl"; |
| 1092 | ctrl-module = <&omap_control_sata>; | 1092 | ctrl-module = <&omap_control_sata>; |
| 1093 | clocks = <&sys_clkin1>; | 1093 | clocks = <&sys_clkin1>, <&sata_ref_clk>; |
| 1094 | clock-names = "sysclk"; | 1094 | clock-names = "sysclk", "refclk"; |
| 1095 | #phy-cells = <0>; | 1095 | #phy-cells = <0>; |
| 1096 | }; | 1096 | }; |
| 1097 | 1097 | ||
diff --git a/arch/arm/boot/dts/dra72-evm.dts b/arch/arm/boot/dts/dra72-evm.dts index 4d8711713610..e0264d0bf7b9 100644 --- a/arch/arm/boot/dts/dra72-evm.dts +++ b/arch/arm/boot/dts/dra72-evm.dts | |||
| @@ -380,14 +380,6 @@ | |||
| 380 | phy-supply = <&ldo4_reg>; | 380 | phy-supply = <&ldo4_reg>; |
| 381 | }; | 381 | }; |
| 382 | 382 | ||
| 383 | &omap_dwc3_1 { | ||
| 384 | extcon = <&extcon_usb1>; | ||
| 385 | }; | ||
| 386 | |||
| 387 | &omap_dwc3_2 { | ||
| 388 | extcon = <&extcon_usb2>; | ||
| 389 | }; | ||
| 390 | |||
| 391 | &usb1 { | 383 | &usb1 { |
| 392 | dr_mode = "peripheral"; | 384 | dr_mode = "peripheral"; |
| 393 | pinctrl-names = "default"; | 385 | pinctrl-names = "default"; |
diff --git a/arch/arm/boot/dts/omap2.dtsi b/arch/arm/boot/dts/omap2.dtsi index 59d1c297bb30..578fa2a54dce 100644 --- a/arch/arm/boot/dts/omap2.dtsi +++ b/arch/arm/boot/dts/omap2.dtsi | |||
| @@ -87,8 +87,8 @@ | |||
| 87 | <14>, | 87 | <14>, |
| 88 | <15>; | 88 | <15>; |
| 89 | #dma-cells = <1>; | 89 | #dma-cells = <1>; |
| 90 | #dma-channels = <32>; | 90 | dma-channels = <32>; |
| 91 | #dma-requests = <64>; | 91 | dma-requests = <64>; |
| 92 | }; | 92 | }; |
| 93 | 93 | ||
| 94 | i2c1: i2c@48070000 { | 94 | i2c1: i2c@48070000 { |
diff --git a/arch/arm/boot/dts/omap3-n900.dts b/arch/arm/boot/dts/omap3-n900.dts index 60403273f83e..db80f9d376fa 100644 --- a/arch/arm/boot/dts/omap3-n900.dts +++ b/arch/arm/boot/dts/omap3-n900.dts | |||
| @@ -16,6 +16,13 @@ | |||
| 16 | model = "Nokia N900"; | 16 | model = "Nokia N900"; |
| 17 | compatible = "nokia,omap3-n900", "ti,omap3430", "ti,omap3"; | 17 | compatible = "nokia,omap3-n900", "ti,omap3430", "ti,omap3"; |
| 18 | 18 | ||
| 19 | aliases { | ||
| 20 | i2c0; | ||
| 21 | i2c1 = &i2c1; | ||
| 22 | i2c2 = &i2c2; | ||
| 23 | i2c3 = &i2c3; | ||
| 24 | }; | ||
| 25 | |||
| 19 | cpus { | 26 | cpus { |
| 20 | cpu@0 { | 27 | cpu@0 { |
| 21 | cpu0-supply = <&vcc>; | 28 | cpu0-supply = <&vcc>; |
| @@ -704,7 +711,7 @@ | |||
| 704 | compatible = "smsc,lan91c94"; | 711 | compatible = "smsc,lan91c94"; |
| 705 | interrupt-parent = <&gpio2>; | 712 | interrupt-parent = <&gpio2>; |
| 706 | interrupts = <22 IRQ_TYPE_LEVEL_HIGH>; /* gpio54 */ | 713 | interrupts = <22 IRQ_TYPE_LEVEL_HIGH>; /* gpio54 */ |
| 707 | reg = <1 0x300 0xf>; /* 16 byte IO range at offset 0x300 */ | 714 | reg = <1 0 0xf>; /* 16 byte IO range */ |
| 708 | bank-width = <2>; | 715 | bank-width = <2>; |
| 709 | pinctrl-names = "default"; | 716 | pinctrl-names = "default"; |
| 710 | pinctrl-0 = <ðernet_pins>; | 717 | pinctrl-0 = <ðernet_pins>; |
diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi index 01b71111bd55..f4f78c40b564 100644 --- a/arch/arm/boot/dts/omap3.dtsi +++ b/arch/arm/boot/dts/omap3.dtsi | |||
| @@ -155,8 +155,8 @@ | |||
| 155 | <14>, | 155 | <14>, |
| 156 | <15>; | 156 | <15>; |
| 157 | #dma-cells = <1>; | 157 | #dma-cells = <1>; |
| 158 | #dma-channels = <32>; | 158 | dma-channels = <32>; |
| 159 | #dma-requests = <96>; | 159 | dma-requests = <96>; |
| 160 | }; | 160 | }; |
| 161 | 161 | ||
| 162 | omap3_pmx_core: pinmux@48002030 { | 162 | omap3_pmx_core: pinmux@48002030 { |
diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi index 074147cebae4..87401d9f4d8b 100644 --- a/arch/arm/boot/dts/omap4.dtsi +++ b/arch/arm/boot/dts/omap4.dtsi | |||
| @@ -223,8 +223,8 @@ | |||
| 223 | <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, | 223 | <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, |
| 224 | <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; | 224 | <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; |
| 225 | #dma-cells = <1>; | 225 | #dma-cells = <1>; |
| 226 | #dma-channels = <32>; | 226 | dma-channels = <32>; |
| 227 | #dma-requests = <127>; | 227 | dma-requests = <127>; |
| 228 | }; | 228 | }; |
| 229 | 229 | ||
| 230 | gpio1: gpio@4a310000 { | 230 | gpio1: gpio@4a310000 { |
diff --git a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi index b321fdf42c9f..ddff674bd05e 100644 --- a/arch/arm/boot/dts/omap5.dtsi +++ b/arch/arm/boot/dts/omap5.dtsi | |||
| @@ -238,8 +238,8 @@ | |||
| 238 | <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, | 238 | <GIC_SPI 14 IRQ_TYPE_LEVEL_HIGH>, |
| 239 | <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; | 239 | <GIC_SPI 15 IRQ_TYPE_LEVEL_HIGH>; |
| 240 | #dma-cells = <1>; | 240 | #dma-cells = <1>; |
| 241 | #dma-channels = <32>; | 241 | dma-channels = <32>; |
| 242 | #dma-requests = <127>; | 242 | dma-requests = <127>; |
| 243 | }; | 243 | }; |
| 244 | 244 | ||
| 245 | gpio1: gpio@4ae10000 { | 245 | gpio1: gpio@4ae10000 { |
| @@ -929,8 +929,8 @@ | |||
| 929 | <0x4A096800 0x40>; /* pll_ctrl */ | 929 | <0x4A096800 0x40>; /* pll_ctrl */ |
| 930 | reg-names = "phy_rx", "phy_tx", "pll_ctrl"; | 930 | reg-names = "phy_rx", "phy_tx", "pll_ctrl"; |
| 931 | ctrl-module = <&omap_control_sata>; | 931 | ctrl-module = <&omap_control_sata>; |
| 932 | clocks = <&sys_clkin>; | 932 | clocks = <&sys_clkin>, <&sata_ref_clk>; |
| 933 | clock-names = "sysclk"; | 933 | clock-names = "sysclk", "refclk"; |
| 934 | #phy-cells = <0>; | 934 | #phy-cells = <0>; |
| 935 | }; | 935 | }; |
| 936 | }; | 936 | }; |
diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig index e8a4c955241b..b7e6b6fba5e0 100644 --- a/arch/arm/configs/multi_v7_defconfig +++ b/arch/arm/configs/multi_v7_defconfig | |||
| @@ -62,6 +62,17 @@ CONFIG_MACH_SPEAR1340=y | |||
| 62 | CONFIG_ARCH_STI=y | 62 | CONFIG_ARCH_STI=y |
| 63 | CONFIG_ARCH_EXYNOS=y | 63 | CONFIG_ARCH_EXYNOS=y |
| 64 | CONFIG_EXYNOS5420_MCPM=y | 64 | CONFIG_EXYNOS5420_MCPM=y |
| 65 | CONFIG_ARCH_SHMOBILE_MULTI=y | ||
| 66 | CONFIG_ARCH_EMEV2=y | ||
| 67 | CONFIG_ARCH_R7S72100=y | ||
| 68 | CONFIG_ARCH_R8A73A4=y | ||
| 69 | CONFIG_ARCH_R8A7740=y | ||
| 70 | CONFIG_ARCH_R8A7779=y | ||
| 71 | CONFIG_ARCH_R8A7790=y | ||
| 72 | CONFIG_ARCH_R8A7791=y | ||
| 73 | CONFIG_ARCH_R8A7794=y | ||
| 74 | CONFIG_ARCH_SH73A0=y | ||
| 75 | CONFIG_MACH_MARZEN=y | ||
| 65 | CONFIG_ARCH_SUNXI=y | 76 | CONFIG_ARCH_SUNXI=y |
| 66 | CONFIG_ARCH_SIRF=y | 77 | CONFIG_ARCH_SIRF=y |
| 67 | CONFIG_ARCH_TEGRA=y | 78 | CONFIG_ARCH_TEGRA=y |
| @@ -84,6 +95,8 @@ CONFIG_PCI_KEYSTONE=y | |||
| 84 | CONFIG_PCI_MSI=y | 95 | CONFIG_PCI_MSI=y |
| 85 | CONFIG_PCI_MVEBU=y | 96 | CONFIG_PCI_MVEBU=y |
| 86 | CONFIG_PCI_TEGRA=y | 97 | CONFIG_PCI_TEGRA=y |
| 98 | CONFIG_PCI_RCAR_GEN2=y | ||
| 99 | CONFIG_PCI_RCAR_GEN2_PCIE=y | ||
| 87 | CONFIG_PCIEPORTBUS=y | 100 | CONFIG_PCIEPORTBUS=y |
| 88 | CONFIG_SMP=y | 101 | CONFIG_SMP=y |
| 89 | CONFIG_NR_CPUS=8 | 102 | CONFIG_NR_CPUS=8 |
| @@ -130,6 +143,7 @@ CONFIG_DEVTMPFS_MOUNT=y | |||
| 130 | CONFIG_DMA_CMA=y | 143 | CONFIG_DMA_CMA=y |
| 131 | CONFIG_CMA_SIZE_MBYTES=64 | 144 | CONFIG_CMA_SIZE_MBYTES=64 |
| 132 | CONFIG_OMAP_OCP2SCP=y | 145 | CONFIG_OMAP_OCP2SCP=y |
| 146 | CONFIG_SIMPLE_PM_BUS=y | ||
| 133 | CONFIG_MTD=y | 147 | CONFIG_MTD=y |
| 134 | CONFIG_MTD_CMDLINE_PARTS=y | 148 | CONFIG_MTD_CMDLINE_PARTS=y |
| 135 | CONFIG_MTD_BLOCK=y | 149 | CONFIG_MTD_BLOCK=y |
| @@ -157,6 +171,7 @@ CONFIG_AHCI_SUNXI=y | |||
| 157 | CONFIG_AHCI_TEGRA=y | 171 | CONFIG_AHCI_TEGRA=y |
| 158 | CONFIG_SATA_HIGHBANK=y | 172 | CONFIG_SATA_HIGHBANK=y |
| 159 | CONFIG_SATA_MV=y | 173 | CONFIG_SATA_MV=y |
| 174 | CONFIG_SATA_RCAR=y | ||
| 160 | CONFIG_NETDEVICES=y | 175 | CONFIG_NETDEVICES=y |
| 161 | CONFIG_HIX5HD2_GMAC=y | 176 | CONFIG_HIX5HD2_GMAC=y |
| 162 | CONFIG_SUN4I_EMAC=y | 177 | CONFIG_SUN4I_EMAC=y |
| @@ -167,14 +182,17 @@ CONFIG_MV643XX_ETH=y | |||
| 167 | CONFIG_MVNETA=y | 182 | CONFIG_MVNETA=y |
| 168 | CONFIG_KS8851=y | 183 | CONFIG_KS8851=y |
| 169 | CONFIG_R8169=y | 184 | CONFIG_R8169=y |
| 185 | CONFIG_SH_ETH=y | ||
| 170 | CONFIG_SMSC911X=y | 186 | CONFIG_SMSC911X=y |
| 171 | CONFIG_STMMAC_ETH=y | 187 | CONFIG_STMMAC_ETH=y |
| 172 | CONFIG_TI_CPSW=y | 188 | CONFIG_TI_CPSW=y |
| 173 | CONFIG_XILINX_EMACLITE=y | 189 | CONFIG_XILINX_EMACLITE=y |
| 174 | CONFIG_AT803X_PHY=y | 190 | CONFIG_AT803X_PHY=y |
| 175 | CONFIG_MARVELL_PHY=y | 191 | CONFIG_MARVELL_PHY=y |
| 192 | CONFIG_SMSC_PHY=y | ||
| 176 | CONFIG_BROADCOM_PHY=y | 193 | CONFIG_BROADCOM_PHY=y |
| 177 | CONFIG_ICPLUS_PHY=y | 194 | CONFIG_ICPLUS_PHY=y |
| 195 | CONFIG_MICREL_PHY=y | ||
| 178 | CONFIG_USB_PEGASUS=y | 196 | CONFIG_USB_PEGASUS=y |
| 179 | CONFIG_USB_USBNET=y | 197 | CONFIG_USB_USBNET=y |
| 180 | CONFIG_USB_NET_SMSC75XX=y | 198 | CONFIG_USB_NET_SMSC75XX=y |
| @@ -192,15 +210,18 @@ CONFIG_KEYBOARD_CROS_EC=y | |||
| 192 | CONFIG_MOUSE_PS2_ELANTECH=y | 210 | CONFIG_MOUSE_PS2_ELANTECH=y |
| 193 | CONFIG_INPUT_TOUCHSCREEN=y | 211 | CONFIG_INPUT_TOUCHSCREEN=y |
| 194 | CONFIG_TOUCHSCREEN_ATMEL_MXT=y | 212 | CONFIG_TOUCHSCREEN_ATMEL_MXT=y |
| 213 | CONFIG_TOUCHSCREEN_ST1232=m | ||
| 195 | CONFIG_TOUCHSCREEN_STMPE=y | 214 | CONFIG_TOUCHSCREEN_STMPE=y |
| 196 | CONFIG_TOUCHSCREEN_SUN4I=y | 215 | CONFIG_TOUCHSCREEN_SUN4I=y |
| 197 | CONFIG_INPUT_MISC=y | 216 | CONFIG_INPUT_MISC=y |
| 198 | CONFIG_INPUT_MPU3050=y | 217 | CONFIG_INPUT_MPU3050=y |
| 199 | CONFIG_INPUT_AXP20X_PEK=y | 218 | CONFIG_INPUT_AXP20X_PEK=y |
| 219 | CONFIG_INPUT_ADXL34X=m | ||
| 200 | CONFIG_SERIO_AMBAKMI=y | 220 | CONFIG_SERIO_AMBAKMI=y |
| 201 | CONFIG_SERIAL_8250=y | 221 | CONFIG_SERIAL_8250=y |
| 202 | CONFIG_SERIAL_8250_CONSOLE=y | 222 | CONFIG_SERIAL_8250_CONSOLE=y |
| 203 | CONFIG_SERIAL_8250_DW=y | 223 | CONFIG_SERIAL_8250_DW=y |
| 224 | CONFIG_SERIAL_8250_EM=y | ||
| 204 | CONFIG_SERIAL_8250_MT6577=y | 225 | CONFIG_SERIAL_8250_MT6577=y |
| 205 | CONFIG_SERIAL_AMBA_PL011=y | 226 | CONFIG_SERIAL_AMBA_PL011=y |
| 206 | CONFIG_SERIAL_AMBA_PL011_CONSOLE=y | 227 | CONFIG_SERIAL_AMBA_PL011_CONSOLE=y |
| @@ -213,6 +234,9 @@ CONFIG_SERIAL_SIRFSOC_CONSOLE=y | |||
| 213 | CONFIG_SERIAL_TEGRA=y | 234 | CONFIG_SERIAL_TEGRA=y |
| 214 | CONFIG_SERIAL_IMX=y | 235 | CONFIG_SERIAL_IMX=y |
| 215 | CONFIG_SERIAL_IMX_CONSOLE=y | 236 | CONFIG_SERIAL_IMX_CONSOLE=y |
| 237 | CONFIG_SERIAL_SH_SCI=y | ||
| 238 | CONFIG_SERIAL_SH_SCI_NR_UARTS=20 | ||
| 239 | CONFIG_SERIAL_SH_SCI_CONSOLE=y | ||
| 216 | CONFIG_SERIAL_MSM=y | 240 | CONFIG_SERIAL_MSM=y |
| 217 | CONFIG_SERIAL_MSM_CONSOLE=y | 241 | CONFIG_SERIAL_MSM_CONSOLE=y |
| 218 | CONFIG_SERIAL_VT8500=y | 242 | CONFIG_SERIAL_VT8500=y |
| @@ -233,19 +257,26 @@ CONFIG_I2C_MUX_PCA954x=y | |||
| 233 | CONFIG_I2C_MUX_PINCTRL=y | 257 | CONFIG_I2C_MUX_PINCTRL=y |
| 234 | CONFIG_I2C_CADENCE=y | 258 | CONFIG_I2C_CADENCE=y |
| 235 | CONFIG_I2C_DESIGNWARE_PLATFORM=y | 259 | CONFIG_I2C_DESIGNWARE_PLATFORM=y |
| 260 | CONFIG_I2C_GPIO=m | ||
| 236 | CONFIG_I2C_EXYNOS5=y | 261 | CONFIG_I2C_EXYNOS5=y |
| 237 | CONFIG_I2C_MV64XXX=y | 262 | CONFIG_I2C_MV64XXX=y |
| 263 | CONFIG_I2C_RIIC=y | ||
| 238 | CONFIG_I2C_S3C2410=y | 264 | CONFIG_I2C_S3C2410=y |
| 265 | CONFIG_I2C_SH_MOBILE=y | ||
| 239 | CONFIG_I2C_SIRF=y | 266 | CONFIG_I2C_SIRF=y |
| 240 | CONFIG_I2C_TEGRA=y | ||
| 241 | CONFIG_I2C_ST=y | 267 | CONFIG_I2C_ST=y |
| 242 | CONFIG_SPI=y | 268 | CONFIG_I2C_TEGRA=y |
| 243 | CONFIG_I2C_XILINX=y | 269 | CONFIG_I2C_XILINX=y |
| 244 | CONFIG_SPI_DAVINCI=y | 270 | CONFIG_I2C_RCAR=y |
| 271 | CONFIG_SPI=y | ||
| 245 | CONFIG_SPI_CADENCE=y | 272 | CONFIG_SPI_CADENCE=y |
| 273 | CONFIG_SPI_DAVINCI=y | ||
| 246 | CONFIG_SPI_OMAP24XX=y | 274 | CONFIG_SPI_OMAP24XX=y |
| 247 | CONFIG_SPI_ORION=y | 275 | CONFIG_SPI_ORION=y |
| 248 | CONFIG_SPI_PL022=y | 276 | CONFIG_SPI_PL022=y |
| 277 | CONFIG_SPI_RSPI=y | ||
| 278 | CONFIG_SPI_SH_MSIOF=m | ||
| 279 | CONFIG_SPI_SH_HSPI=y | ||
| 249 | CONFIG_SPI_SIRF=y | 280 | CONFIG_SPI_SIRF=y |
| 250 | CONFIG_SPI_SUN4I=y | 281 | CONFIG_SPI_SUN4I=y |
| 251 | CONFIG_SPI_SUN6I=y | 282 | CONFIG_SPI_SUN6I=y |
| @@ -259,12 +290,15 @@ CONFIG_PINCTRL_PALMAS=y | |||
| 259 | CONFIG_PINCTRL_APQ8084=y | 290 | CONFIG_PINCTRL_APQ8084=y |
| 260 | CONFIG_GPIO_SYSFS=y | 291 | CONFIG_GPIO_SYSFS=y |
| 261 | CONFIG_GPIO_GENERIC_PLATFORM=y | 292 | CONFIG_GPIO_GENERIC_PLATFORM=y |
| 262 | CONFIG_GPIO_DWAPB=y | ||
| 263 | CONFIG_GPIO_DAVINCI=y | 293 | CONFIG_GPIO_DAVINCI=y |
| 294 | CONFIG_GPIO_DWAPB=y | ||
| 295 | CONFIG_GPIO_EM=y | ||
| 296 | CONFIG_GPIO_RCAR=y | ||
| 264 | CONFIG_GPIO_XILINX=y | 297 | CONFIG_GPIO_XILINX=y |
| 265 | CONFIG_GPIO_ZYNQ=y | 298 | CONFIG_GPIO_ZYNQ=y |
| 266 | CONFIG_GPIO_PCA953X=y | 299 | CONFIG_GPIO_PCA953X=y |
| 267 | CONFIG_GPIO_PCA953X_IRQ=y | 300 | CONFIG_GPIO_PCA953X_IRQ=y |
| 301 | CONFIG_GPIO_PCF857X=y | ||
| 268 | CONFIG_GPIO_TWL4030=y | 302 | CONFIG_GPIO_TWL4030=y |
| 269 | CONFIG_GPIO_PALMAS=y | 303 | CONFIG_GPIO_PALMAS=y |
| 270 | CONFIG_GPIO_SYSCON=y | 304 | CONFIG_GPIO_SYSCON=y |
| @@ -276,10 +310,12 @@ CONFIG_POWER_RESET_AS3722=y | |||
| 276 | CONFIG_POWER_RESET_GPIO=y | 310 | CONFIG_POWER_RESET_GPIO=y |
| 277 | CONFIG_POWER_RESET_KEYSTONE=y | 311 | CONFIG_POWER_RESET_KEYSTONE=y |
| 278 | CONFIG_POWER_RESET_SUN6I=y | 312 | CONFIG_POWER_RESET_SUN6I=y |
| 313 | CONFIG_POWER_RESET_RMOBILE=y | ||
| 279 | CONFIG_SENSORS_LM90=y | 314 | CONFIG_SENSORS_LM90=y |
| 280 | CONFIG_SENSORS_LM95245=y | 315 | CONFIG_SENSORS_LM95245=y |
| 281 | CONFIG_THERMAL=y | 316 | CONFIG_THERMAL=y |
| 282 | CONFIG_CPU_THERMAL=y | 317 | CONFIG_CPU_THERMAL=y |
| 318 | CONFIG_RCAR_THERMAL=y | ||
| 283 | CONFIG_ARMADA_THERMAL=y | 319 | CONFIG_ARMADA_THERMAL=y |
| 284 | CONFIG_DAVINCI_WATCHDOG | 320 | CONFIG_DAVINCI_WATCHDOG |
| 285 | CONFIG_ST_THERMAL_SYSCFG=y | 321 | CONFIG_ST_THERMAL_SYSCFG=y |
| @@ -290,6 +326,7 @@ CONFIG_ARM_SP805_WATCHDOG=y | |||
| 290 | CONFIG_ORION_WATCHDOG=y | 326 | CONFIG_ORION_WATCHDOG=y |
| 291 | CONFIG_SUNXI_WATCHDOG=y | 327 | CONFIG_SUNXI_WATCHDOG=y |
| 292 | CONFIG_MESON_WATCHDOG=y | 328 | CONFIG_MESON_WATCHDOG=y |
| 329 | CONFIG_MFD_AS3711=y | ||
| 293 | CONFIG_MFD_AS3722=y | 330 | CONFIG_MFD_AS3722=y |
| 294 | CONFIG_MFD_BCM590XX=y | 331 | CONFIG_MFD_BCM590XX=y |
| 295 | CONFIG_MFD_AXP20X=y | 332 | CONFIG_MFD_AXP20X=y |
| @@ -304,13 +341,16 @@ CONFIG_MFD_TPS65090=y | |||
| 304 | CONFIG_MFD_TPS6586X=y | 341 | CONFIG_MFD_TPS6586X=y |
| 305 | CONFIG_MFD_TPS65910=y | 342 | CONFIG_MFD_TPS65910=y |
| 306 | CONFIG_REGULATOR_AB8500=y | 343 | CONFIG_REGULATOR_AB8500=y |
| 344 | CONFIG_REGULATOR_AS3711=y | ||
| 307 | CONFIG_REGULATOR_AS3722=y | 345 | CONFIG_REGULATOR_AS3722=y |
| 308 | CONFIG_REGULATOR_AXP20X=y | 346 | CONFIG_REGULATOR_AXP20X=y |
| 309 | CONFIG_REGULATOR_BCM590XX=y | 347 | CONFIG_REGULATOR_BCM590XX=y |
| 348 | CONFIG_REGULATOR_DA9210=y | ||
| 310 | CONFIG_REGULATOR_GPIO=y | 349 | CONFIG_REGULATOR_GPIO=y |
| 311 | CONFIG_MFD_SYSCON=y | 350 | CONFIG_MFD_SYSCON=y |
| 312 | CONFIG_POWER_RESET_SYSCON=y | 351 | CONFIG_POWER_RESET_SYSCON=y |
| 313 | CONFIG_REGULATOR_MAX8907=y | 352 | CONFIG_REGULATOR_MAX8907=y |
| 353 | CONFIG_REGULATOR_MAX8973=y | ||
| 314 | CONFIG_REGULATOR_MAX77686=y | 354 | CONFIG_REGULATOR_MAX77686=y |
| 315 | CONFIG_REGULATOR_PALMAS=y | 355 | CONFIG_REGULATOR_PALMAS=y |
| 316 | CONFIG_REGULATOR_S2MPS11=y | 356 | CONFIG_REGULATOR_S2MPS11=y |
| @@ -324,18 +364,32 @@ CONFIG_REGULATOR_TWL4030=y | |||
| 324 | CONFIG_REGULATOR_VEXPRESS=y | 364 | CONFIG_REGULATOR_VEXPRESS=y |
| 325 | CONFIG_MEDIA_SUPPORT=y | 365 | CONFIG_MEDIA_SUPPORT=y |
| 326 | CONFIG_MEDIA_CAMERA_SUPPORT=y | 366 | CONFIG_MEDIA_CAMERA_SUPPORT=y |
| 367 | CONFIG_MEDIA_CONTROLLER=y | ||
| 368 | CONFIG_VIDEO_V4L2_SUBDEV_API=y | ||
| 327 | CONFIG_MEDIA_USB_SUPPORT=y | 369 | CONFIG_MEDIA_USB_SUPPORT=y |
| 328 | CONFIG_USB_VIDEO_CLASS=y | 370 | CONFIG_USB_VIDEO_CLASS=y |
| 329 | CONFIG_USB_GSPCA=y | 371 | CONFIG_USB_GSPCA=y |
| 372 | CONFIG_V4L_PLATFORM_DRIVERS=y | ||
| 373 | CONFIG_SOC_CAMERA=m | ||
| 374 | CONFIG_SOC_CAMERA_PLATFORM=m | ||
| 375 | CONFIG_VIDEO_RCAR_VIN=m | ||
| 376 | CONFIG_V4L_MEM2MEM_DRIVERS=y | ||
| 377 | CONFIG_VIDEO_RENESAS_VSP1=m | ||
| 378 | # CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set | ||
| 379 | CONFIG_VIDEO_ADV7180=m | ||
| 330 | CONFIG_DRM=y | 380 | CONFIG_DRM=y |
| 381 | CONFIG_DRM_RCAR_DU=m | ||
| 331 | CONFIG_DRM_TEGRA=y | 382 | CONFIG_DRM_TEGRA=y |
| 332 | CONFIG_DRM_PANEL_SIMPLE=y | 383 | CONFIG_DRM_PANEL_SIMPLE=y |
| 333 | CONFIG_FB_ARMCLCD=y | 384 | CONFIG_FB_ARMCLCD=y |
| 334 | CONFIG_FB_WM8505=y | 385 | CONFIG_FB_WM8505=y |
| 386 | CONFIG_FB_SH_MOBILE_LCDC=y | ||
| 335 | CONFIG_FB_SIMPLE=y | 387 | CONFIG_FB_SIMPLE=y |
| 388 | CONFIG_FB_SH_MOBILE_MERAM=y | ||
| 336 | CONFIG_BACKLIGHT_LCD_SUPPORT=y | 389 | CONFIG_BACKLIGHT_LCD_SUPPORT=y |
| 337 | CONFIG_BACKLIGHT_CLASS_DEVICE=y | 390 | CONFIG_BACKLIGHT_CLASS_DEVICE=y |
| 338 | CONFIG_BACKLIGHT_PWM=y | 391 | CONFIG_BACKLIGHT_PWM=y |
| 392 | CONFIG_BACKLIGHT_AS3711=y | ||
| 339 | CONFIG_FRAMEBUFFER_CONSOLE=y | 393 | CONFIG_FRAMEBUFFER_CONSOLE=y |
| 340 | CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y | 394 | CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y |
| 341 | CONFIG_SOUND=y | 395 | CONFIG_SOUND=y |
| @@ -343,6 +397,8 @@ CONFIG_SND=y | |||
| 343 | CONFIG_SND_DYNAMIC_MINORS=y | 397 | CONFIG_SND_DYNAMIC_MINORS=y |
| 344 | CONFIG_SND_USB_AUDIO=y | 398 | CONFIG_SND_USB_AUDIO=y |
| 345 | CONFIG_SND_SOC=y | 399 | CONFIG_SND_SOC=y |
| 400 | CONFIG_SND_SOC_SH4_FSI=m | ||
| 401 | CONFIG_SND_SOC_RCAR=m | ||
| 346 | CONFIG_SND_SOC_TEGRA=y | 402 | CONFIG_SND_SOC_TEGRA=y |
| 347 | CONFIG_SND_SOC_TEGRA_RT5640=y | 403 | CONFIG_SND_SOC_TEGRA_RT5640=y |
| 348 | CONFIG_SND_SOC_TEGRA_WM8753=y | 404 | CONFIG_SND_SOC_TEGRA_WM8753=y |
| @@ -350,6 +406,8 @@ CONFIG_SND_SOC_TEGRA_WM8903=y | |||
| 350 | CONFIG_SND_SOC_TEGRA_TRIMSLICE=y | 406 | CONFIG_SND_SOC_TEGRA_TRIMSLICE=y |
| 351 | CONFIG_SND_SOC_TEGRA_ALC5632=y | 407 | CONFIG_SND_SOC_TEGRA_ALC5632=y |
| 352 | CONFIG_SND_SOC_TEGRA_MAX98090=y | 408 | CONFIG_SND_SOC_TEGRA_MAX98090=y |
| 409 | CONFIG_SND_SOC_AK4642=m | ||
| 410 | CONFIG_SND_SOC_WM8978=m | ||
| 353 | CONFIG_USB=y | 411 | CONFIG_USB=y |
| 354 | CONFIG_USB_XHCI_HCD=y | 412 | CONFIG_USB_XHCI_HCD=y |
| 355 | CONFIG_USB_XHCI_MVEBU=y | 413 | CONFIG_USB_XHCI_MVEBU=y |
| @@ -362,6 +420,8 @@ CONFIG_USB_ISP1760_HCD=y | |||
| 362 | CONFIG_USB_OHCI_HCD=y | 420 | CONFIG_USB_OHCI_HCD=y |
| 363 | CONFIG_USB_OHCI_HCD_STI=y | 421 | CONFIG_USB_OHCI_HCD_STI=y |
| 364 | CONFIG_USB_OHCI_HCD_PLATFORM=y | 422 | CONFIG_USB_OHCI_HCD_PLATFORM=y |
| 423 | CONFIG_USB_R8A66597_HCD=m | ||
| 424 | CONFIG_USB_RENESAS_USBHS=m | ||
| 365 | CONFIG_USB_STORAGE=y | 425 | CONFIG_USB_STORAGE=y |
| 366 | CONFIG_USB_DWC3=y | 426 | CONFIG_USB_DWC3=y |
| 367 | CONFIG_USB_CHIPIDEA=y | 427 | CONFIG_USB_CHIPIDEA=y |
| @@ -374,6 +434,10 @@ CONFIG_SAMSUNG_USB3PHY=y | |||
| 374 | CONFIG_USB_GPIO_VBUS=y | 434 | CONFIG_USB_GPIO_VBUS=y |
| 375 | CONFIG_USB_ISP1301=y | 435 | CONFIG_USB_ISP1301=y |
| 376 | CONFIG_USB_MXS_PHY=y | 436 | CONFIG_USB_MXS_PHY=y |
| 437 | CONFIG_USB_RCAR_PHY=m | ||
| 438 | CONFIG_USB_RCAR_GEN2_PHY=m | ||
| 439 | CONFIG_USB_GADGET=y | ||
| 440 | CONFIG_USB_RENESAS_USBHS_UDC=m | ||
| 377 | CONFIG_MMC=y | 441 | CONFIG_MMC=y |
| 378 | CONFIG_MMC_BLOCK_MINORS=16 | 442 | CONFIG_MMC_BLOCK_MINORS=16 |
| 379 | CONFIG_MMC_ARMMMCI=y | 443 | CONFIG_MMC_ARMMMCI=y |
| @@ -392,12 +456,14 @@ CONFIG_MMC_SDHCI_ST=y | |||
| 392 | CONFIG_MMC_OMAP=y | 456 | CONFIG_MMC_OMAP=y |
| 393 | CONFIG_MMC_OMAP_HS=y | 457 | CONFIG_MMC_OMAP_HS=y |
| 394 | CONFIG_MMC_MVSDIO=y | 458 | CONFIG_MMC_MVSDIO=y |
| 395 | CONFIG_MMC_SUNXI=y | 459 | CONFIG_MMC_SDHI=y |
| 396 | CONFIG_MMC_DW=y | 460 | CONFIG_MMC_DW=y |
| 397 | CONFIG_MMC_DW_IDMAC=y | 461 | CONFIG_MMC_DW_IDMAC=y |
| 398 | CONFIG_MMC_DW_PLTFM=y | 462 | CONFIG_MMC_DW_PLTFM=y |
| 399 | CONFIG_MMC_DW_EXYNOS=y | 463 | CONFIG_MMC_DW_EXYNOS=y |
| 400 | CONFIG_MMC_DW_ROCKCHIP=y | 464 | CONFIG_MMC_DW_ROCKCHIP=y |
| 465 | CONFIG_MMC_SH_MMCIF=y | ||
| 466 | CONFIG_MMC_SUNXI=y | ||
| 401 | CONFIG_NEW_LEDS=y | 467 | CONFIG_NEW_LEDS=y |
| 402 | CONFIG_LEDS_CLASS=y | 468 | CONFIG_LEDS_CLASS=y |
| 403 | CONFIG_LEDS_GPIO=y | 469 | CONFIG_LEDS_GPIO=y |
| @@ -421,10 +487,12 @@ CONFIG_RTC_DRV_AS3722=y | |||
| 421 | CONFIG_RTC_DRV_DS1307=y | 487 | CONFIG_RTC_DRV_DS1307=y |
| 422 | CONFIG_RTC_DRV_MAX8907=y | 488 | CONFIG_RTC_DRV_MAX8907=y |
| 423 | CONFIG_RTC_DRV_MAX77686=y | 489 | CONFIG_RTC_DRV_MAX77686=y |
| 490 | CONFIG_RTC_DRV_RS5C372=m | ||
| 424 | CONFIG_RTC_DRV_PALMAS=y | 491 | CONFIG_RTC_DRV_PALMAS=y |
| 425 | CONFIG_RTC_DRV_TWL4030=y | 492 | CONFIG_RTC_DRV_TWL4030=y |
| 426 | CONFIG_RTC_DRV_TPS6586X=y | 493 | CONFIG_RTC_DRV_TPS6586X=y |
| 427 | CONFIG_RTC_DRV_TPS65910=y | 494 | CONFIG_RTC_DRV_TPS65910=y |
| 495 | CONFIG_RTC_DRV_S35390A=m | ||
| 428 | CONFIG_RTC_DRV_EM3027=y | 496 | CONFIG_RTC_DRV_EM3027=y |
| 429 | CONFIG_RTC_DRV_PL031=y | 497 | CONFIG_RTC_DRV_PL031=y |
| 430 | CONFIG_RTC_DRV_VT8500=y | 498 | CONFIG_RTC_DRV_VT8500=y |
| @@ -436,6 +504,9 @@ CONFIG_DMADEVICES=y | |||
| 436 | CONFIG_DW_DMAC=y | 504 | CONFIG_DW_DMAC=y |
| 437 | CONFIG_MV_XOR=y | 505 | CONFIG_MV_XOR=y |
| 438 | CONFIG_TEGRA20_APB_DMA=y | 506 | CONFIG_TEGRA20_APB_DMA=y |
| 507 | CONFIG_SH_DMAE=y | ||
| 508 | CONFIG_RCAR_AUDMAC_PP=m | ||
| 509 | CONFIG_RCAR_DMAC=y | ||
| 439 | CONFIG_STE_DMA40=y | 510 | CONFIG_STE_DMA40=y |
| 440 | CONFIG_SIRF_DMA=y | 511 | CONFIG_SIRF_DMA=y |
| 441 | CONFIG_TI_EDMA=y | 512 | CONFIG_TI_EDMA=y |
| @@ -468,6 +539,7 @@ CONFIG_IIO=y | |||
| 468 | CONFIG_XILINX_XADC=y | 539 | CONFIG_XILINX_XADC=y |
| 469 | CONFIG_AK8975=y | 540 | CONFIG_AK8975=y |
| 470 | CONFIG_PWM=y | 541 | CONFIG_PWM=y |
| 542 | CONFIG_PWM_RENESAS_TPU=y | ||
| 471 | CONFIG_PWM_TEGRA=y | 543 | CONFIG_PWM_TEGRA=y |
| 472 | CONFIG_PWM_VT8500=y | 544 | CONFIG_PWM_VT8500=y |
| 473 | CONFIG_PHY_HIX5HD2_SATA=y | 545 | CONFIG_PHY_HIX5HD2_SATA=y |
diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index b7386524c356..a097cffa1231 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig | |||
| @@ -114,6 +114,7 @@ CONFIG_MTD_PHYSMAP_OF=y | |||
| 114 | CONFIG_MTD_NAND=y | 114 | CONFIG_MTD_NAND=y |
| 115 | CONFIG_MTD_NAND_ECC_BCH=y | 115 | CONFIG_MTD_NAND_ECC_BCH=y |
| 116 | CONFIG_MTD_NAND_OMAP2=y | 116 | CONFIG_MTD_NAND_OMAP2=y |
| 117 | CONFIG_MTD_NAND_OMAP_BCH=y | ||
| 117 | CONFIG_MTD_ONENAND=y | 118 | CONFIG_MTD_ONENAND=y |
| 118 | CONFIG_MTD_ONENAND_VERIFY_WRITE=y | 119 | CONFIG_MTD_ONENAND_VERIFY_WRITE=y |
| 119 | CONFIG_MTD_ONENAND_OMAP2=y | 120 | CONFIG_MTD_ONENAND_OMAP2=y |
| @@ -248,6 +249,7 @@ CONFIG_TWL6040_CORE=y | |||
| 248 | CONFIG_REGULATOR_PALMAS=y | 249 | CONFIG_REGULATOR_PALMAS=y |
| 249 | CONFIG_REGULATOR_PBIAS=y | 250 | CONFIG_REGULATOR_PBIAS=y |
| 250 | CONFIG_REGULATOR_TI_ABB=y | 251 | CONFIG_REGULATOR_TI_ABB=y |
| 252 | CONFIG_REGULATOR_TPS62360=m | ||
| 251 | CONFIG_REGULATOR_TPS65023=y | 253 | CONFIG_REGULATOR_TPS65023=y |
| 252 | CONFIG_REGULATOR_TPS6507X=y | 254 | CONFIG_REGULATOR_TPS6507X=y |
| 253 | CONFIG_REGULATOR_TPS65217=y | 255 | CONFIG_REGULATOR_TPS65217=y |
| @@ -374,7 +376,7 @@ CONFIG_PWM_TIEHRPWM=m | |||
| 374 | CONFIG_PWM_TWL=m | 376 | CONFIG_PWM_TWL=m |
| 375 | CONFIG_PWM_TWL_LED=m | 377 | CONFIG_PWM_TWL_LED=m |
| 376 | CONFIG_OMAP_USB2=m | 378 | CONFIG_OMAP_USB2=m |
| 377 | CONFIG_TI_PIPE3=m | 379 | CONFIG_TI_PIPE3=y |
| 378 | CONFIG_EXT2_FS=y | 380 | CONFIG_EXT2_FS=y |
| 379 | CONFIG_EXT3_FS=y | 381 | CONFIG_EXT3_FS=y |
| 380 | # CONFIG_EXT3_FS_XATTR is not set | 382 | # CONFIG_EXT3_FS_XATTR is not set |
diff --git a/arch/arm/include/asm/kvm_mmu.h b/arch/arm/include/asm/kvm_mmu.h index 37ca2a4c6f09..bf0fe99e8ca9 100644 --- a/arch/arm/include/asm/kvm_mmu.h +++ b/arch/arm/include/asm/kvm_mmu.h | |||
| @@ -207,7 +207,7 @@ static inline void __coherent_cache_guest_page(struct kvm_vcpu *vcpu, pfn_t pfn, | |||
| 207 | 207 | ||
| 208 | bool need_flush = !vcpu_has_cache_enabled(vcpu) || ipa_uncached; | 208 | bool need_flush = !vcpu_has_cache_enabled(vcpu) || ipa_uncached; |
| 209 | 209 | ||
| 210 | VM_BUG_ON(size & PAGE_MASK); | 210 | VM_BUG_ON(size & ~PAGE_MASK); |
| 211 | 211 | ||
| 212 | if (!need_flush && !icache_is_pipt()) | 212 | if (!need_flush && !icache_is_pipt()) |
| 213 | goto vipt_cache; | 213 | goto vipt_cache; |
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c index 07e7eb1d7ab6..5560f74f9eee 100644 --- a/arch/arm/kvm/arm.c +++ b/arch/arm/kvm/arm.c | |||
| @@ -540,7 +540,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) | |||
| 540 | 540 | ||
| 541 | vcpu->mode = OUTSIDE_GUEST_MODE; | 541 | vcpu->mode = OUTSIDE_GUEST_MODE; |
| 542 | kvm_guest_exit(); | 542 | kvm_guest_exit(); |
| 543 | trace_kvm_exit(*vcpu_pc(vcpu)); | 543 | trace_kvm_exit(kvm_vcpu_trap_get_class(vcpu), *vcpu_pc(vcpu)); |
| 544 | /* | 544 | /* |
| 545 | * We may have taken a host interrupt in HYP mode (ie | 545 | * We may have taken a host interrupt in HYP mode (ie |
| 546 | * while executing the guest). This interrupt is still | 546 | * while executing the guest). This interrupt is still |
diff --git a/arch/arm/kvm/trace.h b/arch/arm/kvm/trace.h index 881874b1a036..6817664b46b8 100644 --- a/arch/arm/kvm/trace.h +++ b/arch/arm/kvm/trace.h | |||
| @@ -25,18 +25,22 @@ TRACE_EVENT(kvm_entry, | |||
| 25 | ); | 25 | ); |
| 26 | 26 | ||
| 27 | TRACE_EVENT(kvm_exit, | 27 | TRACE_EVENT(kvm_exit, |
| 28 | TP_PROTO(unsigned long vcpu_pc), | 28 | TP_PROTO(unsigned int exit_reason, unsigned long vcpu_pc), |
| 29 | TP_ARGS(vcpu_pc), | 29 | TP_ARGS(exit_reason, vcpu_pc), |
| 30 | 30 | ||
| 31 | TP_STRUCT__entry( | 31 | TP_STRUCT__entry( |
| 32 | __field( unsigned int, exit_reason ) | ||
| 32 | __field( unsigned long, vcpu_pc ) | 33 | __field( unsigned long, vcpu_pc ) |
| 33 | ), | 34 | ), |
| 34 | 35 | ||
| 35 | TP_fast_assign( | 36 | TP_fast_assign( |
| 37 | __entry->exit_reason = exit_reason; | ||
| 36 | __entry->vcpu_pc = vcpu_pc; | 38 | __entry->vcpu_pc = vcpu_pc; |
| 37 | ), | 39 | ), |
| 38 | 40 | ||
| 39 | TP_printk("PC: 0x%08lx", __entry->vcpu_pc) | 41 | TP_printk("HSR_EC: 0x%04x, PC: 0x%08lx", |
| 42 | __entry->exit_reason, | ||
| 43 | __entry->vcpu_pc) | ||
| 40 | ); | 44 | ); |
| 41 | 45 | ||
| 42 | TRACE_EVENT(kvm_guest_fault, | 46 | TRACE_EVENT(kvm_guest_fault, |
diff --git a/arch/arm/mach-asm9260/Kconfig b/arch/arm/mach-asm9260/Kconfig index 8423be76080e..52241207a82a 100644 --- a/arch/arm/mach-asm9260/Kconfig +++ b/arch/arm/mach-asm9260/Kconfig | |||
| @@ -2,5 +2,7 @@ config MACH_ASM9260 | |||
| 2 | bool "Alphascale ASM9260" | 2 | bool "Alphascale ASM9260" |
| 3 | depends on ARCH_MULTI_V5 | 3 | depends on ARCH_MULTI_V5 |
| 4 | select CPU_ARM926T | 4 | select CPU_ARM926T |
| 5 | select ASM9260_TIMER | ||
| 6 | select GENERIC_CLOCKEVENTS | ||
| 5 | help | 7 | help |
| 6 | Support for Alphascale ASM9260 based platform. | 8 | Support for Alphascale ASM9260 based platform. |
diff --git a/arch/arm/mach-msm/board-halibut.c b/arch/arm/mach-msm/board-halibut.c index 61bfe584a9d7..fc832040c6e9 100644 --- a/arch/arm/mach-msm/board-halibut.c +++ b/arch/arm/mach-msm/board-halibut.c | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include <linux/input.h> | 20 | #include <linux/input.h> |
| 21 | #include <linux/io.h> | 21 | #include <linux/io.h> |
| 22 | #include <linux/delay.h> | 22 | #include <linux/delay.h> |
| 23 | #include <linux/smc91x.h> | ||
| 23 | 24 | ||
| 24 | #include <mach/hardware.h> | 25 | #include <mach/hardware.h> |
| 25 | #include <asm/mach-types.h> | 26 | #include <asm/mach-types.h> |
| @@ -46,15 +47,20 @@ static struct resource smc91x_resources[] = { | |||
| 46 | [1] = { | 47 | [1] = { |
| 47 | .start = MSM_GPIO_TO_INT(49), | 48 | .start = MSM_GPIO_TO_INT(49), |
| 48 | .end = MSM_GPIO_TO_INT(49), | 49 | .end = MSM_GPIO_TO_INT(49), |
| 49 | .flags = IORESOURCE_IRQ, | 50 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, |
| 50 | }, | 51 | }, |
| 51 | }; | 52 | }; |
| 52 | 53 | ||
| 54 | static struct smc91x_platdata smc91x_platdata = { | ||
| 55 | .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT, | ||
| 56 | }; | ||
| 57 | |||
| 53 | static struct platform_device smc91x_device = { | 58 | static struct platform_device smc91x_device = { |
| 54 | .name = "smc91x", | 59 | .name = "smc91x", |
| 55 | .id = 0, | 60 | .id = 0, |
| 56 | .num_resources = ARRAY_SIZE(smc91x_resources), | 61 | .num_resources = ARRAY_SIZE(smc91x_resources), |
| 57 | .resource = smc91x_resources, | 62 | .resource = smc91x_resources, |
| 63 | .dev.platform_data = &smc91x_platdata, | ||
| 58 | }; | 64 | }; |
| 59 | 65 | ||
| 60 | static struct platform_device *devices[] __initdata = { | 66 | static struct platform_device *devices[] __initdata = { |
diff --git a/arch/arm/mach-msm/board-qsd8x50.c b/arch/arm/mach-msm/board-qsd8x50.c index 4c748616ef47..10016a3bc698 100644 --- a/arch/arm/mach-msm/board-qsd8x50.c +++ b/arch/arm/mach-msm/board-qsd8x50.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <linux/usb/msm_hsusb.h> | 22 | #include <linux/usb/msm_hsusb.h> |
| 23 | #include <linux/err.h> | 23 | #include <linux/err.h> |
| 24 | #include <linux/clkdev.h> | 24 | #include <linux/clkdev.h> |
| 25 | #include <linux/smc91x.h> | ||
| 25 | 26 | ||
| 26 | #include <asm/mach-types.h> | 27 | #include <asm/mach-types.h> |
| 27 | #include <asm/mach/arch.h> | 28 | #include <asm/mach/arch.h> |
| @@ -49,15 +50,20 @@ static struct resource smc91x_resources[] = { | |||
| 49 | .flags = IORESOURCE_MEM, | 50 | .flags = IORESOURCE_MEM, |
| 50 | }, | 51 | }, |
| 51 | [1] = { | 52 | [1] = { |
| 52 | .flags = IORESOURCE_IRQ, | 53 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL, |
| 53 | }, | 54 | }, |
| 54 | }; | 55 | }; |
| 55 | 56 | ||
| 57 | static struct smc91x_platdata smc91x_platdata = { | ||
| 58 | .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT, | ||
| 59 | }; | ||
| 60 | |||
| 56 | static struct platform_device smc91x_device = { | 61 | static struct platform_device smc91x_device = { |
| 57 | .name = "smc91x", | 62 | .name = "smc91x", |
| 58 | .id = 0, | 63 | .id = 0, |
| 59 | .num_resources = ARRAY_SIZE(smc91x_resources), | 64 | .num_resources = ARRAY_SIZE(smc91x_resources), |
| 60 | .resource = smc91x_resources, | 65 | .resource = smc91x_resources, |
| 66 | .dev.platform_data = &smc91x_platdata, | ||
| 61 | }; | 67 | }; |
| 62 | 68 | ||
| 63 | static int __init msm_init_smc91x(void) | 69 | static int __init msm_init_smc91x(void) |
diff --git a/arch/arm/mach-pxa/idp.c b/arch/arm/mach-pxa/idp.c index 343c4e3a7c5d..7d8eab857a93 100644 --- a/arch/arm/mach-pxa/idp.c +++ b/arch/arm/mach-pxa/idp.c | |||
| @@ -81,11 +81,16 @@ static struct resource smc91x_resources[] = { | |||
| 81 | } | 81 | } |
| 82 | }; | 82 | }; |
| 83 | 83 | ||
| 84 | static struct smc91x_platdata smc91x_platdata = { | ||
| 85 | .flags = SMC91X_USE_32BIT | SMC91X_USE_DMA | SMC91X_NOWAIT, | ||
| 86 | }; | ||
| 87 | |||
| 84 | static struct platform_device smc91x_device = { | 88 | static struct platform_device smc91x_device = { |
| 85 | .name = "smc91x", | 89 | .name = "smc91x", |
| 86 | .id = 0, | 90 | .id = 0, |
| 87 | .num_resources = ARRAY_SIZE(smc91x_resources), | 91 | .num_resources = ARRAY_SIZE(smc91x_resources), |
| 88 | .resource = smc91x_resources, | 92 | .resource = smc91x_resources, |
| 93 | .dev.platform_data = &smc91x_platdata, | ||
| 89 | }; | 94 | }; |
| 90 | 95 | ||
| 91 | static void idp_backlight_power(int on) | 96 | static void idp_backlight_power(int on) |
diff --git a/arch/arm/mach-pxa/lpd270.c b/arch/arm/mach-pxa/lpd270.c index ad777b353bd5..28da319d389f 100644 --- a/arch/arm/mach-pxa/lpd270.c +++ b/arch/arm/mach-pxa/lpd270.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/mtd/mtd.h> | 24 | #include <linux/mtd/mtd.h> |
| 25 | #include <linux/mtd/partitions.h> | 25 | #include <linux/mtd/partitions.h> |
| 26 | #include <linux/pwm_backlight.h> | 26 | #include <linux/pwm_backlight.h> |
| 27 | #include <linux/smc91x.h> | ||
| 27 | 28 | ||
| 28 | #include <asm/types.h> | 29 | #include <asm/types.h> |
| 29 | #include <asm/setup.h> | 30 | #include <asm/setup.h> |
| @@ -189,15 +190,20 @@ static struct resource smc91x_resources[] = { | |||
| 189 | [1] = { | 190 | [1] = { |
| 190 | .start = LPD270_ETHERNET_IRQ, | 191 | .start = LPD270_ETHERNET_IRQ, |
| 191 | .end = LPD270_ETHERNET_IRQ, | 192 | .end = LPD270_ETHERNET_IRQ, |
| 192 | .flags = IORESOURCE_IRQ, | 193 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE, |
| 193 | }, | 194 | }, |
| 194 | }; | 195 | }; |
| 195 | 196 | ||
| 197 | struct smc91x_platdata smc91x_platdata = { | ||
| 198 | .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT; | ||
| 199 | }; | ||
| 200 | |||
| 196 | static struct platform_device smc91x_device = { | 201 | static struct platform_device smc91x_device = { |
| 197 | .name = "smc91x", | 202 | .name = "smc91x", |
| 198 | .id = 0, | 203 | .id = 0, |
| 199 | .num_resources = ARRAY_SIZE(smc91x_resources), | 204 | .num_resources = ARRAY_SIZE(smc91x_resources), |
| 200 | .resource = smc91x_resources, | 205 | .resource = smc91x_resources, |
| 206 | .dev.platform_data = &smc91x_platdata, | ||
| 201 | }; | 207 | }; |
| 202 | 208 | ||
| 203 | static struct resource lpd270_flash_resources[] = { | 209 | static struct resource lpd270_flash_resources[] = { |
diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c index 850e506926df..c309593abdb2 100644 --- a/arch/arm/mach-realview/core.c +++ b/arch/arm/mach-realview/core.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <linux/platform_data/video-clcd-versatile.h> | 28 | #include <linux/platform_data/video-clcd-versatile.h> |
| 29 | #include <linux/io.h> | 29 | #include <linux/io.h> |
| 30 | #include <linux/smsc911x.h> | 30 | #include <linux/smsc911x.h> |
| 31 | #include <linux/smc91x.h> | ||
| 31 | #include <linux/ata_platform.h> | 32 | #include <linux/ata_platform.h> |
| 32 | #include <linux/amba/mmci.h> | 33 | #include <linux/amba/mmci.h> |
| 33 | #include <linux/gfp.h> | 34 | #include <linux/gfp.h> |
| @@ -94,6 +95,10 @@ static struct smsc911x_platform_config smsc911x_config = { | |||
| 94 | .phy_interface = PHY_INTERFACE_MODE_MII, | 95 | .phy_interface = PHY_INTERFACE_MODE_MII, |
| 95 | }; | 96 | }; |
| 96 | 97 | ||
| 98 | static struct smc91x_platdata smc91x_platdata = { | ||
| 99 | .flags = SMC91X_USE_32BIT | SMC91X_NOWAIT, | ||
| 100 | }; | ||
| 101 | |||
| 97 | static struct platform_device realview_eth_device = { | 102 | static struct platform_device realview_eth_device = { |
| 98 | .name = "smsc911x", | 103 | .name = "smsc911x", |
| 99 | .id = 0, | 104 | .id = 0, |
| @@ -107,6 +112,8 @@ int realview_eth_register(const char *name, struct resource *res) | |||
| 107 | realview_eth_device.resource = res; | 112 | realview_eth_device.resource = res; |
| 108 | if (strcmp(realview_eth_device.name, "smsc911x") == 0) | 113 | if (strcmp(realview_eth_device.name, "smsc911x") == 0) |
| 109 | realview_eth_device.dev.platform_data = &smsc911x_config; | 114 | realview_eth_device.dev.platform_data = &smsc911x_config; |
| 115 | else | ||
| 116 | realview_eth_device.dev.platform_data = &smc91x_platdata; | ||
| 110 | 117 | ||
| 111 | return platform_device_register(&realview_eth_device); | 118 | return platform_device_register(&realview_eth_device); |
| 112 | } | 119 | } |
diff --git a/arch/arm/mach-realview/realview_eb.c b/arch/arm/mach-realview/realview_eb.c index 64c88d657f9e..b3869cbbcc68 100644 --- a/arch/arm/mach-realview/realview_eb.c +++ b/arch/arm/mach-realview/realview_eb.c | |||
| @@ -234,7 +234,7 @@ static struct resource realview_eb_eth_resources[] = { | |||
| 234 | [1] = { | 234 | [1] = { |
| 235 | .start = IRQ_EB_ETH, | 235 | .start = IRQ_EB_ETH, |
| 236 | .end = IRQ_EB_ETH, | 236 | .end = IRQ_EB_ETH, |
| 237 | .flags = IORESOURCE_IRQ, | 237 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE, |
| 238 | }, | 238 | }, |
| 239 | }; | 239 | }; |
| 240 | 240 | ||
diff --git a/arch/arm/mach-sa1100/neponset.c b/arch/arm/mach-sa1100/neponset.c index 169262e3040d..7b0cd3172354 100644 --- a/arch/arm/mach-sa1100/neponset.c +++ b/arch/arm/mach-sa1100/neponset.c | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #include <linux/pm.h> | 12 | #include <linux/pm.h> |
| 13 | #include <linux/serial_core.h> | 13 | #include <linux/serial_core.h> |
| 14 | #include <linux/slab.h> | 14 | #include <linux/slab.h> |
| 15 | #include <linux/smc91x.h> | ||
| 15 | 16 | ||
| 16 | #include <asm/mach-types.h> | 17 | #include <asm/mach-types.h> |
| 17 | #include <asm/mach/map.h> | 18 | #include <asm/mach/map.h> |
| @@ -258,12 +259,17 @@ static int neponset_probe(struct platform_device *dev) | |||
| 258 | 0x02000000, "smc91x-attrib"), | 259 | 0x02000000, "smc91x-attrib"), |
| 259 | { .flags = IORESOURCE_IRQ }, | 260 | { .flags = IORESOURCE_IRQ }, |
| 260 | }; | 261 | }; |
| 262 | struct smc91x_platdata smc91x_platdata = { | ||
| 263 | .flags = SMC91X_USE_8BIT | SMC91X_IO_SHIFT_2 | SMC91X_NOWAIT, | ||
| 264 | }; | ||
| 261 | struct platform_device_info smc91x_devinfo = { | 265 | struct platform_device_info smc91x_devinfo = { |
| 262 | .parent = &dev->dev, | 266 | .parent = &dev->dev, |
| 263 | .name = "smc91x", | 267 | .name = "smc91x", |
| 264 | .id = 0, | 268 | .id = 0, |
| 265 | .res = smc91x_resources, | 269 | .res = smc91x_resources, |
| 266 | .num_res = ARRAY_SIZE(smc91x_resources), | 270 | .num_res = ARRAY_SIZE(smc91x_resources), |
| 271 | .data = &smc91c_platdata, | ||
| 272 | .size_data = sizeof(smc91c_platdata), | ||
| 267 | }; | 273 | }; |
| 268 | int ret, irq; | 274 | int ret, irq; |
| 269 | 275 | ||
diff --git a/arch/arm/mach-sa1100/pleb.c b/arch/arm/mach-sa1100/pleb.c index 091261878eff..696fd0fe4806 100644 --- a/arch/arm/mach-sa1100/pleb.c +++ b/arch/arm/mach-sa1100/pleb.c | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include <linux/irq.h> | 11 | #include <linux/irq.h> |
| 12 | #include <linux/io.h> | 12 | #include <linux/io.h> |
| 13 | #include <linux/mtd/partitions.h> | 13 | #include <linux/mtd/partitions.h> |
| 14 | #include <linux/smc91x.h> | ||
| 14 | 15 | ||
| 15 | #include <mach/hardware.h> | 16 | #include <mach/hardware.h> |
| 16 | #include <asm/setup.h> | 17 | #include <asm/setup.h> |
| @@ -43,12 +44,18 @@ static struct resource smc91x_resources[] = { | |||
| 43 | #endif | 44 | #endif |
| 44 | }; | 45 | }; |
| 45 | 46 | ||
| 47 | static struct smc91x_platdata smc91x_platdata = { | ||
| 48 | .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT, | ||
| 49 | }; | ||
| 46 | 50 | ||
| 47 | static struct platform_device smc91x_device = { | 51 | static struct platform_device smc91x_device = { |
| 48 | .name = "smc91x", | 52 | .name = "smc91x", |
| 49 | .id = 0, | 53 | .id = 0, |
| 50 | .num_resources = ARRAY_SIZE(smc91x_resources), | 54 | .num_resources = ARRAY_SIZE(smc91x_resources), |
| 51 | .resource = smc91x_resources, | 55 | .resource = smc91x_resources, |
| 56 | .dev = { | ||
| 57 | .platform_data = &smc91c_platdata, | ||
| 58 | }, | ||
| 52 | }; | 59 | }; |
| 53 | 60 | ||
| 54 | static struct platform_device *devices[] __initdata = { | 61 | static struct platform_device *devices[] __initdata = { |
diff --git a/arch/arm64/boot/dts/arm/foundation-v8.dts b/arch/arm64/boot/dts/arm/foundation-v8.dts index 27f32962e55c..4eac8dcea423 100644 --- a/arch/arm64/boot/dts/arm/foundation-v8.dts +++ b/arch/arm64/boot/dts/arm/foundation-v8.dts | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | reg = <0x0 0x0>; | 34 | reg = <0x0 0x0>; |
| 35 | enable-method = "spin-table"; | 35 | enable-method = "spin-table"; |
| 36 | cpu-release-addr = <0x0 0x8000fff8>; | 36 | cpu-release-addr = <0x0 0x8000fff8>; |
| 37 | next-level-cache = <&L2_0>; | ||
| 37 | }; | 38 | }; |
| 38 | cpu@1 { | 39 | cpu@1 { |
| 39 | device_type = "cpu"; | 40 | device_type = "cpu"; |
| @@ -41,6 +42,7 @@ | |||
| 41 | reg = <0x0 0x1>; | 42 | reg = <0x0 0x1>; |
| 42 | enable-method = "spin-table"; | 43 | enable-method = "spin-table"; |
| 43 | cpu-release-addr = <0x0 0x8000fff8>; | 44 | cpu-release-addr = <0x0 0x8000fff8>; |
| 45 | next-level-cache = <&L2_0>; | ||
| 44 | }; | 46 | }; |
| 45 | cpu@2 { | 47 | cpu@2 { |
| 46 | device_type = "cpu"; | 48 | device_type = "cpu"; |
| @@ -48,6 +50,7 @@ | |||
| 48 | reg = <0x0 0x2>; | 50 | reg = <0x0 0x2>; |
| 49 | enable-method = "spin-table"; | 51 | enable-method = "spin-table"; |
| 50 | cpu-release-addr = <0x0 0x8000fff8>; | 52 | cpu-release-addr = <0x0 0x8000fff8>; |
| 53 | next-level-cache = <&L2_0>; | ||
| 51 | }; | 54 | }; |
| 52 | cpu@3 { | 55 | cpu@3 { |
| 53 | device_type = "cpu"; | 56 | device_type = "cpu"; |
| @@ -55,6 +58,11 @@ | |||
| 55 | reg = <0x0 0x3>; | 58 | reg = <0x0 0x3>; |
| 56 | enable-method = "spin-table"; | 59 | enable-method = "spin-table"; |
| 57 | cpu-release-addr = <0x0 0x8000fff8>; | 60 | cpu-release-addr = <0x0 0x8000fff8>; |
| 61 | next-level-cache = <&L2_0>; | ||
| 62 | }; | ||
| 63 | |||
| 64 | L2_0: l2-cache0 { | ||
| 65 | compatible = "cache"; | ||
| 58 | }; | 66 | }; |
| 59 | }; | 67 | }; |
| 60 | 68 | ||
diff --git a/arch/arm64/boot/dts/arm/juno.dts b/arch/arm64/boot/dts/arm/juno.dts index d429129ecb3d..133ee59de2d7 100644 --- a/arch/arm64/boot/dts/arm/juno.dts +++ b/arch/arm64/boot/dts/arm/juno.dts | |||
| @@ -39,6 +39,7 @@ | |||
| 39 | reg = <0x0 0x0>; | 39 | reg = <0x0 0x0>; |
| 40 | device_type = "cpu"; | 40 | device_type = "cpu"; |
| 41 | enable-method = "psci"; | 41 | enable-method = "psci"; |
| 42 | next-level-cache = <&A57_L2>; | ||
| 42 | }; | 43 | }; |
| 43 | 44 | ||
| 44 | A57_1: cpu@1 { | 45 | A57_1: cpu@1 { |
| @@ -46,6 +47,7 @@ | |||
| 46 | reg = <0x0 0x1>; | 47 | reg = <0x0 0x1>; |
| 47 | device_type = "cpu"; | 48 | device_type = "cpu"; |
| 48 | enable-method = "psci"; | 49 | enable-method = "psci"; |
| 50 | next-level-cache = <&A57_L2>; | ||
| 49 | }; | 51 | }; |
| 50 | 52 | ||
| 51 | A53_0: cpu@100 { | 53 | A53_0: cpu@100 { |
| @@ -53,6 +55,7 @@ | |||
| 53 | reg = <0x0 0x100>; | 55 | reg = <0x0 0x100>; |
| 54 | device_type = "cpu"; | 56 | device_type = "cpu"; |
| 55 | enable-method = "psci"; | 57 | enable-method = "psci"; |
| 58 | next-level-cache = <&A53_L2>; | ||
| 56 | }; | 59 | }; |
| 57 | 60 | ||
| 58 | A53_1: cpu@101 { | 61 | A53_1: cpu@101 { |
| @@ -60,6 +63,7 @@ | |||
| 60 | reg = <0x0 0x101>; | 63 | reg = <0x0 0x101>; |
| 61 | device_type = "cpu"; | 64 | device_type = "cpu"; |
| 62 | enable-method = "psci"; | 65 | enable-method = "psci"; |
| 66 | next-level-cache = <&A53_L2>; | ||
| 63 | }; | 67 | }; |
| 64 | 68 | ||
| 65 | A53_2: cpu@102 { | 69 | A53_2: cpu@102 { |
| @@ -67,6 +71,7 @@ | |||
| 67 | reg = <0x0 0x102>; | 71 | reg = <0x0 0x102>; |
| 68 | device_type = "cpu"; | 72 | device_type = "cpu"; |
| 69 | enable-method = "psci"; | 73 | enable-method = "psci"; |
| 74 | next-level-cache = <&A53_L2>; | ||
| 70 | }; | 75 | }; |
| 71 | 76 | ||
| 72 | A53_3: cpu@103 { | 77 | A53_3: cpu@103 { |
| @@ -74,6 +79,15 @@ | |||
| 74 | reg = <0x0 0x103>; | 79 | reg = <0x0 0x103>; |
| 75 | device_type = "cpu"; | 80 | device_type = "cpu"; |
| 76 | enable-method = "psci"; | 81 | enable-method = "psci"; |
| 82 | next-level-cache = <&A53_L2>; | ||
| 83 | }; | ||
| 84 | |||
| 85 | A57_L2: l2-cache0 { | ||
| 86 | compatible = "cache"; | ||
| 87 | }; | ||
| 88 | |||
| 89 | A53_L2: l2-cache1 { | ||
| 90 | compatible = "cache"; | ||
| 77 | }; | 91 | }; |
| 78 | }; | 92 | }; |
| 79 | 93 | ||
diff --git a/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts b/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts index efc59b3baf63..20addabbd127 100644 --- a/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts +++ b/arch/arm64/boot/dts/arm/rtsm_ve-aemv8a.dts | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | reg = <0x0 0x0>; | 37 | reg = <0x0 0x0>; |
| 38 | enable-method = "spin-table"; | 38 | enable-method = "spin-table"; |
| 39 | cpu-release-addr = <0x0 0x8000fff8>; | 39 | cpu-release-addr = <0x0 0x8000fff8>; |
| 40 | next-level-cache = <&L2_0>; | ||
| 40 | }; | 41 | }; |
| 41 | cpu@1 { | 42 | cpu@1 { |
| 42 | device_type = "cpu"; | 43 | device_type = "cpu"; |
| @@ -44,6 +45,7 @@ | |||
| 44 | reg = <0x0 0x1>; | 45 | reg = <0x0 0x1>; |
| 45 | enable-method = "spin-table"; | 46 | enable-method = "spin-table"; |
| 46 | cpu-release-addr = <0x0 0x8000fff8>; | 47 | cpu-release-addr = <0x0 0x8000fff8>; |
| 48 | next-level-cache = <&L2_0>; | ||
| 47 | }; | 49 | }; |
| 48 | cpu@2 { | 50 | cpu@2 { |
| 49 | device_type = "cpu"; | 51 | device_type = "cpu"; |
| @@ -51,6 +53,7 @@ | |||
| 51 | reg = <0x0 0x2>; | 53 | reg = <0x0 0x2>; |
| 52 | enable-method = "spin-table"; | 54 | enable-method = "spin-table"; |
| 53 | cpu-release-addr = <0x0 0x8000fff8>; | 55 | cpu-release-addr = <0x0 0x8000fff8>; |
| 56 | next-level-cache = <&L2_0>; | ||
| 54 | }; | 57 | }; |
| 55 | cpu@3 { | 58 | cpu@3 { |
| 56 | device_type = "cpu"; | 59 | device_type = "cpu"; |
| @@ -58,6 +61,11 @@ | |||
| 58 | reg = <0x0 0x3>; | 61 | reg = <0x0 0x3>; |
| 59 | enable-method = "spin-table"; | 62 | enable-method = "spin-table"; |
| 60 | cpu-release-addr = <0x0 0x8000fff8>; | 63 | cpu-release-addr = <0x0 0x8000fff8>; |
| 64 | next-level-cache = <&L2_0>; | ||
| 65 | }; | ||
| 66 | |||
| 67 | L2_0: l2-cache0 { | ||
| 68 | compatible = "cache"; | ||
| 61 | }; | 69 | }; |
| 62 | }; | 70 | }; |
| 63 | 71 | ||
diff --git a/arch/arm64/crypto/Makefile b/arch/arm64/crypto/Makefile index 5720608c50b1..abb79b3cfcfe 100644 --- a/arch/arm64/crypto/Makefile +++ b/arch/arm64/crypto/Makefile | |||
| @@ -29,7 +29,7 @@ aes-ce-blk-y := aes-glue-ce.o aes-ce.o | |||
| 29 | obj-$(CONFIG_CRYPTO_AES_ARM64_NEON_BLK) += aes-neon-blk.o | 29 | obj-$(CONFIG_CRYPTO_AES_ARM64_NEON_BLK) += aes-neon-blk.o |
| 30 | aes-neon-blk-y := aes-glue-neon.o aes-neon.o | 30 | aes-neon-blk-y := aes-glue-neon.o aes-neon.o |
| 31 | 31 | ||
| 32 | AFLAGS_aes-ce.o := -DINTERLEAVE=2 -DINTERLEAVE_INLINE | 32 | AFLAGS_aes-ce.o := -DINTERLEAVE=4 |
| 33 | AFLAGS_aes-neon.o := -DINTERLEAVE=4 | 33 | AFLAGS_aes-neon.o := -DINTERLEAVE=4 |
| 34 | 34 | ||
| 35 | CFLAGS_aes-glue-ce.o := -DUSE_V8_CRYPTO_EXTENSIONS | 35 | CFLAGS_aes-glue-ce.o := -DUSE_V8_CRYPTO_EXTENSIONS |
diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h index 5901480bfdca..750bac4e637e 100644 --- a/arch/arm64/include/asm/assembler.h +++ b/arch/arm64/include/asm/assembler.h | |||
| @@ -20,6 +20,9 @@ | |||
| 20 | #error "Only include this from assembly code" | 20 | #error "Only include this from assembly code" |
| 21 | #endif | 21 | #endif |
| 22 | 22 | ||
| 23 | #ifndef __ASM_ASSEMBLER_H | ||
| 24 | #define __ASM_ASSEMBLER_H | ||
| 25 | |||
| 23 | #include <asm/ptrace.h> | 26 | #include <asm/ptrace.h> |
| 24 | #include <asm/thread_info.h> | 27 | #include <asm/thread_info.h> |
| 25 | 28 | ||
| @@ -155,3 +158,5 @@ lr .req x30 // link register | |||
| 155 | #endif | 158 | #endif |
| 156 | orr \rd, \lbits, \hbits, lsl #32 | 159 | orr \rd, \lbits, \hbits, lsl #32 |
| 157 | .endm | 160 | .endm |
| 161 | |||
| 162 | #endif /* __ASM_ASSEMBLER_H */ | ||
diff --git a/arch/arm64/include/asm/cpuidle.h b/arch/arm64/include/asm/cpuidle.h index 0710654631e7..c60643f14cda 100644 --- a/arch/arm64/include/asm/cpuidle.h +++ b/arch/arm64/include/asm/cpuidle.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef __ASM_CPUIDLE_H | 1 | #ifndef __ASM_CPUIDLE_H |
| 2 | #define __ASM_CPUIDLE_H | 2 | #define __ASM_CPUIDLE_H |
| 3 | 3 | ||
| 4 | #include <asm/proc-fns.h> | ||
| 5 | |||
| 4 | #ifdef CONFIG_CPU_IDLE | 6 | #ifdef CONFIG_CPU_IDLE |
| 5 | extern int cpu_init_idle(unsigned int cpu); | 7 | extern int cpu_init_idle(unsigned int cpu); |
| 6 | extern int cpu_suspend(unsigned long arg); | 8 | extern int cpu_suspend(unsigned long arg); |
diff --git a/arch/arm64/include/asm/insn.h b/arch/arm64/include/asm/insn.h index e2ff32a93b5c..d2f49423c5dc 100644 --- a/arch/arm64/include/asm/insn.h +++ b/arch/arm64/include/asm/insn.h | |||
| @@ -264,8 +264,10 @@ __AARCH64_INSN_FUNCS(ands, 0x7F200000, 0x6A000000) | |||
| 264 | __AARCH64_INSN_FUNCS(bics, 0x7F200000, 0x6A200000) | 264 | __AARCH64_INSN_FUNCS(bics, 0x7F200000, 0x6A200000) |
| 265 | __AARCH64_INSN_FUNCS(b, 0xFC000000, 0x14000000) | 265 | __AARCH64_INSN_FUNCS(b, 0xFC000000, 0x14000000) |
| 266 | __AARCH64_INSN_FUNCS(bl, 0xFC000000, 0x94000000) | 266 | __AARCH64_INSN_FUNCS(bl, 0xFC000000, 0x94000000) |
| 267 | __AARCH64_INSN_FUNCS(cbz, 0xFE000000, 0x34000000) | 267 | __AARCH64_INSN_FUNCS(cbz, 0x7F000000, 0x34000000) |
| 268 | __AARCH64_INSN_FUNCS(cbnz, 0xFE000000, 0x35000000) | 268 | __AARCH64_INSN_FUNCS(cbnz, 0x7F000000, 0x35000000) |
| 269 | __AARCH64_INSN_FUNCS(tbz, 0x7F000000, 0x36000000) | ||
| 270 | __AARCH64_INSN_FUNCS(tbnz, 0x7F000000, 0x37000000) | ||
| 269 | __AARCH64_INSN_FUNCS(bcond, 0xFF000010, 0x54000000) | 271 | __AARCH64_INSN_FUNCS(bcond, 0xFF000010, 0x54000000) |
| 270 | __AARCH64_INSN_FUNCS(svc, 0xFFE0001F, 0xD4000001) | 272 | __AARCH64_INSN_FUNCS(svc, 0xFFE0001F, 0xD4000001) |
| 271 | __AARCH64_INSN_FUNCS(hvc, 0xFFE0001F, 0xD4000002) | 273 | __AARCH64_INSN_FUNCS(hvc, 0xFFE0001F, 0xD4000002) |
diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h index 16449c535e50..800ec0e87ed9 100644 --- a/arch/arm64/include/asm/pgtable.h +++ b/arch/arm64/include/asm/pgtable.h | |||
| @@ -460,7 +460,7 @@ static inline pud_t *pud_offset(pgd_t *pgd, unsigned long addr) | |||
| 460 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) | 460 | static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) |
| 461 | { | 461 | { |
| 462 | const pteval_t mask = PTE_USER | PTE_PXN | PTE_UXN | PTE_RDONLY | | 462 | const pteval_t mask = PTE_USER | PTE_PXN | PTE_UXN | PTE_RDONLY | |
| 463 | PTE_PROT_NONE | PTE_VALID | PTE_WRITE; | 463 | PTE_PROT_NONE | PTE_WRITE | PTE_TYPE_MASK; |
| 464 | pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask); | 464 | pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask); |
| 465 | return pte; | 465 | return pte; |
| 466 | } | 466 | } |
diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h index f9be30ea1cbd..20e9591a60cf 100644 --- a/arch/arm64/include/asm/processor.h +++ b/arch/arm64/include/asm/processor.h | |||
| @@ -45,7 +45,8 @@ | |||
| 45 | #define STACK_TOP STACK_TOP_MAX | 45 | #define STACK_TOP STACK_TOP_MAX |
| 46 | #endif /* CONFIG_COMPAT */ | 46 | #endif /* CONFIG_COMPAT */ |
| 47 | 47 | ||
| 48 | #define ARCH_LOW_ADDRESS_LIMIT PHYS_MASK | 48 | extern phys_addr_t arm64_dma_phys_limit; |
| 49 | #define ARCH_LOW_ADDRESS_LIMIT (arm64_dma_phys_limit - 1) | ||
| 49 | #endif /* __KERNEL__ */ | 50 | #endif /* __KERNEL__ */ |
| 50 | 51 | ||
| 51 | struct debug_info { | 52 | struct debug_info { |
diff --git a/arch/arm64/include/asm/tlbflush.h b/arch/arm64/include/asm/tlbflush.h index 73f0ce570fb3..4abe9b945f77 100644 --- a/arch/arm64/include/asm/tlbflush.h +++ b/arch/arm64/include/asm/tlbflush.h | |||
| @@ -24,11 +24,6 @@ | |||
| 24 | #include <linux/sched.h> | 24 | #include <linux/sched.h> |
| 25 | #include <asm/cputype.h> | 25 | #include <asm/cputype.h> |
| 26 | 26 | ||
| 27 | extern void __cpu_flush_user_tlb_range(unsigned long, unsigned long, struct vm_area_struct *); | ||
| 28 | extern void __cpu_flush_kern_tlb_range(unsigned long, unsigned long); | ||
| 29 | |||
| 30 | extern struct cpu_tlb_fns cpu_tlb; | ||
| 31 | |||
| 32 | /* | 27 | /* |
| 33 | * TLB Management | 28 | * TLB Management |
| 34 | * ============== | 29 | * ============== |
diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile index bef04afd6031..5ee07eee80c2 100644 --- a/arch/arm64/kernel/Makefile +++ b/arch/arm64/kernel/Makefile | |||
| @@ -15,8 +15,9 @@ CFLAGS_REMOVE_return_address.o = -pg | |||
| 15 | arm64-obj-y := cputable.o debug-monitors.o entry.o irq.o fpsimd.o \ | 15 | arm64-obj-y := cputable.o debug-monitors.o entry.o irq.o fpsimd.o \ |
| 16 | entry-fpsimd.o process.o ptrace.o setup.o signal.o \ | 16 | entry-fpsimd.o process.o ptrace.o setup.o signal.o \ |
| 17 | sys.o stacktrace.o time.o traps.o io.o vdso.o \ | 17 | sys.o stacktrace.o time.o traps.o io.o vdso.o \ |
| 18 | hyp-stub.o psci.o cpu_ops.o insn.o return_address.o \ | 18 | hyp-stub.o psci.o psci-call.o cpu_ops.o insn.o \ |
| 19 | cpuinfo.o cpu_errata.o alternative.o cacheinfo.o | 19 | return_address.o cpuinfo.o cpu_errata.o \ |
| 20 | alternative.o cacheinfo.o | ||
| 20 | 21 | ||
| 21 | arm64-obj-$(CONFIG_COMPAT) += sys32.o kuser32.o signal32.o \ | 22 | arm64-obj-$(CONFIG_COMPAT) += sys32.o kuser32.o signal32.o \ |
| 22 | sys_compat.o entry32.o \ | 23 | sys_compat.o entry32.o \ |
diff --git a/arch/arm64/kernel/ftrace.c b/arch/arm64/kernel/ftrace.c index cf8556ae09d0..c851be795080 100644 --- a/arch/arm64/kernel/ftrace.c +++ b/arch/arm64/kernel/ftrace.c | |||
| @@ -156,7 +156,7 @@ static int ftrace_modify_graph_caller(bool enable) | |||
| 156 | 156 | ||
| 157 | branch = aarch64_insn_gen_branch_imm(pc, | 157 | branch = aarch64_insn_gen_branch_imm(pc, |
| 158 | (unsigned long)ftrace_graph_caller, | 158 | (unsigned long)ftrace_graph_caller, |
| 159 | AARCH64_INSN_BRANCH_LINK); | 159 | AARCH64_INSN_BRANCH_NOLINK); |
| 160 | nop = aarch64_insn_gen_nop(); | 160 | nop = aarch64_insn_gen_nop(); |
| 161 | 161 | ||
| 162 | if (enable) | 162 | if (enable) |
diff --git a/arch/arm64/kernel/insn.c b/arch/arm64/kernel/insn.c index 27d4864577e5..c8eca88f12e6 100644 --- a/arch/arm64/kernel/insn.c +++ b/arch/arm64/kernel/insn.c | |||
| @@ -87,8 +87,10 @@ static void __kprobes *patch_map(void *addr, int fixmap) | |||
| 87 | 87 | ||
| 88 | if (module && IS_ENABLED(CONFIG_DEBUG_SET_MODULE_RONX)) | 88 | if (module && IS_ENABLED(CONFIG_DEBUG_SET_MODULE_RONX)) |
| 89 | page = vmalloc_to_page(addr); | 89 | page = vmalloc_to_page(addr); |
| 90 | else | 90 | else if (!module && IS_ENABLED(CONFIG_DEBUG_RODATA)) |
| 91 | page = virt_to_page(addr); | 91 | page = virt_to_page(addr); |
| 92 | else | ||
| 93 | return addr; | ||
| 92 | 94 | ||
| 93 | BUG_ON(!page); | 95 | BUG_ON(!page); |
| 94 | set_fixmap(fixmap, page_to_phys(page)); | 96 | set_fixmap(fixmap, page_to_phys(page)); |
diff --git a/arch/arm64/kernel/psci-call.S b/arch/arm64/kernel/psci-call.S new file mode 100644 index 000000000000..cf83e61cd3b5 --- /dev/null +++ b/arch/arm64/kernel/psci-call.S | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | /* | ||
| 2 | * This program is free software; you can redistribute it and/or modify | ||
| 3 | * it under the terms of the GNU General Public License version 2 as | ||
| 4 | * published by the Free Software Foundation. | ||
| 5 | * | ||
| 6 | * This program is distributed in the hope that it will be useful, | ||
| 7 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 8 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 9 | * GNU General Public License for more details. | ||
| 10 | * | ||
| 11 | * Copyright (C) 2015 ARM Limited | ||
| 12 | * | ||
| 13 | * Author: Will Deacon <will.deacon@arm.com> | ||
| 14 | */ | ||
| 15 | |||
| 16 | #include <linux/linkage.h> | ||
| 17 | |||
| 18 | /* int __invoke_psci_fn_hvc(u64 function_id, u64 arg0, u64 arg1, u64 arg2) */ | ||
| 19 | ENTRY(__invoke_psci_fn_hvc) | ||
| 20 | hvc #0 | ||
| 21 | ret | ||
| 22 | ENDPROC(__invoke_psci_fn_hvc) | ||
| 23 | |||
| 24 | /* int __invoke_psci_fn_smc(u64 function_id, u64 arg0, u64 arg1, u64 arg2) */ | ||
| 25 | ENTRY(__invoke_psci_fn_smc) | ||
| 26 | smc #0 | ||
| 27 | ret | ||
| 28 | ENDPROC(__invoke_psci_fn_smc) | ||
diff --git a/arch/arm64/kernel/psci.c b/arch/arm64/kernel/psci.c index 3425f311c49e..9b8a70ae64a1 100644 --- a/arch/arm64/kernel/psci.c +++ b/arch/arm64/kernel/psci.c | |||
| @@ -57,6 +57,9 @@ static struct psci_operations psci_ops; | |||
| 57 | static int (*invoke_psci_fn)(u64, u64, u64, u64); | 57 | static int (*invoke_psci_fn)(u64, u64, u64, u64); |
| 58 | typedef int (*psci_initcall_t)(const struct device_node *); | 58 | typedef int (*psci_initcall_t)(const struct device_node *); |
| 59 | 59 | ||
| 60 | asmlinkage int __invoke_psci_fn_hvc(u64, u64, u64, u64); | ||
| 61 | asmlinkage int __invoke_psci_fn_smc(u64, u64, u64, u64); | ||
| 62 | |||
| 60 | enum psci_function { | 63 | enum psci_function { |
| 61 | PSCI_FN_CPU_SUSPEND, | 64 | PSCI_FN_CPU_SUSPEND, |
| 62 | PSCI_FN_CPU_ON, | 65 | PSCI_FN_CPU_ON, |
| @@ -109,40 +112,6 @@ static void psci_power_state_unpack(u32 power_state, | |||
| 109 | PSCI_0_2_POWER_STATE_AFFL_SHIFT; | 112 | PSCI_0_2_POWER_STATE_AFFL_SHIFT; |
| 110 | } | 113 | } |
| 111 | 114 | ||
| 112 | /* | ||
| 113 | * The following two functions are invoked via the invoke_psci_fn pointer | ||
| 114 | * and will not be inlined, allowing us to piggyback on the AAPCS. | ||
| 115 | */ | ||
| 116 | static noinline int __invoke_psci_fn_hvc(u64 function_id, u64 arg0, u64 arg1, | ||
| 117 | u64 arg2) | ||
| 118 | { | ||
| 119 | asm volatile( | ||
| 120 | __asmeq("%0", "x0") | ||
| 121 | __asmeq("%1", "x1") | ||
| 122 | __asmeq("%2", "x2") | ||
| 123 | __asmeq("%3", "x3") | ||
| 124 | "hvc #0\n" | ||
| 125 | : "+r" (function_id) | ||
| 126 | : "r" (arg0), "r" (arg1), "r" (arg2)); | ||
| 127 | |||
| 128 | return function_id; | ||
| 129 | } | ||
| 130 | |||
| 131 | static noinline int __invoke_psci_fn_smc(u64 function_id, u64 arg0, u64 arg1, | ||
| 132 | u64 arg2) | ||
| 133 | { | ||
| 134 | asm volatile( | ||
| 135 | __asmeq("%0", "x0") | ||
| 136 | __asmeq("%1", "x1") | ||
| 137 | __asmeq("%2", "x2") | ||
| 138 | __asmeq("%3", "x3") | ||
| 139 | "smc #0\n" | ||
| 140 | : "+r" (function_id) | ||
| 141 | : "r" (arg0), "r" (arg1), "r" (arg2)); | ||
| 142 | |||
| 143 | return function_id; | ||
| 144 | } | ||
| 145 | |||
| 146 | static int psci_get_version(void) | 115 | static int psci_get_version(void) |
| 147 | { | 116 | { |
| 148 | int err; | 117 | int err; |
diff --git a/arch/arm64/kernel/signal32.c b/arch/arm64/kernel/signal32.c index c20a300e2213..d26fcd4cd6e6 100644 --- a/arch/arm64/kernel/signal32.c +++ b/arch/arm64/kernel/signal32.c | |||
| @@ -154,8 +154,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, const siginfo_t *from) | |||
| 154 | case __SI_TIMER: | 154 | case __SI_TIMER: |
| 155 | err |= __put_user(from->si_tid, &to->si_tid); | 155 | err |= __put_user(from->si_tid, &to->si_tid); |
| 156 | err |= __put_user(from->si_overrun, &to->si_overrun); | 156 | err |= __put_user(from->si_overrun, &to->si_overrun); |
| 157 | err |= __put_user((compat_uptr_t)(unsigned long)from->si_ptr, | 157 | err |= __put_user(from->si_int, &to->si_int); |
| 158 | &to->si_ptr); | ||
| 159 | break; | 158 | break; |
| 160 | case __SI_POLL: | 159 | case __SI_POLL: |
| 161 | err |= __put_user(from->si_band, &to->si_band); | 160 | err |= __put_user(from->si_band, &to->si_band); |
| @@ -184,7 +183,7 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, const siginfo_t *from) | |||
| 184 | case __SI_MESGQ: /* But this is */ | 183 | case __SI_MESGQ: /* But this is */ |
| 185 | err |= __put_user(from->si_pid, &to->si_pid); | 184 | err |= __put_user(from->si_pid, &to->si_pid); |
| 186 | err |= __put_user(from->si_uid, &to->si_uid); | 185 | err |= __put_user(from->si_uid, &to->si_uid); |
| 187 | err |= __put_user((compat_uptr_t)(unsigned long)from->si_ptr, &to->si_ptr); | 186 | err |= __put_user(from->si_int, &to->si_int); |
| 188 | break; | 187 | break; |
| 189 | case __SI_SYS: | 188 | case __SI_SYS: |
| 190 | err |= __put_user((compat_uptr_t)(unsigned long) | 189 | err |= __put_user((compat_uptr_t)(unsigned long) |
diff --git a/arch/arm64/kernel/vdso/gettimeofday.S b/arch/arm64/kernel/vdso/gettimeofday.S index fe652ffd34c2..efa79e8d4196 100644 --- a/arch/arm64/kernel/vdso/gettimeofday.S +++ b/arch/arm64/kernel/vdso/gettimeofday.S | |||
| @@ -174,8 +174,6 @@ ENDPROC(__kernel_clock_gettime) | |||
| 174 | /* int __kernel_clock_getres(clockid_t clock_id, struct timespec *res); */ | 174 | /* int __kernel_clock_getres(clockid_t clock_id, struct timespec *res); */ |
| 175 | ENTRY(__kernel_clock_getres) | 175 | ENTRY(__kernel_clock_getres) |
| 176 | .cfi_startproc | 176 | .cfi_startproc |
| 177 | cbz w1, 3f | ||
| 178 | |||
| 179 | cmp w0, #CLOCK_REALTIME | 177 | cmp w0, #CLOCK_REALTIME |
| 180 | ccmp w0, #CLOCK_MONOTONIC, #0x4, ne | 178 | ccmp w0, #CLOCK_MONOTONIC, #0x4, ne |
| 181 | b.ne 1f | 179 | b.ne 1f |
| @@ -188,6 +186,7 @@ ENTRY(__kernel_clock_getres) | |||
| 188 | b.ne 4f | 186 | b.ne 4f |
| 189 | ldr x2, 6f | 187 | ldr x2, 6f |
| 190 | 2: | 188 | 2: |
| 189 | cbz w1, 3f | ||
| 191 | stp xzr, x2, [x1] | 190 | stp xzr, x2, [x1] |
| 192 | 191 | ||
| 193 | 3: /* res == NULL. */ | 192 | 3: /* res == NULL. */ |
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index 0a24b9b8c698..58e0c2bdde04 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c | |||
| @@ -348,8 +348,6 @@ static struct dma_map_ops swiotlb_dma_ops = { | |||
| 348 | .mapping_error = swiotlb_dma_mapping_error, | 348 | .mapping_error = swiotlb_dma_mapping_error, |
| 349 | }; | 349 | }; |
| 350 | 350 | ||
| 351 | extern int swiotlb_late_init_with_default_size(size_t default_size); | ||
| 352 | |||
| 353 | static int __init atomic_pool_init(void) | 351 | static int __init atomic_pool_init(void) |
| 354 | { | 352 | { |
| 355 | pgprot_t prot = __pgprot(PROT_NORMAL_NC); | 353 | pgprot_t prot = __pgprot(PROT_NORMAL_NC); |
| @@ -411,21 +409,13 @@ out: | |||
| 411 | return -ENOMEM; | 409 | return -ENOMEM; |
| 412 | } | 410 | } |
| 413 | 411 | ||
| 414 | static int __init swiotlb_late_init(void) | 412 | static int __init arm64_dma_init(void) |
| 415 | { | 413 | { |
| 416 | size_t swiotlb_size = min(SZ_64M, MAX_ORDER_NR_PAGES << PAGE_SHIFT); | 414 | int ret; |
| 417 | 415 | ||
| 418 | dma_ops = &swiotlb_dma_ops; | 416 | dma_ops = &swiotlb_dma_ops; |
| 419 | 417 | ||
| 420 | return swiotlb_late_init_with_default_size(swiotlb_size); | 418 | ret = atomic_pool_init(); |
| 421 | } | ||
| 422 | |||
| 423 | static int __init arm64_dma_init(void) | ||
| 424 | { | ||
| 425 | int ret = 0; | ||
| 426 | |||
| 427 | ret |= swiotlb_late_init(); | ||
| 428 | ret |= atomic_pool_init(); | ||
| 429 | 419 | ||
| 430 | return ret; | 420 | return ret; |
| 431 | } | 421 | } |
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 71145f952070..ae85da6307bb 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c | |||
| @@ -33,6 +33,7 @@ | |||
| 33 | #include <linux/dma-mapping.h> | 33 | #include <linux/dma-mapping.h> |
| 34 | #include <linux/dma-contiguous.h> | 34 | #include <linux/dma-contiguous.h> |
| 35 | #include <linux/efi.h> | 35 | #include <linux/efi.h> |
| 36 | #include <linux/swiotlb.h> | ||
| 36 | 37 | ||
| 37 | #include <asm/fixmap.h> | 38 | #include <asm/fixmap.h> |
| 38 | #include <asm/memory.h> | 39 | #include <asm/memory.h> |
| @@ -45,6 +46,7 @@ | |||
| 45 | #include "mm.h" | 46 | #include "mm.h" |
| 46 | 47 | ||
| 47 | phys_addr_t memstart_addr __read_mostly = 0; | 48 | phys_addr_t memstart_addr __read_mostly = 0; |
| 49 | phys_addr_t arm64_dma_phys_limit __read_mostly; | ||
| 48 | 50 | ||
| 49 | #ifdef CONFIG_BLK_DEV_INITRD | 51 | #ifdef CONFIG_BLK_DEV_INITRD |
| 50 | static int __init early_initrd(char *p) | 52 | static int __init early_initrd(char *p) |
| @@ -85,7 +87,7 @@ static void __init zone_sizes_init(unsigned long min, unsigned long max) | |||
| 85 | 87 | ||
| 86 | /* 4GB maximum for 32-bit only capable devices */ | 88 | /* 4GB maximum for 32-bit only capable devices */ |
| 87 | if (IS_ENABLED(CONFIG_ZONE_DMA)) { | 89 | if (IS_ENABLED(CONFIG_ZONE_DMA)) { |
| 88 | max_dma = PFN_DOWN(max_zone_dma_phys()); | 90 | max_dma = PFN_DOWN(arm64_dma_phys_limit); |
| 89 | zone_size[ZONE_DMA] = max_dma - min; | 91 | zone_size[ZONE_DMA] = max_dma - min; |
| 90 | } | 92 | } |
| 91 | zone_size[ZONE_NORMAL] = max - max_dma; | 93 | zone_size[ZONE_NORMAL] = max - max_dma; |
| @@ -156,8 +158,6 @@ early_param("mem", early_mem); | |||
| 156 | 158 | ||
| 157 | void __init arm64_memblock_init(void) | 159 | void __init arm64_memblock_init(void) |
| 158 | { | 160 | { |
| 159 | phys_addr_t dma_phys_limit = 0; | ||
| 160 | |||
| 161 | memblock_enforce_memory_limit(memory_limit); | 161 | memblock_enforce_memory_limit(memory_limit); |
| 162 | 162 | ||
| 163 | /* | 163 | /* |
| @@ -174,8 +174,10 @@ void __init arm64_memblock_init(void) | |||
| 174 | 174 | ||
| 175 | /* 4GB maximum for 32-bit only capable devices */ | 175 | /* 4GB maximum for 32-bit only capable devices */ |
| 176 | if (IS_ENABLED(CONFIG_ZONE_DMA)) | 176 | if (IS_ENABLED(CONFIG_ZONE_DMA)) |
| 177 | dma_phys_limit = max_zone_dma_phys(); | 177 | arm64_dma_phys_limit = max_zone_dma_phys(); |
| 178 | dma_contiguous_reserve(dma_phys_limit); | 178 | else |
| 179 | arm64_dma_phys_limit = PHYS_MASK + 1; | ||
| 180 | dma_contiguous_reserve(arm64_dma_phys_limit); | ||
| 179 | 181 | ||
| 180 | memblock_allow_resize(); | 182 | memblock_allow_resize(); |
| 181 | memblock_dump_all(); | 183 | memblock_dump_all(); |
| @@ -276,6 +278,8 @@ static void __init free_unused_memmap(void) | |||
| 276 | */ | 278 | */ |
| 277 | void __init mem_init(void) | 279 | void __init mem_init(void) |
| 278 | { | 280 | { |
| 281 | swiotlb_init(1); | ||
| 282 | |||
| 279 | set_max_mapnr(pfn_to_page(max_pfn) - mem_map); | 283 | set_max_mapnr(pfn_to_page(max_pfn) - mem_map); |
| 280 | 284 | ||
| 281 | #ifndef CONFIG_SPARSEMEM_VMEMMAP | 285 | #ifndef CONFIG_SPARSEMEM_VMEMMAP |
diff --git a/arch/arm64/mm/pageattr.c b/arch/arm64/mm/pageattr.c index bb0ea94c4ba1..1d3ec3ddd84b 100644 --- a/arch/arm64/mm/pageattr.c +++ b/arch/arm64/mm/pageattr.c | |||
| @@ -51,7 +51,10 @@ static int change_memory_common(unsigned long addr, int numpages, | |||
| 51 | WARN_ON_ONCE(1); | 51 | WARN_ON_ONCE(1); |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | if (!is_module_address(start) || !is_module_address(end - 1)) | 54 | if (start < MODULES_VADDR || start >= MODULES_END) |
| 55 | return -EINVAL; | ||
| 56 | |||
| 57 | if (end < MODULES_VADDR || end >= MODULES_END) | ||
| 55 | return -EINVAL; | 58 | return -EINVAL; |
| 56 | 59 | ||
| 57 | data.set_mask = set_mask; | 60 | data.set_mask = set_mask; |
diff --git a/arch/frv/include/asm/pgtable.h b/arch/frv/include/asm/pgtable.h index 93bcf2abd1a1..07d7a7ef8bd5 100644 --- a/arch/frv/include/asm/pgtable.h +++ b/arch/frv/include/asm/pgtable.h | |||
| @@ -123,12 +123,14 @@ extern unsigned long empty_zero_page; | |||
| 123 | #define PGDIR_MASK (~(PGDIR_SIZE - 1)) | 123 | #define PGDIR_MASK (~(PGDIR_SIZE - 1)) |
| 124 | #define PTRS_PER_PGD 64 | 124 | #define PTRS_PER_PGD 64 |
| 125 | 125 | ||
| 126 | #define __PAGETABLE_PUD_FOLDED | ||
| 126 | #define PUD_SHIFT 26 | 127 | #define PUD_SHIFT 26 |
| 127 | #define PTRS_PER_PUD 1 | 128 | #define PTRS_PER_PUD 1 |
| 128 | #define PUD_SIZE (1UL << PUD_SHIFT) | 129 | #define PUD_SIZE (1UL << PUD_SHIFT) |
| 129 | #define PUD_MASK (~(PUD_SIZE - 1)) | 130 | #define PUD_MASK (~(PUD_SIZE - 1)) |
| 130 | #define PUE_SIZE 256 | 131 | #define PUE_SIZE 256 |
| 131 | 132 | ||
| 133 | #define __PAGETABLE_PMD_FOLDED | ||
| 132 | #define PMD_SHIFT 26 | 134 | #define PMD_SHIFT 26 |
| 133 | #define PMD_SIZE (1UL << PMD_SHIFT) | 135 | #define PMD_SIZE (1UL << PMD_SHIFT) |
| 134 | #define PMD_MASK (~(PMD_SIZE - 1)) | 136 | #define PMD_MASK (~(PMD_SIZE - 1)) |
diff --git a/arch/m32r/include/asm/pgtable-2level.h b/arch/m32r/include/asm/pgtable-2level.h index 8fd8ee70266a..421e6ba3a173 100644 --- a/arch/m32r/include/asm/pgtable-2level.h +++ b/arch/m32r/include/asm/pgtable-2level.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | * the M32R is two-level, so we don't really have any | 13 | * the M32R is two-level, so we don't really have any |
| 14 | * PMD directory physically. | 14 | * PMD directory physically. |
| 15 | */ | 15 | */ |
| 16 | #define __PAGETABLE_PMD_FOLDED | ||
| 16 | #define PMD_SHIFT 22 | 17 | #define PMD_SHIFT 22 |
| 17 | #define PTRS_PER_PMD 1 | 18 | #define PTRS_PER_PMD 1 |
| 18 | 19 | ||
diff --git a/arch/m68k/include/asm/pgtable_mm.h b/arch/m68k/include/asm/pgtable_mm.h index 28a145bfbb71..35ed4a9981ae 100644 --- a/arch/m68k/include/asm/pgtable_mm.h +++ b/arch/m68k/include/asm/pgtable_mm.h | |||
| @@ -54,10 +54,12 @@ | |||
| 54 | */ | 54 | */ |
| 55 | #ifdef CONFIG_SUN3 | 55 | #ifdef CONFIG_SUN3 |
| 56 | #define PTRS_PER_PTE 16 | 56 | #define PTRS_PER_PTE 16 |
| 57 | #define __PAGETABLE_PMD_FOLDED | ||
| 57 | #define PTRS_PER_PMD 1 | 58 | #define PTRS_PER_PMD 1 |
| 58 | #define PTRS_PER_PGD 2048 | 59 | #define PTRS_PER_PGD 2048 |
| 59 | #elif defined(CONFIG_COLDFIRE) | 60 | #elif defined(CONFIG_COLDFIRE) |
| 60 | #define PTRS_PER_PTE 512 | 61 | #define PTRS_PER_PTE 512 |
| 62 | #define __PAGETABLE_PMD_FOLDED | ||
| 61 | #define PTRS_PER_PMD 1 | 63 | #define PTRS_PER_PMD 1 |
| 62 | #define PTRS_PER_PGD 1024 | 64 | #define PTRS_PER_PGD 1024 |
| 63 | #else | 65 | #else |
diff --git a/arch/metag/include/asm/processor.h b/arch/metag/include/asm/processor.h index 881071c07942..13272fd5a5ba 100644 --- a/arch/metag/include/asm/processor.h +++ b/arch/metag/include/asm/processor.h | |||
| @@ -149,8 +149,8 @@ extern void exit_thread(void); | |||
| 149 | 149 | ||
| 150 | unsigned long get_wchan(struct task_struct *p); | 150 | unsigned long get_wchan(struct task_struct *p); |
| 151 | 151 | ||
| 152 | #define KSTK_EIP(tsk) ((tsk)->thread.kernel_context->CurrPC) | 152 | #define KSTK_EIP(tsk) (task_pt_regs(tsk)->ctx.CurrPC) |
| 153 | #define KSTK_ESP(tsk) ((tsk)->thread.kernel_context->AX[0].U0) | 153 | #define KSTK_ESP(tsk) (task_pt_regs(tsk)->ctx.AX[0].U0) |
| 154 | 154 | ||
| 155 | #define user_stack_pointer(regs) ((regs)->ctx.AX[0].U0) | 155 | #define user_stack_pointer(regs) ((regs)->ctx.AX[0].U0) |
| 156 | 156 | ||
diff --git a/arch/mips/kvm/tlb.c b/arch/mips/kvm/tlb.c index bbcd82242059..b6beb0e07b1b 100644 --- a/arch/mips/kvm/tlb.c +++ b/arch/mips/kvm/tlb.c | |||
| @@ -216,6 +216,7 @@ int kvm_mips_host_tlb_write(struct kvm_vcpu *vcpu, unsigned long entryhi, | |||
| 216 | if (idx > current_cpu_data.tlbsize) { | 216 | if (idx > current_cpu_data.tlbsize) { |
| 217 | kvm_err("%s: Invalid Index: %d\n", __func__, idx); | 217 | kvm_err("%s: Invalid Index: %d\n", __func__, idx); |
| 218 | kvm_mips_dump_host_tlbs(); | 218 | kvm_mips_dump_host_tlbs(); |
| 219 | local_irq_restore(flags); | ||
| 219 | return -1; | 220 | return -1; |
| 220 | } | 221 | } |
| 221 | 222 | ||
diff --git a/arch/mips/kvm/trace.h b/arch/mips/kvm/trace.h index c1388d40663b..bd6437f67dc0 100644 --- a/arch/mips/kvm/trace.h +++ b/arch/mips/kvm/trace.h | |||
| @@ -24,18 +24,18 @@ TRACE_EVENT(kvm_exit, | |||
| 24 | TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason), | 24 | TP_PROTO(struct kvm_vcpu *vcpu, unsigned int reason), |
| 25 | TP_ARGS(vcpu, reason), | 25 | TP_ARGS(vcpu, reason), |
| 26 | TP_STRUCT__entry( | 26 | TP_STRUCT__entry( |
| 27 | __field(struct kvm_vcpu *, vcpu) | 27 | __field(unsigned long, pc) |
| 28 | __field(unsigned int, reason) | 28 | __field(unsigned int, reason) |
| 29 | ), | 29 | ), |
| 30 | 30 | ||
| 31 | TP_fast_assign( | 31 | TP_fast_assign( |
| 32 | __entry->vcpu = vcpu; | 32 | __entry->pc = vcpu->arch.pc; |
| 33 | __entry->reason = reason; | 33 | __entry->reason = reason; |
| 34 | ), | 34 | ), |
| 35 | 35 | ||
| 36 | TP_printk("[%s]PC: 0x%08lx", | 36 | TP_printk("[%s]PC: 0x%08lx", |
| 37 | kvm_mips_exit_types_str[__entry->reason], | 37 | kvm_mips_exit_types_str[__entry->reason], |
| 38 | __entry->vcpu->arch.pc) | 38 | __entry->pc) |
| 39 | ); | 39 | ); |
| 40 | 40 | ||
| 41 | #endif /* _TRACE_KVM_H */ | 41 | #endif /* _TRACE_KVM_H */ |
diff --git a/arch/mn10300/include/asm/pgtable.h b/arch/mn10300/include/asm/pgtable.h index afab728ab65e..96d3f9deb59c 100644 --- a/arch/mn10300/include/asm/pgtable.h +++ b/arch/mn10300/include/asm/pgtable.h | |||
| @@ -56,7 +56,9 @@ extern void paging_init(void); | |||
| 56 | #define PGDIR_SHIFT 22 | 56 | #define PGDIR_SHIFT 22 |
| 57 | #define PTRS_PER_PGD 1024 | 57 | #define PTRS_PER_PGD 1024 |
| 58 | #define PTRS_PER_PUD 1 /* we don't really have any PUD physically */ | 58 | #define PTRS_PER_PUD 1 /* we don't really have any PUD physically */ |
| 59 | #define __PAGETABLE_PUD_FOLDED | ||
| 59 | #define PTRS_PER_PMD 1 /* we don't really have any PMD physically */ | 60 | #define PTRS_PER_PMD 1 /* we don't really have any PMD physically */ |
| 61 | #define __PAGETABLE_PMD_FOLDED | ||
| 60 | #define PTRS_PER_PTE 1024 | 62 | #define PTRS_PER_PTE 1024 |
| 61 | 63 | ||
| 62 | #define PGD_SIZE PAGE_SIZE | 64 | #define PGD_SIZE PAGE_SIZE |
diff --git a/arch/parisc/include/asm/pgtable.h b/arch/parisc/include/asm/pgtable.h index 8c966b2270aa..15207b9362bf 100644 --- a/arch/parisc/include/asm/pgtable.h +++ b/arch/parisc/include/asm/pgtable.h | |||
| @@ -96,6 +96,7 @@ extern void purge_tlb_entries(struct mm_struct *, unsigned long); | |||
| 96 | #if PT_NLEVELS == 3 | 96 | #if PT_NLEVELS == 3 |
| 97 | #define BITS_PER_PMD (PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY) | 97 | #define BITS_PER_PMD (PAGE_SHIFT + PMD_ORDER - BITS_PER_PMD_ENTRY) |
| 98 | #else | 98 | #else |
| 99 | #define __PAGETABLE_PMD_FOLDED | ||
| 99 | #define BITS_PER_PMD 0 | 100 | #define BITS_PER_PMD 0 |
| 100 | #endif | 101 | #endif |
| 101 | #define PTRS_PER_PMD (1UL << BITS_PER_PMD) | 102 | #define PTRS_PER_PMD (1UL << BITS_PER_PMD) |
diff --git a/arch/powerpc/include/asm/iommu.h b/arch/powerpc/include/asm/iommu.h index 9cfa3706a1b8..f1ea5972f6ec 100644 --- a/arch/powerpc/include/asm/iommu.h +++ b/arch/powerpc/include/asm/iommu.h | |||
| @@ -113,6 +113,7 @@ extern void iommu_register_group(struct iommu_table *tbl, | |||
| 113 | int pci_domain_number, unsigned long pe_num); | 113 | int pci_domain_number, unsigned long pe_num); |
| 114 | extern int iommu_add_device(struct device *dev); | 114 | extern int iommu_add_device(struct device *dev); |
| 115 | extern void iommu_del_device(struct device *dev); | 115 | extern void iommu_del_device(struct device *dev); |
| 116 | extern int __init tce_iommu_bus_notifier_init(void); | ||
| 116 | #else | 117 | #else |
| 117 | static inline void iommu_register_group(struct iommu_table *tbl, | 118 | static inline void iommu_register_group(struct iommu_table *tbl, |
| 118 | int pci_domain_number, | 119 | int pci_domain_number, |
| @@ -128,6 +129,11 @@ static inline int iommu_add_device(struct device *dev) | |||
| 128 | static inline void iommu_del_device(struct device *dev) | 129 | static inline void iommu_del_device(struct device *dev) |
| 129 | { | 130 | { |
| 130 | } | 131 | } |
| 132 | |||
| 133 | static inline int __init tce_iommu_bus_notifier_init(void) | ||
| 134 | { | ||
| 135 | return 0; | ||
| 136 | } | ||
| 131 | #endif /* !CONFIG_IOMMU_API */ | 137 | #endif /* !CONFIG_IOMMU_API */ |
| 132 | 138 | ||
| 133 | static inline void set_iommu_table_base_and_group(struct device *dev, | 139 | static inline void set_iommu_table_base_and_group(struct device *dev, |
diff --git a/arch/powerpc/include/asm/irq_work.h b/arch/powerpc/include/asm/irq_work.h new file mode 100644 index 000000000000..744fd54de374 --- /dev/null +++ b/arch/powerpc/include/asm/irq_work.h | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | #ifndef _ASM_POWERPC_IRQ_WORK_H | ||
| 2 | #define _ASM_POWERPC_IRQ_WORK_H | ||
| 3 | |||
| 4 | static inline bool arch_irq_work_has_interrupt(void) | ||
| 5 | { | ||
| 6 | return true; | ||
| 7 | } | ||
| 8 | |||
| 9 | #endif /* _ASM_POWERPC_IRQ_WORK_H */ | ||
diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c index 5d3968c4d799..b054f33ab1fb 100644 --- a/arch/powerpc/kernel/iommu.c +++ b/arch/powerpc/kernel/iommu.c | |||
| @@ -1175,4 +1175,30 @@ void iommu_del_device(struct device *dev) | |||
| 1175 | } | 1175 | } |
| 1176 | EXPORT_SYMBOL_GPL(iommu_del_device); | 1176 | EXPORT_SYMBOL_GPL(iommu_del_device); |
| 1177 | 1177 | ||
| 1178 | static int tce_iommu_bus_notifier(struct notifier_block *nb, | ||
| 1179 | unsigned long action, void *data) | ||
| 1180 | { | ||
| 1181 | struct device *dev = data; | ||
| 1182 | |||
| 1183 | switch (action) { | ||
| 1184 | case BUS_NOTIFY_ADD_DEVICE: | ||
| 1185 | return iommu_add_device(dev); | ||
| 1186 | case BUS_NOTIFY_DEL_DEVICE: | ||
| 1187 | if (dev->iommu_group) | ||
| 1188 | iommu_del_device(dev); | ||
| 1189 | return 0; | ||
| 1190 | default: | ||
| 1191 | return 0; | ||
| 1192 | } | ||
| 1193 | } | ||
| 1194 | |||
| 1195 | static struct notifier_block tce_iommu_bus_nb = { | ||
| 1196 | .notifier_call = tce_iommu_bus_notifier, | ||
| 1197 | }; | ||
| 1198 | |||
| 1199 | int __init tce_iommu_bus_notifier_init(void) | ||
| 1200 | { | ||
| 1201 | bus_register_notifier(&pci_bus_type, &tce_iommu_bus_nb); | ||
| 1202 | return 0; | ||
| 1203 | } | ||
| 1178 | #endif /* CONFIG_IOMMU_API */ | 1204 | #endif /* CONFIG_IOMMU_API */ |
diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c index 6e19afa35a15..ec9ec2058d2d 100644 --- a/arch/powerpc/kernel/smp.c +++ b/arch/powerpc/kernel/smp.c | |||
| @@ -541,8 +541,8 @@ int __cpu_up(unsigned int cpu, struct task_struct *tidle) | |||
| 541 | if (smp_ops->give_timebase) | 541 | if (smp_ops->give_timebase) |
| 542 | smp_ops->give_timebase(); | 542 | smp_ops->give_timebase(); |
| 543 | 543 | ||
| 544 | /* Wait until cpu puts itself in the online map */ | 544 | /* Wait until cpu puts itself in the online & active maps */ |
| 545 | while (!cpu_online(cpu)) | 545 | while (!cpu_online(cpu) || !cpu_active(cpu)) |
| 546 | cpu_relax(); | 546 | cpu_relax(); |
| 547 | 547 | ||
| 548 | return 0; | 548 | return 0; |
diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c index e69142f4af08..54323d6b5166 100644 --- a/arch/powerpc/platforms/powernv/pci.c +++ b/arch/powerpc/platforms/powernv/pci.c | |||
| @@ -836,30 +836,4 @@ void __init pnv_pci_init(void) | |||
| 836 | #endif | 836 | #endif |
| 837 | } | 837 | } |
| 838 | 838 | ||
| 839 | static int tce_iommu_bus_notifier(struct notifier_block *nb, | ||
| 840 | unsigned long action, void *data) | ||
| 841 | { | ||
| 842 | struct device *dev = data; | ||
| 843 | |||
| 844 | switch (action) { | ||
| 845 | case BUS_NOTIFY_ADD_DEVICE: | ||
| 846 | return iommu_add_device(dev); | ||
| 847 | case BUS_NOTIFY_DEL_DEVICE: | ||
| 848 | if (dev->iommu_group) | ||
| 849 | iommu_del_device(dev); | ||
| 850 | return 0; | ||
| 851 | default: | ||
| 852 | return 0; | ||
| 853 | } | ||
| 854 | } | ||
| 855 | |||
| 856 | static struct notifier_block tce_iommu_bus_nb = { | ||
| 857 | .notifier_call = tce_iommu_bus_notifier, | ||
| 858 | }; | ||
| 859 | |||
| 860 | static int __init tce_iommu_bus_notifier_init(void) | ||
| 861 | { | ||
| 862 | bus_register_notifier(&pci_bus_type, &tce_iommu_bus_nb); | ||
| 863 | return 0; | ||
| 864 | } | ||
| 865 | machine_subsys_initcall_sync(powernv, tce_iommu_bus_notifier_init); | 839 | machine_subsys_initcall_sync(powernv, tce_iommu_bus_notifier_init); |
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c index 1d3d52dc3ff3..7803a19adb31 100644 --- a/arch/powerpc/platforms/pseries/iommu.c +++ b/arch/powerpc/platforms/pseries/iommu.c | |||
| @@ -1340,3 +1340,5 @@ static int __init disable_multitce(char *str) | |||
| 1340 | } | 1340 | } |
| 1341 | 1341 | ||
| 1342 | __setup("multitce=", disable_multitce); | 1342 | __setup("multitce=", disable_multitce); |
| 1343 | |||
| 1344 | machine_subsys_initcall_sync(pseries, tce_iommu_bus_notifier_init); | ||
diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h index fbb5ee3ae57c..e08ec38f8c6e 100644 --- a/arch/s390/include/asm/pgtable.h +++ b/arch/s390/include/asm/pgtable.h | |||
| @@ -91,7 +91,9 @@ extern unsigned long zero_page_mask; | |||
| 91 | */ | 91 | */ |
| 92 | #define PTRS_PER_PTE 256 | 92 | #define PTRS_PER_PTE 256 |
| 93 | #ifndef CONFIG_64BIT | 93 | #ifndef CONFIG_64BIT |
| 94 | #define __PAGETABLE_PUD_FOLDED | ||
| 94 | #define PTRS_PER_PMD 1 | 95 | #define PTRS_PER_PMD 1 |
| 96 | #define __PAGETABLE_PMD_FOLDED | ||
| 95 | #define PTRS_PER_PUD 1 | 97 | #define PTRS_PER_PUD 1 |
| 96 | #else /* CONFIG_64BIT */ | 98 | #else /* CONFIG_64BIT */ |
| 97 | #define PTRS_PER_PMD 2048 | 99 | #define PTRS_PER_PMD 2048 |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index c2fb8a87dccb..b7d31ca55187 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
| @@ -499,6 +499,7 @@ config X86_INTEL_QUARK | |||
| 499 | depends on X86_IO_APIC | 499 | depends on X86_IO_APIC |
| 500 | select IOSF_MBI | 500 | select IOSF_MBI |
| 501 | select INTEL_IMR | 501 | select INTEL_IMR |
| 502 | select COMMON_CLK | ||
| 502 | ---help--- | 503 | ---help--- |
| 503 | Select to include support for Quark X1000 SoC. | 504 | Select to include support for Quark X1000 SoC. |
| 504 | Say Y here if you have a Quark based system such as the Arduino | 505 | Say Y here if you have a Quark based system such as the Arduino |
diff --git a/arch/x86/include/asm/xsave.h b/arch/x86/include/asm/xsave.h index 5fa9770035dc..c9a6d68b8d62 100644 --- a/arch/x86/include/asm/xsave.h +++ b/arch/x86/include/asm/xsave.h | |||
| @@ -82,18 +82,15 @@ static inline int xsave_state_booting(struct xsave_struct *fx, u64 mask) | |||
| 82 | if (boot_cpu_has(X86_FEATURE_XSAVES)) | 82 | if (boot_cpu_has(X86_FEATURE_XSAVES)) |
| 83 | asm volatile("1:"XSAVES"\n\t" | 83 | asm volatile("1:"XSAVES"\n\t" |
| 84 | "2:\n\t" | 84 | "2:\n\t" |
| 85 | : : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | 85 | xstate_fault |
| 86 | : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | ||
| 86 | : "memory"); | 87 | : "memory"); |
| 87 | else | 88 | else |
| 88 | asm volatile("1:"XSAVE"\n\t" | 89 | asm volatile("1:"XSAVE"\n\t" |
| 89 | "2:\n\t" | 90 | "2:\n\t" |
| 90 | : : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | 91 | xstate_fault |
| 92 | : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | ||
| 91 | : "memory"); | 93 | : "memory"); |
| 92 | |||
| 93 | asm volatile(xstate_fault | ||
| 94 | : "0" (0) | ||
| 95 | : "memory"); | ||
| 96 | |||
| 97 | return err; | 94 | return err; |
| 98 | } | 95 | } |
| 99 | 96 | ||
| @@ -112,18 +109,15 @@ static inline int xrstor_state_booting(struct xsave_struct *fx, u64 mask) | |||
| 112 | if (boot_cpu_has(X86_FEATURE_XSAVES)) | 109 | if (boot_cpu_has(X86_FEATURE_XSAVES)) |
| 113 | asm volatile("1:"XRSTORS"\n\t" | 110 | asm volatile("1:"XRSTORS"\n\t" |
| 114 | "2:\n\t" | 111 | "2:\n\t" |
| 115 | : : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | 112 | xstate_fault |
| 113 | : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | ||
| 116 | : "memory"); | 114 | : "memory"); |
| 117 | else | 115 | else |
| 118 | asm volatile("1:"XRSTOR"\n\t" | 116 | asm volatile("1:"XRSTOR"\n\t" |
| 119 | "2:\n\t" | 117 | "2:\n\t" |
| 120 | : : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | 118 | xstate_fault |
| 119 | : "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | ||
| 121 | : "memory"); | 120 | : "memory"); |
| 122 | |||
| 123 | asm volatile(xstate_fault | ||
| 124 | : "0" (0) | ||
| 125 | : "memory"); | ||
| 126 | |||
| 127 | return err; | 121 | return err; |
| 128 | } | 122 | } |
| 129 | 123 | ||
| @@ -149,9 +143,9 @@ static inline int xsave_state(struct xsave_struct *fx, u64 mask) | |||
| 149 | */ | 143 | */ |
| 150 | alternative_input_2( | 144 | alternative_input_2( |
| 151 | "1:"XSAVE, | 145 | "1:"XSAVE, |
| 152 | "1:"XSAVEOPT, | 146 | XSAVEOPT, |
| 153 | X86_FEATURE_XSAVEOPT, | 147 | X86_FEATURE_XSAVEOPT, |
| 154 | "1:"XSAVES, | 148 | XSAVES, |
| 155 | X86_FEATURE_XSAVES, | 149 | X86_FEATURE_XSAVES, |
| 156 | [fx] "D" (fx), "a" (lmask), "d" (hmask) : | 150 | [fx] "D" (fx), "a" (lmask), "d" (hmask) : |
| 157 | "memory"); | 151 | "memory"); |
| @@ -178,7 +172,7 @@ static inline int xrstor_state(struct xsave_struct *fx, u64 mask) | |||
| 178 | */ | 172 | */ |
| 179 | alternative_input( | 173 | alternative_input( |
| 180 | "1: " XRSTOR, | 174 | "1: " XRSTOR, |
| 181 | "1: " XRSTORS, | 175 | XRSTORS, |
| 182 | X86_FEATURE_XSAVES, | 176 | X86_FEATURE_XSAVES, |
| 183 | "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) | 177 | "D" (fx), "m" (*fx), "a" (lmask), "d" (hmask) |
| 184 | : "memory"); | 178 | : "memory"); |
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index b5c8ff5e9dfc..2346c95c6ab1 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c | |||
| @@ -1396,6 +1396,12 @@ void cpu_init(void) | |||
| 1396 | 1396 | ||
| 1397 | wait_for_master_cpu(cpu); | 1397 | wait_for_master_cpu(cpu); |
| 1398 | 1398 | ||
| 1399 | /* | ||
| 1400 | * Initialize the CR4 shadow before doing anything that could | ||
| 1401 | * try to read it. | ||
| 1402 | */ | ||
| 1403 | cr4_init_shadow(); | ||
| 1404 | |||
| 1399 | show_ucode_info_early(); | 1405 | show_ucode_info_early(); |
| 1400 | 1406 | ||
| 1401 | printk(KERN_INFO "Initializing CPU#%d\n", cpu); | 1407 | printk(KERN_INFO "Initializing CPU#%d\n", cpu); |
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index 94d7dcb12145..50163fa9034f 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c | |||
| @@ -565,8 +565,8 @@ static const struct _tlb_table intel_tlb_table[] = { | |||
| 565 | { 0xb2, TLB_INST_4K, 64, " TLB_INST 4KByte pages, 4-way set associative" }, | 565 | { 0xb2, TLB_INST_4K, 64, " TLB_INST 4KByte pages, 4-way set associative" }, |
| 566 | { 0xb3, TLB_DATA_4K, 128, " TLB_DATA 4 KByte pages, 4-way set associative" }, | 566 | { 0xb3, TLB_DATA_4K, 128, " TLB_DATA 4 KByte pages, 4-way set associative" }, |
| 567 | { 0xb4, TLB_DATA_4K, 256, " TLB_DATA 4 KByte pages, 4-way associative" }, | 567 | { 0xb4, TLB_DATA_4K, 256, " TLB_DATA 4 KByte pages, 4-way associative" }, |
| 568 | { 0xb5, TLB_INST_4K, 64, " TLB_INST 4 KByte pages, 8-way set ssociative" }, | 568 | { 0xb5, TLB_INST_4K, 64, " TLB_INST 4 KByte pages, 8-way set associative" }, |
| 569 | { 0xb6, TLB_INST_4K, 128, " TLB_INST 4 KByte pages, 8-way set ssociative" }, | 569 | { 0xb6, TLB_INST_4K, 128, " TLB_INST 4 KByte pages, 8-way set associative" }, |
| 570 | { 0xba, TLB_DATA_4K, 64, " TLB_DATA 4 KByte pages, 4-way associative" }, | 570 | { 0xba, TLB_DATA_4K, 64, " TLB_DATA 4 KByte pages, 4-way associative" }, |
| 571 | { 0xc0, TLB_DATA_4K_4M, 8, " TLB_DATA 4 KByte and 4 MByte pages, 4-way associative" }, | 571 | { 0xc0, TLB_DATA_4K_4M, 8, " TLB_DATA 4 KByte and 4 MByte pages, 4-way associative" }, |
| 572 | { 0xc1, STLB_4K_2M, 1024, " STLB 4 KByte and 2 MByte pages, 8-way associative" }, | 572 | { 0xc1, STLB_4K_2M, 1024, " STLB 4 KByte and 2 MByte pages, 8-way associative" }, |
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index 000d4199b03e..31e2d5bf3e38 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S | |||
| @@ -982,6 +982,9 @@ ENTRY(xen_hypervisor_callback) | |||
| 982 | ENTRY(xen_do_upcall) | 982 | ENTRY(xen_do_upcall) |
| 983 | 1: mov %esp, %eax | 983 | 1: mov %esp, %eax |
| 984 | call xen_evtchn_do_upcall | 984 | call xen_evtchn_do_upcall |
| 985 | #ifndef CONFIG_PREEMPT | ||
| 986 | call xen_maybe_preempt_hcall | ||
| 987 | #endif | ||
| 985 | jmp ret_from_intr | 988 | jmp ret_from_intr |
| 986 | CFI_ENDPROC | 989 | CFI_ENDPROC |
| 987 | ENDPROC(xen_hypervisor_callback) | 990 | ENDPROC(xen_hypervisor_callback) |
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index db13655c3a2a..1d74d161687c 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
| @@ -269,11 +269,14 @@ ENTRY(ret_from_fork) | |||
| 269 | testl $3, CS-ARGOFFSET(%rsp) # from kernel_thread? | 269 | testl $3, CS-ARGOFFSET(%rsp) # from kernel_thread? |
| 270 | jz 1f | 270 | jz 1f |
| 271 | 271 | ||
| 272 | testl $_TIF_IA32, TI_flags(%rcx) # 32-bit compat task needs IRET | 272 | /* |
| 273 | jnz int_ret_from_sys_call | 273 | * By the time we get here, we have no idea whether our pt_regs, |
| 274 | 274 | * ti flags, and ti status came from the 64-bit SYSCALL fast path, | |
| 275 | RESTORE_TOP_OF_STACK %rdi, -ARGOFFSET | 275 | * the slow path, or one of the ia32entry paths. |
| 276 | jmp ret_from_sys_call # go to the SYSRET fastpath | 276 | * Use int_ret_from_sys_call to return, since it can safely handle |
| 277 | * all of the above. | ||
| 278 | */ | ||
| 279 | jmp int_ret_from_sys_call | ||
| 277 | 280 | ||
| 278 | 1: | 281 | 1: |
| 279 | subq $REST_SKIP, %rsp # leave space for volatiles | 282 | subq $REST_SKIP, %rsp # leave space for volatiles |
| @@ -1208,6 +1211,9 @@ ENTRY(xen_do_hypervisor_callback) # do_hypervisor_callback(struct *pt_regs) | |||
| 1208 | popq %rsp | 1211 | popq %rsp |
| 1209 | CFI_DEF_CFA_REGISTER rsp | 1212 | CFI_DEF_CFA_REGISTER rsp |
| 1210 | decl PER_CPU_VAR(irq_count) | 1213 | decl PER_CPU_VAR(irq_count) |
| 1214 | #ifndef CONFIG_PREEMPT | ||
| 1215 | call xen_maybe_preempt_hcall | ||
| 1216 | #endif | ||
| 1211 | jmp error_exit | 1217 | jmp error_exit |
| 1212 | CFI_ENDPROC | 1218 | CFI_ENDPROC |
| 1213 | END(xen_do_hypervisor_callback) | 1219 | END(xen_do_hypervisor_callback) |
diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c index 6a1146ea4d4d..4e3d5a9621fe 100644 --- a/arch/x86/kernel/kprobes/core.c +++ b/arch/x86/kernel/kprobes/core.c | |||
| @@ -223,27 +223,48 @@ static unsigned long | |||
| 223 | __recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr) | 223 | __recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr) |
| 224 | { | 224 | { |
| 225 | struct kprobe *kp; | 225 | struct kprobe *kp; |
| 226 | unsigned long faddr; | ||
| 226 | 227 | ||
| 227 | kp = get_kprobe((void *)addr); | 228 | kp = get_kprobe((void *)addr); |
| 228 | /* There is no probe, return original address */ | 229 | faddr = ftrace_location(addr); |
| 229 | if (!kp) | 230 | /* |
| 231 | * Addresses inside the ftrace location are refused by | ||
| 232 | * arch_check_ftrace_location(). Something went terribly wrong | ||
| 233 | * if such an address is checked here. | ||
| 234 | */ | ||
| 235 | if (WARN_ON(faddr && faddr != addr)) | ||
| 236 | return 0UL; | ||
| 237 | /* | ||
| 238 | * Use the current code if it is not modified by Kprobe | ||
| 239 | * and it cannot be modified by ftrace. | ||
| 240 | */ | ||
| 241 | if (!kp && !faddr) | ||
| 230 | return addr; | 242 | return addr; |
| 231 | 243 | ||
| 232 | /* | 244 | /* |
| 233 | * Basically, kp->ainsn.insn has an original instruction. | 245 | * Basically, kp->ainsn.insn has an original instruction. |
| 234 | * However, RIP-relative instruction can not do single-stepping | 246 | * However, RIP-relative instruction can not do single-stepping |
| 235 | * at different place, __copy_instruction() tweaks the displacement of | 247 | * at different place, __copy_instruction() tweaks the displacement of |
| 236 | * that instruction. In that case, we can't recover the instruction | 248 | * that instruction. In that case, we can't recover the instruction |
| 237 | * from the kp->ainsn.insn. | 249 | * from the kp->ainsn.insn. |
| 238 | * | 250 | * |
| 239 | * On the other hand, kp->opcode has a copy of the first byte of | 251 | * On the other hand, in case on normal Kprobe, kp->opcode has a copy |
| 240 | * the probed instruction, which is overwritten by int3. And | 252 | * of the first byte of the probed instruction, which is overwritten |
| 241 | * the instruction at kp->addr is not modified by kprobes except | 253 | * by int3. And the instruction at kp->addr is not modified by kprobes |
| 242 | * for the first byte, we can recover the original instruction | 254 | * except for the first byte, we can recover the original instruction |
| 243 | * from it and kp->opcode. | 255 | * from it and kp->opcode. |
| 256 | * | ||
| 257 | * In case of Kprobes using ftrace, we do not have a copy of | ||
| 258 | * the original instruction. In fact, the ftrace location might | ||
| 259 | * be modified at anytime and even could be in an inconsistent state. | ||
| 260 | * Fortunately, we know that the original code is the ideal 5-byte | ||
| 261 | * long NOP. | ||
| 244 | */ | 262 | */ |
| 245 | memcpy(buf, kp->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t)); | 263 | memcpy(buf, (void *)addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t)); |
| 246 | buf[0] = kp->opcode; | 264 | if (faddr) |
| 265 | memcpy(buf, ideal_nops[NOP_ATOMIC5], 5); | ||
| 266 | else | ||
| 267 | buf[0] = kp->opcode; | ||
| 247 | return (unsigned long)buf; | 268 | return (unsigned long)buf; |
| 248 | } | 269 | } |
| 249 | 270 | ||
| @@ -251,6 +272,7 @@ __recover_probed_insn(kprobe_opcode_t *buf, unsigned long addr) | |||
| 251 | * Recover the probed instruction at addr for further analysis. | 272 | * Recover the probed instruction at addr for further analysis. |
| 252 | * Caller must lock kprobes by kprobe_mutex, or disable preemption | 273 | * Caller must lock kprobes by kprobe_mutex, or disable preemption |
| 253 | * for preventing to release referencing kprobes. | 274 | * for preventing to release referencing kprobes. |
| 275 | * Returns zero if the instruction can not get recovered. | ||
| 254 | */ | 276 | */ |
| 255 | unsigned long recover_probed_instruction(kprobe_opcode_t *buf, unsigned long addr) | 277 | unsigned long recover_probed_instruction(kprobe_opcode_t *buf, unsigned long addr) |
| 256 | { | 278 | { |
| @@ -285,6 +307,8 @@ static int can_probe(unsigned long paddr) | |||
| 285 | * normally used, we just go through if there is no kprobe. | 307 | * normally used, we just go through if there is no kprobe. |
| 286 | */ | 308 | */ |
| 287 | __addr = recover_probed_instruction(buf, addr); | 309 | __addr = recover_probed_instruction(buf, addr); |
| 310 | if (!__addr) | ||
| 311 | return 0; | ||
| 288 | kernel_insn_init(&insn, (void *)__addr, MAX_INSN_SIZE); | 312 | kernel_insn_init(&insn, (void *)__addr, MAX_INSN_SIZE); |
| 289 | insn_get_length(&insn); | 313 | insn_get_length(&insn); |
| 290 | 314 | ||
| @@ -333,6 +357,8 @@ int __copy_instruction(u8 *dest, u8 *src) | |||
| 333 | unsigned long recovered_insn = | 357 | unsigned long recovered_insn = |
| 334 | recover_probed_instruction(buf, (unsigned long)src); | 358 | recover_probed_instruction(buf, (unsigned long)src); |
| 335 | 359 | ||
| 360 | if (!recovered_insn) | ||
| 361 | return 0; | ||
| 336 | kernel_insn_init(&insn, (void *)recovered_insn, MAX_INSN_SIZE); | 362 | kernel_insn_init(&insn, (void *)recovered_insn, MAX_INSN_SIZE); |
| 337 | insn_get_length(&insn); | 363 | insn_get_length(&insn); |
| 338 | /* Another subsystem puts a breakpoint, failed to recover */ | 364 | /* Another subsystem puts a breakpoint, failed to recover */ |
diff --git a/arch/x86/kernel/kprobes/opt.c b/arch/x86/kernel/kprobes/opt.c index 0dd8d089c315..7b3b9d15c47a 100644 --- a/arch/x86/kernel/kprobes/opt.c +++ b/arch/x86/kernel/kprobes/opt.c | |||
| @@ -259,6 +259,8 @@ static int can_optimize(unsigned long paddr) | |||
| 259 | */ | 259 | */ |
| 260 | return 0; | 260 | return 0; |
| 261 | recovered_insn = recover_probed_instruction(buf, addr); | 261 | recovered_insn = recover_probed_instruction(buf, addr); |
| 262 | if (!recovered_insn) | ||
| 263 | return 0; | ||
| 262 | kernel_insn_init(&insn, (void *)recovered_insn, MAX_INSN_SIZE); | 264 | kernel_insn_init(&insn, (void *)recovered_insn, MAX_INSN_SIZE); |
| 263 | insn_get_length(&insn); | 265 | insn_get_length(&insn); |
| 264 | /* Another subsystem puts a breakpoint */ | 266 | /* Another subsystem puts a breakpoint */ |
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index e0b794a84c35..106c01557f2b 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c | |||
| @@ -4950,7 +4950,8 @@ int x86_emulate_insn(struct x86_emulate_ctxt *ctxt) | |||
| 4950 | goto done; | 4950 | goto done; |
| 4951 | } | 4951 | } |
| 4952 | } | 4952 | } |
| 4953 | ctxt->dst.orig_val = ctxt->dst.val; | 4953 | /* Copy full 64-bit value for CMPXCHG8B. */ |
| 4954 | ctxt->dst.orig_val64 = ctxt->dst.val64; | ||
| 4954 | 4955 | ||
| 4955 | special_insn: | 4956 | special_insn: |
| 4956 | 4957 | ||
diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index e55b5fc344eb..bd4e34de24c7 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c | |||
| @@ -1572,7 +1572,7 @@ void kvm_lapic_reset(struct kvm_vcpu *vcpu) | |||
| 1572 | apic_set_reg(apic, APIC_TMR + 0x10 * i, 0); | 1572 | apic_set_reg(apic, APIC_TMR + 0x10 * i, 0); |
| 1573 | } | 1573 | } |
| 1574 | apic->irr_pending = kvm_apic_vid_enabled(vcpu->kvm); | 1574 | apic->irr_pending = kvm_apic_vid_enabled(vcpu->kvm); |
| 1575 | apic->isr_count = kvm_apic_vid_enabled(vcpu->kvm); | 1575 | apic->isr_count = kvm_x86_ops->hwapic_isr_update ? 1 : 0; |
| 1576 | apic->highest_isr_cache = -1; | 1576 | apic->highest_isr_cache = -1; |
| 1577 | update_divide_count(apic); | 1577 | update_divide_count(apic); |
| 1578 | atomic_set(&apic->lapic_timer.pending, 0); | 1578 | atomic_set(&apic->lapic_timer.pending, 0); |
| @@ -1782,7 +1782,7 @@ void kvm_apic_post_state_restore(struct kvm_vcpu *vcpu, | |||
| 1782 | update_divide_count(apic); | 1782 | update_divide_count(apic); |
| 1783 | start_apic_timer(apic); | 1783 | start_apic_timer(apic); |
| 1784 | apic->irr_pending = true; | 1784 | apic->irr_pending = true; |
| 1785 | apic->isr_count = kvm_apic_vid_enabled(vcpu->kvm) ? | 1785 | apic->isr_count = kvm_x86_ops->hwapic_isr_update ? |
| 1786 | 1 : count_vectors(apic->regs + APIC_ISR); | 1786 | 1 : count_vectors(apic->regs + APIC_ISR); |
| 1787 | apic->highest_isr_cache = -1; | 1787 | apic->highest_isr_cache = -1; |
| 1788 | if (kvm_x86_ops->hwapic_irr_update) | 1788 | if (kvm_x86_ops->hwapic_irr_update) |
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index d319e0c24758..cc618c882f90 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c | |||
| @@ -3649,11 +3649,6 @@ static void svm_load_eoi_exitmap(struct kvm_vcpu *vcpu, u64 *eoi_exit_bitmap) | |||
| 3649 | return; | 3649 | return; |
| 3650 | } | 3650 | } |
| 3651 | 3651 | ||
| 3652 | static void svm_hwapic_isr_update(struct kvm *kvm, int isr) | ||
| 3653 | { | ||
| 3654 | return; | ||
| 3655 | } | ||
| 3656 | |||
| 3657 | static void svm_sync_pir_to_irr(struct kvm_vcpu *vcpu) | 3652 | static void svm_sync_pir_to_irr(struct kvm_vcpu *vcpu) |
| 3658 | { | 3653 | { |
| 3659 | return; | 3654 | return; |
| @@ -4403,7 +4398,6 @@ static struct kvm_x86_ops svm_x86_ops = { | |||
| 4403 | .set_virtual_x2apic_mode = svm_set_virtual_x2apic_mode, | 4398 | .set_virtual_x2apic_mode = svm_set_virtual_x2apic_mode, |
| 4404 | .vm_has_apicv = svm_vm_has_apicv, | 4399 | .vm_has_apicv = svm_vm_has_apicv, |
| 4405 | .load_eoi_exitmap = svm_load_eoi_exitmap, | 4400 | .load_eoi_exitmap = svm_load_eoi_exitmap, |
| 4406 | .hwapic_isr_update = svm_hwapic_isr_update, | ||
| 4407 | .sync_pir_to_irr = svm_sync_pir_to_irr, | 4401 | .sync_pir_to_irr = svm_sync_pir_to_irr, |
| 4408 | 4402 | ||
| 4409 | .set_tss_addr = svm_set_tss_addr, | 4403 | .set_tss_addr = svm_set_tss_addr, |
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 14c1a18d206a..f7b20b417a3a 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
| @@ -4367,6 +4367,18 @@ static int vmx_complete_nested_posted_interrupt(struct kvm_vcpu *vcpu) | |||
| 4367 | return 0; | 4367 | return 0; |
| 4368 | } | 4368 | } |
| 4369 | 4369 | ||
| 4370 | static inline bool kvm_vcpu_trigger_posted_interrupt(struct kvm_vcpu *vcpu) | ||
| 4371 | { | ||
| 4372 | #ifdef CONFIG_SMP | ||
| 4373 | if (vcpu->mode == IN_GUEST_MODE) { | ||
| 4374 | apic->send_IPI_mask(get_cpu_mask(vcpu->cpu), | ||
| 4375 | POSTED_INTR_VECTOR); | ||
| 4376 | return true; | ||
| 4377 | } | ||
| 4378 | #endif | ||
| 4379 | return false; | ||
| 4380 | } | ||
| 4381 | |||
| 4370 | static int vmx_deliver_nested_posted_interrupt(struct kvm_vcpu *vcpu, | 4382 | static int vmx_deliver_nested_posted_interrupt(struct kvm_vcpu *vcpu, |
| 4371 | int vector) | 4383 | int vector) |
| 4372 | { | 4384 | { |
| @@ -4375,9 +4387,7 @@ static int vmx_deliver_nested_posted_interrupt(struct kvm_vcpu *vcpu, | |||
| 4375 | if (is_guest_mode(vcpu) && | 4387 | if (is_guest_mode(vcpu) && |
| 4376 | vector == vmx->nested.posted_intr_nv) { | 4388 | vector == vmx->nested.posted_intr_nv) { |
| 4377 | /* the PIR and ON have been set by L1. */ | 4389 | /* the PIR and ON have been set by L1. */ |
| 4378 | if (vcpu->mode == IN_GUEST_MODE) | 4390 | kvm_vcpu_trigger_posted_interrupt(vcpu); |
| 4379 | apic->send_IPI_mask(get_cpu_mask(vcpu->cpu), | ||
| 4380 | POSTED_INTR_VECTOR); | ||
| 4381 | /* | 4391 | /* |
| 4382 | * If a posted intr is not recognized by hardware, | 4392 | * If a posted intr is not recognized by hardware, |
| 4383 | * we will accomplish it in the next vmentry. | 4393 | * we will accomplish it in the next vmentry. |
| @@ -4409,12 +4419,7 @@ static void vmx_deliver_posted_interrupt(struct kvm_vcpu *vcpu, int vector) | |||
| 4409 | 4419 | ||
| 4410 | r = pi_test_and_set_on(&vmx->pi_desc); | 4420 | r = pi_test_and_set_on(&vmx->pi_desc); |
| 4411 | kvm_make_request(KVM_REQ_EVENT, vcpu); | 4421 | kvm_make_request(KVM_REQ_EVENT, vcpu); |
| 4412 | #ifdef CONFIG_SMP | 4422 | if (r || !kvm_vcpu_trigger_posted_interrupt(vcpu)) |
| 4413 | if (!r && (vcpu->mode == IN_GUEST_MODE)) | ||
| 4414 | apic->send_IPI_mask(get_cpu_mask(vcpu->cpu), | ||
| 4415 | POSTED_INTR_VECTOR); | ||
| 4416 | else | ||
| 4417 | #endif | ||
| 4418 | kvm_vcpu_kick(vcpu); | 4423 | kvm_vcpu_kick(vcpu); |
| 4419 | } | 4424 | } |
| 4420 | 4425 | ||
diff --git a/arch/x86/lguest/Kconfig b/arch/x86/lguest/Kconfig index 4a0890f815c4..08f41caada45 100644 --- a/arch/x86/lguest/Kconfig +++ b/arch/x86/lguest/Kconfig | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | config LGUEST_GUEST | 1 | config LGUEST_GUEST |
| 2 | bool "Lguest guest support" | 2 | bool "Lguest guest support" |
| 3 | depends on X86_32 && PARAVIRT | 3 | depends on X86_32 && PARAVIRT && PCI |
| 4 | select TTY | 4 | select TTY |
| 5 | select VIRTUALIZATION | 5 | select VIRTUALIZATION |
| 6 | select VIRTIO | 6 | select VIRTIO |
| @@ -8,7 +8,7 @@ config LGUEST_GUEST | |||
| 8 | help | 8 | help |
| 9 | Lguest is a tiny in-kernel hypervisor. Selecting this will | 9 | Lguest is a tiny in-kernel hypervisor. Selecting this will |
| 10 | allow your kernel to boot under lguest. This option will increase | 10 | allow your kernel to boot under lguest. This option will increase |
| 11 | your kernel size by about 6k. If in doubt, say N. | 11 | your kernel size by about 10k. If in doubt, say N. |
| 12 | 12 | ||
| 13 | If you say Y here, make sure you say Y (or M) to the virtio block | 13 | If you say Y here, make sure you say Y (or M) to the virtio block |
| 14 | and net drivers which lguest needs. | 14 | and net drivers which lguest needs. |
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c index 6ac273832f28..e4695985f9de 100644 --- a/arch/x86/pci/acpi.c +++ b/arch/x86/pci/acpi.c | |||
| @@ -331,7 +331,7 @@ static void probe_pci_root_info(struct pci_root_info *info, | |||
| 331 | struct list_head *list) | 331 | struct list_head *list) |
| 332 | { | 332 | { |
| 333 | int ret; | 333 | int ret; |
| 334 | struct resource_entry *entry; | 334 | struct resource_entry *entry, *tmp; |
| 335 | 335 | ||
| 336 | sprintf(info->name, "PCI Bus %04x:%02x", domain, busnum); | 336 | sprintf(info->name, "PCI Bus %04x:%02x", domain, busnum); |
| 337 | info->bridge = device; | 337 | info->bridge = device; |
| @@ -345,8 +345,13 @@ static void probe_pci_root_info(struct pci_root_info *info, | |||
| 345 | dev_dbg(&device->dev, | 345 | dev_dbg(&device->dev, |
| 346 | "no IO and memory resources present in _CRS\n"); | 346 | "no IO and memory resources present in _CRS\n"); |
| 347 | else | 347 | else |
| 348 | resource_list_for_each_entry(entry, list) | 348 | resource_list_for_each_entry_safe(entry, tmp, list) { |
| 349 | entry->res->name = info->name; | 349 | if ((entry->res->flags & IORESOURCE_WINDOW) == 0 || |
| 350 | (entry->res->flags & IORESOURCE_DISABLED)) | ||
| 351 | resource_list_destroy_entry(entry); | ||
| 352 | else | ||
| 353 | entry->res->name = info->name; | ||
| 354 | } | ||
| 350 | } | 355 | } |
| 351 | 356 | ||
| 352 | struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root) | 357 | struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root) |
diff --git a/arch/x86/platform/intel-mid/intel-mid.c b/arch/x86/platform/intel-mid/intel-mid.c index 1bbedc4b0f88..3005f0c89f2e 100644 --- a/arch/x86/platform/intel-mid/intel-mid.c +++ b/arch/x86/platform/intel-mid/intel-mid.c | |||
| @@ -130,7 +130,7 @@ static void intel_mid_arch_setup(void) | |||
| 130 | intel_mid_ops = get_intel_mid_ops[__intel_mid_cpu_chip](); | 130 | intel_mid_ops = get_intel_mid_ops[__intel_mid_cpu_chip](); |
| 131 | else { | 131 | else { |
| 132 | intel_mid_ops = get_intel_mid_ops[INTEL_MID_CPU_CHIP_PENWELL](); | 132 | intel_mid_ops = get_intel_mid_ops[INTEL_MID_CPU_CHIP_PENWELL](); |
| 133 | pr_info("ARCH: Uknown SoC, assuming PENWELL!\n"); | 133 | pr_info("ARCH: Unknown SoC, assuming PENWELL!\n"); |
| 134 | } | 134 | } |
| 135 | 135 | ||
| 136 | out: | 136 | out: |
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index bd8b8459c3d0..5240f563076d 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
| @@ -1070,6 +1070,23 @@ static inline void xen_write_cr8(unsigned long val) | |||
| 1070 | BUG_ON(val); | 1070 | BUG_ON(val); |
| 1071 | } | 1071 | } |
| 1072 | #endif | 1072 | #endif |
| 1073 | |||
| 1074 | static u64 xen_read_msr_safe(unsigned int msr, int *err) | ||
| 1075 | { | ||
| 1076 | u64 val; | ||
| 1077 | |||
| 1078 | val = native_read_msr_safe(msr, err); | ||
| 1079 | switch (msr) { | ||
| 1080 | case MSR_IA32_APICBASE: | ||
| 1081 | #ifdef CONFIG_X86_X2APIC | ||
| 1082 | if (!(cpuid_ecx(1) & (1 << (X86_FEATURE_X2APIC & 31)))) | ||
| 1083 | #endif | ||
| 1084 | val &= ~X2APIC_ENABLE; | ||
| 1085 | break; | ||
| 1086 | } | ||
| 1087 | return val; | ||
| 1088 | } | ||
| 1089 | |||
| 1073 | static int xen_write_msr_safe(unsigned int msr, unsigned low, unsigned high) | 1090 | static int xen_write_msr_safe(unsigned int msr, unsigned low, unsigned high) |
| 1074 | { | 1091 | { |
| 1075 | int ret; | 1092 | int ret; |
| @@ -1240,7 +1257,7 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = { | |||
| 1240 | 1257 | ||
| 1241 | .wbinvd = native_wbinvd, | 1258 | .wbinvd = native_wbinvd, |
| 1242 | 1259 | ||
| 1243 | .read_msr = native_read_msr_safe, | 1260 | .read_msr = xen_read_msr_safe, |
| 1244 | .write_msr = xen_write_msr_safe, | 1261 | .write_msr = xen_write_msr_safe, |
| 1245 | 1262 | ||
| 1246 | .read_tsc = native_read_tsc, | 1263 | .read_tsc = native_read_tsc, |
| @@ -1741,6 +1758,7 @@ asmlinkage __visible void __init xen_start_kernel(void) | |||
| 1741 | #ifdef CONFIG_X86_32 | 1758 | #ifdef CONFIG_X86_32 |
| 1742 | i386_start_kernel(); | 1759 | i386_start_kernel(); |
| 1743 | #else | 1760 | #else |
| 1761 | cr4_init_shadow(); /* 32b kernel does this in i386_start_kernel() */ | ||
| 1744 | x86_64_start_reservations((char *)__pa_symbol(&boot_params)); | 1762 | x86_64_start_reservations((char *)__pa_symbol(&boot_params)); |
| 1745 | #endif | 1763 | #endif |
| 1746 | } | 1764 | } |
