Magellan Linux

Contents of /trunk/kernel-alx-legacy/patches-4.9/0286-4.9.187-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3608 - (show annotations) (download)
Fri Aug 14 07:34:29 2020 UTC (3 years, 9 months ago) by niro
File size: 374178 byte(s)
-added kerenl-alx-legacy pkg
1 diff --git a/Documentation/devicetree/bindings/serial/mvebu-uart.txt b/Documentation/devicetree/bindings/serial/mvebu-uart.txt
2 index 6087defd9f93..d37fabe17bd1 100644
3 --- a/Documentation/devicetree/bindings/serial/mvebu-uart.txt
4 +++ b/Documentation/devicetree/bindings/serial/mvebu-uart.txt
5 @@ -8,6 +8,6 @@ Required properties:
6 Example:
7 serial@12000 {
8 compatible = "marvell,armada-3700-uart";
9 - reg = <0x12000 0x400>;
10 + reg = <0x12000 0x200>;
11 interrupts = <43>;
12 };
13 diff --git a/Makefile b/Makefile
14 index 1ab22a85118f..65ed5dc69ec9 100644
15 --- a/Makefile
16 +++ b/Makefile
17 @@ -1,6 +1,6 @@
18 VERSION = 4
19 PATCHLEVEL = 9
20 -SUBLEVEL = 186
21 +SUBLEVEL = 187
22 EXTRAVERSION =
23 NAME = Roaring Lionus
24
25 @@ -515,6 +515,7 @@ ifneq ($(GCC_TOOLCHAIN),)
26 CLANG_FLAGS += --gcc-toolchain=$(GCC_TOOLCHAIN)
27 endif
28 CLANG_FLAGS += -no-integrated-as
29 +CLANG_FLAGS += -Werror=unknown-warning-option
30 KBUILD_CFLAGS += $(CLANG_FLAGS)
31 KBUILD_AFLAGS += $(CLANG_FLAGS)
32 endif
33 diff --git a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
34 index 68e6f88bdcfe..f2004b0955f1 100644
35 --- a/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
36 +++ b/arch/arm64/boot/dts/marvell/armada-37xx.dtsi
37 @@ -96,7 +96,7 @@
38
39 uart0: serial@12000 {
40 compatible = "marvell,armada-3700-uart";
41 - reg = <0x12000 0x400>;
42 + reg = <0x12000 0x200>;
43 interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>;
44 status = "disabled";
45 };
46 diff --git a/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi b/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi
47 index 906fb836d241..6a51d282ec63 100644
48 --- a/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi
49 +++ b/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi
50 @@ -306,7 +306,8 @@
51 regulator-max-microvolt = <1320000>;
52 enable-gpios = <&pmic 6 GPIO_ACTIVE_HIGH>;
53 regulator-ramp-delay = <80>;
54 - regulator-enable-ramp-delay = <1000>;
55 + regulator-enable-ramp-delay = <2000>;
56 + regulator-settling-time-us = <160>;
57 };
58 };
59 };
60 diff --git a/arch/arm64/boot/dts/nvidia/tegra210.dtsi b/arch/arm64/boot/dts/nvidia/tegra210.dtsi
61 index 46045fe719da..87ef72bffd86 100644
62 --- a/arch/arm64/boot/dts/nvidia/tegra210.dtsi
63 +++ b/arch/arm64/boot/dts/nvidia/tegra210.dtsi
64 @@ -1020,7 +1020,7 @@
65 compatible = "nvidia,tegra210-agic";
66 #interrupt-cells = <3>;
67 interrupt-controller;
68 - reg = <0x702f9000 0x2000>,
69 + reg = <0x702f9000 0x1000>,
70 <0x702fa000 0x2000>;
71 interrupts = <GIC_SPI 102 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
72 clocks = <&tegra_car TEGRA210_CLK_APE>;
73 diff --git a/arch/arm64/crypto/sha1-ce-glue.c b/arch/arm64/crypto/sha1-ce-glue.c
74 index ea319c055f5d..1b7b4684c35b 100644
75 --- a/arch/arm64/crypto/sha1-ce-glue.c
76 +++ b/arch/arm64/crypto/sha1-ce-glue.c
77 @@ -50,7 +50,7 @@ static int sha1_ce_finup(struct shash_desc *desc, const u8 *data,
78 unsigned int len, u8 *out)
79 {
80 struct sha1_ce_state *sctx = shash_desc_ctx(desc);
81 - bool finalize = !sctx->sst.count && !(len % SHA1_BLOCK_SIZE);
82 + bool finalize = !sctx->sst.count && !(len % SHA1_BLOCK_SIZE) && len;
83
84 /*
85 * Allow the asm code to perform the finalization if there is no
86 diff --git a/arch/arm64/crypto/sha2-ce-glue.c b/arch/arm64/crypto/sha2-ce-glue.c
87 index 0ed9486f75dd..356ca9397a86 100644
88 --- a/arch/arm64/crypto/sha2-ce-glue.c
89 +++ b/arch/arm64/crypto/sha2-ce-glue.c
90 @@ -52,7 +52,7 @@ static int sha256_ce_finup(struct shash_desc *desc, const u8 *data,
91 unsigned int len, u8 *out)
92 {
93 struct sha256_ce_state *sctx = shash_desc_ctx(desc);
94 - bool finalize = !sctx->sst.count && !(len % SHA256_BLOCK_SIZE);
95 + bool finalize = !sctx->sst.count && !(len % SHA256_BLOCK_SIZE) && len;
96
97 /*
98 * Allow the asm code to perform the finalization if there is no
99 diff --git a/arch/arm64/include/asm/compat.h b/arch/arm64/include/asm/compat.h
100 index eb8432bb82b8..b69e27152ea5 100644
101 --- a/arch/arm64/include/asm/compat.h
102 +++ b/arch/arm64/include/asm/compat.h
103 @@ -234,6 +234,7 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr)
104 }
105
106 #define compat_user_stack_pointer() (user_stack_pointer(task_pt_regs(current)))
107 +#define COMPAT_MINSIGSTKSZ 2048
108
109 static inline void __user *arch_compat_alloc_user_space(long len)
110 {
111 diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c
112 index 252a6d9c1da5..1a95d135def2 100644
113 --- a/arch/arm64/kernel/acpi.c
114 +++ b/arch/arm64/kernel/acpi.c
115 @@ -157,10 +157,14 @@ static int __init acpi_fadt_sanity_check(void)
116 */
117 if (table->revision < 5 ||
118 (table->revision == 5 && fadt->minor_revision < 1)) {
119 - pr_err("Unsupported FADT revision %d.%d, should be 5.1+\n",
120 + pr_err(FW_BUG "Unsupported FADT revision %d.%d, should be 5.1+\n",
121 table->revision, fadt->minor_revision);
122 - ret = -EINVAL;
123 - goto out;
124 +
125 + if (!fadt->arm_boot_flags) {
126 + ret = -EINVAL;
127 + goto out;
128 + }
129 + pr_err("FADT has ARM boot flags set, assuming 5.1\n");
130 }
131
132 if (!(fadt->flags & ACPI_FADT_HW_REDUCED)) {
133 diff --git a/arch/arm64/kernel/image.h b/arch/arm64/kernel/image.h
134 index c7fcb232fe47..d3e8c901274d 100644
135 --- a/arch/arm64/kernel/image.h
136 +++ b/arch/arm64/kernel/image.h
137 @@ -73,7 +73,11 @@
138
139 #ifdef CONFIG_EFI
140
141 -__efistub_stext_offset = stext - _text;
142 +/*
143 + * Use ABSOLUTE() to avoid ld.lld treating this as a relative symbol:
144 + * https://github.com/ClangBuiltLinux/linux/issues/561
145 + */
146 +__efistub_stext_offset = ABSOLUTE(stext - _text);
147
148 /*
149 * Prevent the symbol aliases below from being emitted into the kallsyms
150 diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile
151 index 90aca95fe314..ad31c76c7a29 100644
152 --- a/arch/mips/boot/compressed/Makefile
153 +++ b/arch/mips/boot/compressed/Makefile
154 @@ -75,6 +75,8 @@ OBJCOPYFLAGS_piggy.o := --add-section=.image=$(obj)/vmlinux.bin.z \
155 $(obj)/piggy.o: $(obj)/dummy.o $(obj)/vmlinux.bin.z FORCE
156 $(call if_changed,objcopy)
157
158 +HOSTCFLAGS_calc_vmlinuz_load_addr.o += $(LINUXINCLUDE)
159 +
160 # Calculate the load address of the compressed kernel image
161 hostprogs-y := calc_vmlinuz_load_addr
162
163 diff --git a/arch/mips/boot/compressed/calc_vmlinuz_load_addr.c b/arch/mips/boot/compressed/calc_vmlinuz_load_addr.c
164 index 542c3ede9722..d14f75ec8273 100644
165 --- a/arch/mips/boot/compressed/calc_vmlinuz_load_addr.c
166 +++ b/arch/mips/boot/compressed/calc_vmlinuz_load_addr.c
167 @@ -13,7 +13,7 @@
168 #include <stdint.h>
169 #include <stdio.h>
170 #include <stdlib.h>
171 -#include "../../../../include/linux/sizes.h"
172 +#include <linux/sizes.h>
173
174 int main(int argc, char *argv[])
175 {
176 diff --git a/arch/mips/include/asm/mach-ath79/ar933x_uart.h b/arch/mips/include/asm/mach-ath79/ar933x_uart.h
177 index c2917b39966b..bba2c8837951 100644
178 --- a/arch/mips/include/asm/mach-ath79/ar933x_uart.h
179 +++ b/arch/mips/include/asm/mach-ath79/ar933x_uart.h
180 @@ -27,8 +27,8 @@
181 #define AR933X_UART_CS_PARITY_S 0
182 #define AR933X_UART_CS_PARITY_M 0x3
183 #define AR933X_UART_CS_PARITY_NONE 0
184 -#define AR933X_UART_CS_PARITY_ODD 1
185 -#define AR933X_UART_CS_PARITY_EVEN 2
186 +#define AR933X_UART_CS_PARITY_ODD 2
187 +#define AR933X_UART_CS_PARITY_EVEN 3
188 #define AR933X_UART_CS_IF_MODE_S 2
189 #define AR933X_UART_CS_IF_MODE_M 0x3
190 #define AR933X_UART_CS_IF_MODE_NONE 0
191 diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c
192 index 0780c375fe2e..e204fc49517d 100644
193 --- a/arch/parisc/kernel/ptrace.c
194 +++ b/arch/parisc/kernel/ptrace.c
195 @@ -170,6 +170,9 @@ long arch_ptrace(struct task_struct *child, long request,
196 if ((addr & (sizeof(unsigned long)-1)) ||
197 addr >= sizeof(struct pt_regs))
198 break;
199 + if (addr == PT_IAOQ0 || addr == PT_IAOQ1) {
200 + data |= 3; /* ensure userspace privilege */
201 + }
202 if ((addr >= PT_GR1 && addr <= PT_GR31) ||
203 addr == PT_IAOQ0 || addr == PT_IAOQ1 ||
204 (addr >= PT_FR0 && addr <= PT_FR31 + 4) ||
205 @@ -231,16 +234,18 @@ long arch_ptrace(struct task_struct *child, long request,
206
207 static compat_ulong_t translate_usr_offset(compat_ulong_t offset)
208 {
209 - if (offset < 0)
210 - return sizeof(struct pt_regs);
211 - else if (offset <= 32*4) /* gr[0..31] */
212 - return offset * 2 + 4;
213 - else if (offset <= 32*4+32*8) /* gr[0..31] + fr[0..31] */
214 - return offset + 32*4;
215 - else if (offset < sizeof(struct pt_regs)/2 + 32*4)
216 - return offset * 2 + 4 - 32*8;
217 + compat_ulong_t pos;
218 +
219 + if (offset < 32*4) /* gr[0..31] */
220 + pos = offset * 2 + 4;
221 + else if (offset < 32*4+32*8) /* fr[0] ... fr[31] */
222 + pos = (offset - 32*4) + PT_FR0;
223 + else if (offset < sizeof(struct pt_regs)/2 + 32*4) /* sr[0] ... ipsw */
224 + pos = (offset - 32*4 - 32*8) * 2 + PT_SR0 + 4;
225 else
226 - return sizeof(struct pt_regs);
227 + pos = sizeof(struct pt_regs);
228 +
229 + return pos;
230 }
231
232 long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
233 @@ -284,9 +289,12 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
234 addr = translate_usr_offset(addr);
235 if (addr >= sizeof(struct pt_regs))
236 break;
237 + if (addr == PT_IAOQ0+4 || addr == PT_IAOQ1+4) {
238 + data |= 3; /* ensure userspace privilege */
239 + }
240 if (addr >= PT_FR0 && addr <= PT_FR31 + 4) {
241 /* Special case, fp regs are 64 bits anyway */
242 - *(__u64 *) ((char *) task_regs(child) + addr) = data;
243 + *(__u32 *) ((char *) task_regs(child) + addr) = data;
244 ret = 0;
245 }
246 else if ((addr >= PT_GR1+4 && addr <= PT_GR31+4) ||
247 @@ -499,7 +507,8 @@ static void set_reg(struct pt_regs *regs, int num, unsigned long val)
248 return;
249 case RI(iaoq[0]):
250 case RI(iaoq[1]):
251 - regs->iaoq[num - RI(iaoq[0])] = val;
252 + /* set 2 lowest bits to ensure userspace privilege: */
253 + regs->iaoq[num - RI(iaoq[0])] = val | 3;
254 return;
255 case RI(sar): regs->sar = val;
256 return;
257 diff --git a/arch/powerpc/boot/xz_config.h b/arch/powerpc/boot/xz_config.h
258 index 5c6afdbca642..21b52c15aafc 100644
259 --- a/arch/powerpc/boot/xz_config.h
260 +++ b/arch/powerpc/boot/xz_config.h
261 @@ -19,10 +19,30 @@ static inline uint32_t swab32p(void *p)
262
263 #ifdef __LITTLE_ENDIAN__
264 #define get_le32(p) (*((uint32_t *) (p)))
265 +#define cpu_to_be32(x) swab32(x)
266 +static inline u32 be32_to_cpup(const u32 *p)
267 +{
268 + return swab32p((u32 *)p);
269 +}
270 #else
271 #define get_le32(p) swab32p(p)
272 +#define cpu_to_be32(x) (x)
273 +static inline u32 be32_to_cpup(const u32 *p)
274 +{
275 + return *p;
276 +}
277 #endif
278
279 +static inline uint32_t get_unaligned_be32(const void *p)
280 +{
281 + return be32_to_cpup(p);
282 +}
283 +
284 +static inline void put_unaligned_be32(u32 val, void *p)
285 +{
286 + *((u32 *)p) = cpu_to_be32(val);
287 +}
288 +
289 #define memeq(a, b, size) (memcmp(a, b, size) == 0)
290 #define memzero(buf, size) memset(buf, 0, size)
291
292 diff --git a/arch/powerpc/kernel/eeh.c b/arch/powerpc/kernel/eeh.c
293 index 8336b9016ca9..a7f229e59892 100644
294 --- a/arch/powerpc/kernel/eeh.c
295 +++ b/arch/powerpc/kernel/eeh.c
296 @@ -362,10 +362,19 @@ static inline unsigned long eeh_token_to_phys(unsigned long token)
297 NULL, &hugepage_shift);
298 if (!ptep)
299 return token;
300 - WARN_ON(hugepage_shift);
301 - pa = pte_pfn(*ptep) << PAGE_SHIFT;
302
303 - return pa | (token & (PAGE_SIZE-1));
304 + pa = pte_pfn(*ptep);
305 +
306 + /* On radix we can do hugepage mappings for io, so handle that */
307 + if (hugepage_shift) {
308 + pa <<= hugepage_shift;
309 + pa |= token & ((1ul << hugepage_shift) - 1);
310 + } else {
311 + pa <<= PAGE_SHIFT;
312 + pa |= token & (PAGE_SIZE - 1);
313 + }
314 +
315 + return pa;
316 }
317
318 /*
319 diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
320 index d50cc9b38b80..92474227262b 100644
321 --- a/arch/powerpc/kernel/exceptions-64s.S
322 +++ b/arch/powerpc/kernel/exceptions-64s.S
323 @@ -1505,7 +1505,7 @@ handle_page_fault:
324 addi r3,r1,STACK_FRAME_OVERHEAD
325 bl do_page_fault
326 cmpdi r3,0
327 - beq+ 12f
328 + beq+ ret_from_except_lite
329 bl save_nvgprs
330 mr r5,r3
331 addi r3,r1,STACK_FRAME_OVERHEAD
332 @@ -1520,7 +1520,12 @@ handle_dabr_fault:
333 ld r5,_DSISR(r1)
334 addi r3,r1,STACK_FRAME_OVERHEAD
335 bl do_break
336 -12: b ret_from_except_lite
337 + /*
338 + * do_break() may have changed the NV GPRS while handling a breakpoint.
339 + * If so, we need to restore them with their updated values. Don't use
340 + * ret_from_except_lite here.
341 + */
342 + b ret_from_except
343
344
345 #ifdef CONFIG_PPC_STD_MMU_64
346 diff --git a/arch/powerpc/kernel/pci_of_scan.c b/arch/powerpc/kernel/pci_of_scan.c
347 index ea3d98115b88..e0648a09d9c8 100644
348 --- a/arch/powerpc/kernel/pci_of_scan.c
349 +++ b/arch/powerpc/kernel/pci_of_scan.c
350 @@ -45,6 +45,8 @@ static unsigned int pci_parse_of_flags(u32 addr0, int bridge)
351 if (addr0 & 0x02000000) {
352 flags = IORESOURCE_MEM | PCI_BASE_ADDRESS_SPACE_MEMORY;
353 flags |= (addr0 >> 22) & PCI_BASE_ADDRESS_MEM_TYPE_64;
354 + if (flags & PCI_BASE_ADDRESS_MEM_TYPE_64)
355 + flags |= IORESOURCE_MEM_64;
356 flags |= (addr0 >> 28) & PCI_BASE_ADDRESS_MEM_TYPE_1M;
357 if (addr0 & 0x40000000)
358 flags |= IORESOURCE_PREFETCH
359 diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
360 index 2bfa5a7bb672..a378b1e80a1a 100644
361 --- a/arch/powerpc/kernel/signal_32.c
362 +++ b/arch/powerpc/kernel/signal_32.c
363 @@ -1281,6 +1281,9 @@ long sys_rt_sigreturn(int r3, int r4, int r5, int r6, int r7, int r8,
364 goto bad;
365
366 if (MSR_TM_ACTIVE(msr_hi<<32)) {
367 + /* Trying to start TM on non TM system */
368 + if (!cpu_has_feature(CPU_FTR_TM))
369 + goto bad;
370 /* We only recheckpoint on return if we're
371 * transaction.
372 */
373 diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c
374 index bdf2f7b995bb..f4c46b0ec611 100644
375 --- a/arch/powerpc/kernel/signal_64.c
376 +++ b/arch/powerpc/kernel/signal_64.c
377 @@ -741,6 +741,11 @@ int sys_rt_sigreturn(unsigned long r3, unsigned long r4, unsigned long r5,
378 if (MSR_TM_ACTIVE(msr)) {
379 /* We recheckpoint on return. */
380 struct ucontext __user *uc_transact;
381 +
382 + /* Trying to start TM on non TM system */
383 + if (!cpu_has_feature(CPU_FTR_TM))
384 + goto badframe;
385 +
386 if (__get_user(uc_transact, &uc->uc_link))
387 goto badframe;
388 if (restore_tm_sigcontexts(current, &uc->uc_mcontext,
389 diff --git a/arch/powerpc/kernel/swsusp_32.S b/arch/powerpc/kernel/swsusp_32.S
390 index ba4dee3d233f..884d1c3a187b 100644
391 --- a/arch/powerpc/kernel/swsusp_32.S
392 +++ b/arch/powerpc/kernel/swsusp_32.S
393 @@ -23,11 +23,19 @@
394 #define SL_IBAT2 0x48
395 #define SL_DBAT3 0x50
396 #define SL_IBAT3 0x58
397 -#define SL_TB 0x60
398 -#define SL_R2 0x68
399 -#define SL_CR 0x6c
400 -#define SL_LR 0x70
401 -#define SL_R12 0x74 /* r12 to r31 */
402 +#define SL_DBAT4 0x60
403 +#define SL_IBAT4 0x68
404 +#define SL_DBAT5 0x70
405 +#define SL_IBAT5 0x78
406 +#define SL_DBAT6 0x80
407 +#define SL_IBAT6 0x88
408 +#define SL_DBAT7 0x90
409 +#define SL_IBAT7 0x98
410 +#define SL_TB 0xa0
411 +#define SL_R2 0xa8
412 +#define SL_CR 0xac
413 +#define SL_LR 0xb0
414 +#define SL_R12 0xb4 /* r12 to r31 */
415 #define SL_SIZE (SL_R12 + 80)
416
417 .section .data
418 @@ -112,6 +120,41 @@ _GLOBAL(swsusp_arch_suspend)
419 mfibatl r4,3
420 stw r4,SL_IBAT3+4(r11)
421
422 +BEGIN_MMU_FTR_SECTION
423 + mfspr r4,SPRN_DBAT4U
424 + stw r4,SL_DBAT4(r11)
425 + mfspr r4,SPRN_DBAT4L
426 + stw r4,SL_DBAT4+4(r11)
427 + mfspr r4,SPRN_DBAT5U
428 + stw r4,SL_DBAT5(r11)
429 + mfspr r4,SPRN_DBAT5L
430 + stw r4,SL_DBAT5+4(r11)
431 + mfspr r4,SPRN_DBAT6U
432 + stw r4,SL_DBAT6(r11)
433 + mfspr r4,SPRN_DBAT6L
434 + stw r4,SL_DBAT6+4(r11)
435 + mfspr r4,SPRN_DBAT7U
436 + stw r4,SL_DBAT7(r11)
437 + mfspr r4,SPRN_DBAT7L
438 + stw r4,SL_DBAT7+4(r11)
439 + mfspr r4,SPRN_IBAT4U
440 + stw r4,SL_IBAT4(r11)
441 + mfspr r4,SPRN_IBAT4L
442 + stw r4,SL_IBAT4+4(r11)
443 + mfspr r4,SPRN_IBAT5U
444 + stw r4,SL_IBAT5(r11)
445 + mfspr r4,SPRN_IBAT5L
446 + stw r4,SL_IBAT5+4(r11)
447 + mfspr r4,SPRN_IBAT6U
448 + stw r4,SL_IBAT6(r11)
449 + mfspr r4,SPRN_IBAT6L
450 + stw r4,SL_IBAT6+4(r11)
451 + mfspr r4,SPRN_IBAT7U
452 + stw r4,SL_IBAT7(r11)
453 + mfspr r4,SPRN_IBAT7L
454 + stw r4,SL_IBAT7+4(r11)
455 +END_MMU_FTR_SECTION_IFSET(MMU_FTR_USE_HIGH_BATS)
456 +
457 #if 0
458 /* Backup various CPU config stuffs */
459 bl __save_cpu_setup
460 @@ -277,27 +320,41 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
461 mtibatu 3,r4
462 lwz r4,SL_IBAT3+4(r11)
463 mtibatl 3,r4
464 -#endif
465 -
466 BEGIN_MMU_FTR_SECTION
467 - li r4,0
468 + lwz r4,SL_DBAT4(r11)
469 mtspr SPRN_DBAT4U,r4
470 + lwz r4,SL_DBAT4+4(r11)
471 mtspr SPRN_DBAT4L,r4
472 + lwz r4,SL_DBAT5(r11)
473 mtspr SPRN_DBAT5U,r4
474 + lwz r4,SL_DBAT5+4(r11)
475 mtspr SPRN_DBAT5L,r4
476 + lwz r4,SL_DBAT6(r11)
477 mtspr SPRN_DBAT6U,r4
478 + lwz r4,SL_DBAT6+4(r11)
479 mtspr SPRN_DBAT6L,r4
480 + lwz r4,SL_DBAT7(r11)
481 mtspr SPRN_DBAT7U,r4
482 + lwz r4,SL_DBAT7+4(r11)
483 mtspr SPRN_DBAT7L,r4
484 + lwz r4,SL_IBAT4(r11)
485 mtspr SPRN_IBAT4U,r4
486 + lwz r4,SL_IBAT4+4(r11)
487 mtspr SPRN_IBAT4L,r4
488 + lwz r4,SL_IBAT5(r11)
489 mtspr SPRN_IBAT5U,r4
490 + lwz r4,SL_IBAT5+4(r11)
491 mtspr SPRN_IBAT5L,r4
492 + lwz r4,SL_IBAT6(r11)
493 mtspr SPRN_IBAT6U,r4
494 + lwz r4,SL_IBAT6+4(r11)
495 mtspr SPRN_IBAT6L,r4
496 + lwz r4,SL_IBAT7(r11)
497 mtspr SPRN_IBAT7U,r4
498 + lwz r4,SL_IBAT7+4(r11)
499 mtspr SPRN_IBAT7L,r4
500 END_MMU_FTR_SECTION_IFSET(MMU_FTR_USE_HIGH_BATS)
501 +#endif
502
503 /* Flush all TLBs */
504 lis r4,0x1000
505 diff --git a/arch/powerpc/platforms/powermac/sleep.S b/arch/powerpc/platforms/powermac/sleep.S
506 index 1c2802fabd57..c856cd7fcdc4 100644
507 --- a/arch/powerpc/platforms/powermac/sleep.S
508 +++ b/arch/powerpc/platforms/powermac/sleep.S
509 @@ -37,10 +37,18 @@
510 #define SL_IBAT2 0x48
511 #define SL_DBAT3 0x50
512 #define SL_IBAT3 0x58
513 -#define SL_TB 0x60
514 -#define SL_R2 0x68
515 -#define SL_CR 0x6c
516 -#define SL_R12 0x70 /* r12 to r31 */
517 +#define SL_DBAT4 0x60
518 +#define SL_IBAT4 0x68
519 +#define SL_DBAT5 0x70
520 +#define SL_IBAT5 0x78
521 +#define SL_DBAT6 0x80
522 +#define SL_IBAT6 0x88
523 +#define SL_DBAT7 0x90
524 +#define SL_IBAT7 0x98
525 +#define SL_TB 0xa0
526 +#define SL_R2 0xa8
527 +#define SL_CR 0xac
528 +#define SL_R12 0xb0 /* r12 to r31 */
529 #define SL_SIZE (SL_R12 + 80)
530
531 .section .text
532 @@ -125,6 +133,41 @@ _GLOBAL(low_sleep_handler)
533 mfibatl r4,3
534 stw r4,SL_IBAT3+4(r1)
535
536 +BEGIN_MMU_FTR_SECTION
537 + mfspr r4,SPRN_DBAT4U
538 + stw r4,SL_DBAT4(r1)
539 + mfspr r4,SPRN_DBAT4L
540 + stw r4,SL_DBAT4+4(r1)
541 + mfspr r4,SPRN_DBAT5U
542 + stw r4,SL_DBAT5(r1)
543 + mfspr r4,SPRN_DBAT5L
544 + stw r4,SL_DBAT5+4(r1)
545 + mfspr r4,SPRN_DBAT6U
546 + stw r4,SL_DBAT6(r1)
547 + mfspr r4,SPRN_DBAT6L
548 + stw r4,SL_DBAT6+4(r1)
549 + mfspr r4,SPRN_DBAT7U
550 + stw r4,SL_DBAT7(r1)
551 + mfspr r4,SPRN_DBAT7L
552 + stw r4,SL_DBAT7+4(r1)
553 + mfspr r4,SPRN_IBAT4U
554 + stw r4,SL_IBAT4(r1)
555 + mfspr r4,SPRN_IBAT4L
556 + stw r4,SL_IBAT4+4(r1)
557 + mfspr r4,SPRN_IBAT5U
558 + stw r4,SL_IBAT5(r1)
559 + mfspr r4,SPRN_IBAT5L
560 + stw r4,SL_IBAT5+4(r1)
561 + mfspr r4,SPRN_IBAT6U
562 + stw r4,SL_IBAT6(r1)
563 + mfspr r4,SPRN_IBAT6L
564 + stw r4,SL_IBAT6+4(r1)
565 + mfspr r4,SPRN_IBAT7U
566 + stw r4,SL_IBAT7(r1)
567 + mfspr r4,SPRN_IBAT7L
568 + stw r4,SL_IBAT7+4(r1)
569 +END_MMU_FTR_SECTION_IFSET(MMU_FTR_USE_HIGH_BATS)
570 +
571 /* Backup various CPU config stuffs */
572 bl __save_cpu_setup
573
574 @@ -325,22 +368,37 @@ grackle_wake_up:
575 mtibatl 3,r4
576
577 BEGIN_MMU_FTR_SECTION
578 - li r4,0
579 + lwz r4,SL_DBAT4(r1)
580 mtspr SPRN_DBAT4U,r4
581 + lwz r4,SL_DBAT4+4(r1)
582 mtspr SPRN_DBAT4L,r4
583 + lwz r4,SL_DBAT5(r1)
584 mtspr SPRN_DBAT5U,r4
585 + lwz r4,SL_DBAT5+4(r1)
586 mtspr SPRN_DBAT5L,r4
587 + lwz r4,SL_DBAT6(r1)
588 mtspr SPRN_DBAT6U,r4
589 + lwz r4,SL_DBAT6+4(r1)
590 mtspr SPRN_DBAT6L,r4
591 + lwz r4,SL_DBAT7(r1)
592 mtspr SPRN_DBAT7U,r4
593 + lwz r4,SL_DBAT7+4(r1)
594 mtspr SPRN_DBAT7L,r4
595 + lwz r4,SL_IBAT4(r1)
596 mtspr SPRN_IBAT4U,r4
597 + lwz r4,SL_IBAT4+4(r1)
598 mtspr SPRN_IBAT4L,r4
599 + lwz r4,SL_IBAT5(r1)
600 mtspr SPRN_IBAT5U,r4
601 + lwz r4,SL_IBAT5+4(r1)
602 mtspr SPRN_IBAT5L,r4
603 + lwz r4,SL_IBAT6(r1)
604 mtspr SPRN_IBAT6U,r4
605 + lwz r4,SL_IBAT6+4(r1)
606 mtspr SPRN_IBAT6L,r4
607 + lwz r4,SL_IBAT7(r1)
608 mtspr SPRN_IBAT7U,r4
609 + lwz r4,SL_IBAT7+4(r1)
610 mtspr SPRN_IBAT7L,r4
611 END_MMU_FTR_SECTION_IFSET(MMU_FTR_USE_HIGH_BATS)
612
613 diff --git a/arch/powerpc/sysdev/uic.c b/arch/powerpc/sysdev/uic.c
614 index a00949f3e378..a8ebc96dfed2 100644
615 --- a/arch/powerpc/sysdev/uic.c
616 +++ b/arch/powerpc/sysdev/uic.c
617 @@ -158,6 +158,7 @@ static int uic_set_irq_type(struct irq_data *d, unsigned int flow_type)
618
619 mtdcr(uic->dcrbase + UIC_PR, pr);
620 mtdcr(uic->dcrbase + UIC_TR, tr);
621 + mtdcr(uic->dcrbase + UIC_SR, ~mask);
622
623 raw_spin_unlock_irqrestore(&uic->lock, flags);
624
625 diff --git a/arch/sh/include/asm/io.h b/arch/sh/include/asm/io.h
626 index 3280a6bfa503..b2592c3864ad 100644
627 --- a/arch/sh/include/asm/io.h
628 +++ b/arch/sh/include/asm/io.h
629 @@ -370,7 +370,11 @@ static inline int iounmap_fixed(void __iomem *addr) { return -EINVAL; }
630
631 #define ioremap_nocache ioremap
632 #define ioremap_uc ioremap
633 -#define iounmap __iounmap
634 +
635 +static inline void iounmap(void __iomem *addr)
636 +{
637 + __iounmap(addr);
638 +}
639
640 /*
641 * Convert a physical pointer to a virtual kernel pointer for /dev/mem
642 diff --git a/arch/um/include/asm/mmu_context.h b/arch/um/include/asm/mmu_context.h
643 index 1a60e1328e2f..6aca4c90aa1a 100644
644 --- a/arch/um/include/asm/mmu_context.h
645 +++ b/arch/um/include/asm/mmu_context.h
646 @@ -56,7 +56,7 @@ static inline void activate_mm(struct mm_struct *old, struct mm_struct *new)
647 * when the new ->mm is used for the first time.
648 */
649 __switch_mm(&new->context.id);
650 - down_write(&new->mmap_sem);
651 + down_write_nested(&new->mmap_sem, 1);
652 uml_setup_stubs(new);
653 up_write(&new->mmap_sem);
654 }
655 diff --git a/arch/um/include/asm/thread_info.h b/arch/um/include/asm/thread_info.h
656 index 053baff03674..9300f7630d2a 100644
657 --- a/arch/um/include/asm/thread_info.h
658 +++ b/arch/um/include/asm/thread_info.h
659 @@ -11,6 +11,7 @@
660 #include <asm/types.h>
661 #include <asm/page.h>
662 #include <asm/segment.h>
663 +#include <sysdep/ptrace_user.h>
664
665 struct thread_info {
666 struct task_struct *task; /* main task structure */
667 @@ -22,6 +23,8 @@ struct thread_info {
668 0-0xBFFFFFFF for user
669 0-0xFFFFFFFF for kernel */
670 struct thread_info *real_thread; /* Points to non-IRQ stack */
671 + unsigned long aux_fp_regs[FP_SIZE]; /* auxiliary fp_regs to save/restore
672 + them out-of-band */
673 };
674
675 #define INIT_THREAD_INFO(tsk) \
676 diff --git a/arch/um/include/shared/os.h b/arch/um/include/shared/os.h
677 index de5d572225f3..cc64f0579949 100644
678 --- a/arch/um/include/shared/os.h
679 +++ b/arch/um/include/shared/os.h
680 @@ -274,7 +274,7 @@ extern int protect(struct mm_id * mm_idp, unsigned long addr,
681 extern int is_skas_winch(int pid, int fd, void *data);
682 extern int start_userspace(unsigned long stub_stack);
683 extern int copy_context_skas0(unsigned long stack, int pid);
684 -extern void userspace(struct uml_pt_regs *regs);
685 +extern void userspace(struct uml_pt_regs *regs, unsigned long *aux_fp_regs);
686 extern int map_stub_pages(int fd, unsigned long code, unsigned long data,
687 unsigned long stack);
688 extern void new_thread(void *stack, jmp_buf *buf, void (*handler)(void));
689 diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c
690 index 034b42c7ab40..787568044a2a 100644
691 --- a/arch/um/kernel/process.c
692 +++ b/arch/um/kernel/process.c
693 @@ -128,7 +128,7 @@ void new_thread_handler(void)
694 * callback returns only if the kernel thread execs a process
695 */
696 n = fn(arg);
697 - userspace(&current->thread.regs.regs);
698 + userspace(&current->thread.regs.regs, current_thread_info()->aux_fp_regs);
699 }
700
701 /* Called magically, see new_thread_handler above */
702 @@ -147,7 +147,7 @@ void fork_handler(void)
703
704 current->thread.prev_sched = NULL;
705
706 - userspace(&current->thread.regs.regs);
707 + userspace(&current->thread.regs.regs, current_thread_info()->aux_fp_regs);
708 }
709
710 int copy_thread(unsigned long clone_flags, unsigned long sp,
711 diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c
712 index 0a99d4515065..cd4a6ff676a8 100644
713 --- a/arch/um/os-Linux/skas/process.c
714 +++ b/arch/um/os-Linux/skas/process.c
715 @@ -87,12 +87,11 @@ bad_wait:
716
717 extern unsigned long current_stub_stack(void);
718
719 -static void get_skas_faultinfo(int pid, struct faultinfo *fi)
720 +static void get_skas_faultinfo(int pid, struct faultinfo *fi, unsigned long *aux_fp_regs)
721 {
722 int err;
723 - unsigned long fpregs[FP_SIZE];
724
725 - err = get_fp_registers(pid, fpregs);
726 + err = get_fp_registers(pid, aux_fp_regs);
727 if (err < 0) {
728 printk(UM_KERN_ERR "save_fp_registers returned %d\n",
729 err);
730 @@ -112,7 +111,7 @@ static void get_skas_faultinfo(int pid, struct faultinfo *fi)
731 */
732 memcpy(fi, (void *)current_stub_stack(), sizeof(*fi));
733
734 - err = put_fp_registers(pid, fpregs);
735 + err = put_fp_registers(pid, aux_fp_regs);
736 if (err < 0) {
737 printk(UM_KERN_ERR "put_fp_registers returned %d\n",
738 err);
739 @@ -120,9 +119,9 @@ static void get_skas_faultinfo(int pid, struct faultinfo *fi)
740 }
741 }
742
743 -static void handle_segv(int pid, struct uml_pt_regs * regs)
744 +static void handle_segv(int pid, struct uml_pt_regs *regs, unsigned long *aux_fp_regs)
745 {
746 - get_skas_faultinfo(pid, &regs->faultinfo);
747 + get_skas_faultinfo(pid, &regs->faultinfo, aux_fp_regs);
748 segv(regs->faultinfo, 0, 1, NULL);
749 }
750
751 @@ -305,7 +304,7 @@ int start_userspace(unsigned long stub_stack)
752 return err;
753 }
754
755 -void userspace(struct uml_pt_regs *regs)
756 +void userspace(struct uml_pt_regs *regs, unsigned long *aux_fp_regs)
757 {
758 int err, status, op, pid = userspace_pid[0];
759 /* To prevent races if using_sysemu changes under us.*/
760 @@ -374,11 +373,11 @@ void userspace(struct uml_pt_regs *regs)
761 case SIGSEGV:
762 if (PTRACE_FULL_FAULTINFO) {
763 get_skas_faultinfo(pid,
764 - &regs->faultinfo);
765 + &regs->faultinfo, aux_fp_regs);
766 (*sig_info[SIGSEGV])(SIGSEGV, (struct siginfo *)&si,
767 regs);
768 }
769 - else handle_segv(pid, regs);
770 + else handle_segv(pid, regs, aux_fp_regs);
771 break;
772 case SIGTRAP + 0x80:
773 handle_trap(pid, regs, local_using_sysemu);
774 diff --git a/arch/x86/events/amd/uncore.c b/arch/x86/events/amd/uncore.c
775 index 65577f081d07..c16c99bc2a10 100644
776 --- a/arch/x86/events/amd/uncore.c
777 +++ b/arch/x86/events/amd/uncore.c
778 @@ -19,13 +19,14 @@
779 #include <asm/cpufeature.h>
780 #include <asm/perf_event.h>
781 #include <asm/msr.h>
782 +#include <asm/smp.h>
783
784 #define NUM_COUNTERS_NB 4
785 #define NUM_COUNTERS_L2 4
786 #define MAX_COUNTERS NUM_COUNTERS_NB
787
788 #define RDPMC_BASE_NB 6
789 -#define RDPMC_BASE_L2 10
790 +#define RDPMC_BASE_LLC 10
791
792 #define COUNTER_SHIFT 16
793
794 @@ -45,30 +46,30 @@ struct amd_uncore {
795 };
796
797 static struct amd_uncore * __percpu *amd_uncore_nb;
798 -static struct amd_uncore * __percpu *amd_uncore_l2;
799 +static struct amd_uncore * __percpu *amd_uncore_llc;
800
801 static struct pmu amd_nb_pmu;
802 -static struct pmu amd_l2_pmu;
803 +static struct pmu amd_llc_pmu;
804
805 static cpumask_t amd_nb_active_mask;
806 -static cpumask_t amd_l2_active_mask;
807 +static cpumask_t amd_llc_active_mask;
808
809 static bool is_nb_event(struct perf_event *event)
810 {
811 return event->pmu->type == amd_nb_pmu.type;
812 }
813
814 -static bool is_l2_event(struct perf_event *event)
815 +static bool is_llc_event(struct perf_event *event)
816 {
817 - return event->pmu->type == amd_l2_pmu.type;
818 + return event->pmu->type == amd_llc_pmu.type;
819 }
820
821 static struct amd_uncore *event_to_amd_uncore(struct perf_event *event)
822 {
823 if (is_nb_event(event) && amd_uncore_nb)
824 return *per_cpu_ptr(amd_uncore_nb, event->cpu);
825 - else if (is_l2_event(event) && amd_uncore_l2)
826 - return *per_cpu_ptr(amd_uncore_l2, event->cpu);
827 + else if (is_llc_event(event) && amd_uncore_llc)
828 + return *per_cpu_ptr(amd_uncore_llc, event->cpu);
829
830 return NULL;
831 }
832 @@ -183,16 +184,16 @@ static int amd_uncore_event_init(struct perf_event *event)
833 return -ENOENT;
834
835 /*
836 - * NB and L2 counters (MSRs) are shared across all cores that share the
837 - * same NB / L2 cache. Interrupts can be directed to a single target
838 - * core, however, event counts generated by processes running on other
839 - * cores cannot be masked out. So we do not support sampling and
840 - * per-thread events.
841 + * NB and Last level cache counters (MSRs) are shared across all cores
842 + * that share the same NB / Last level cache. Interrupts can be directed
843 + * to a single target core, however, event counts generated by processes
844 + * running on other cores cannot be masked out. So we do not support
845 + * sampling and per-thread events.
846 */
847 if (is_sampling_event(event) || event->attach_state & PERF_ATTACH_TASK)
848 return -EINVAL;
849
850 - /* NB and L2 counters do not have usr/os/guest/host bits */
851 + /* NB and Last level cache counters do not have usr/os/guest/host bits */
852 if (event->attr.exclude_user || event->attr.exclude_kernel ||
853 event->attr.exclude_host || event->attr.exclude_guest)
854 return -EINVAL;
855 @@ -226,8 +227,8 @@ static ssize_t amd_uncore_attr_show_cpumask(struct device *dev,
856
857 if (pmu->type == amd_nb_pmu.type)
858 active_mask = &amd_nb_active_mask;
859 - else if (pmu->type == amd_l2_pmu.type)
860 - active_mask = &amd_l2_active_mask;
861 + else if (pmu->type == amd_llc_pmu.type)
862 + active_mask = &amd_llc_active_mask;
863 else
864 return 0;
865
866 @@ -276,7 +277,7 @@ static struct pmu amd_nb_pmu = {
867 .read = amd_uncore_read,
868 };
869
870 -static struct pmu amd_l2_pmu = {
871 +static struct pmu amd_llc_pmu = {
872 .task_ctx_nr = perf_invalid_context,
873 .attr_groups = amd_uncore_attr_groups,
874 .name = "amd_l2",
875 @@ -296,7 +297,7 @@ static struct amd_uncore *amd_uncore_alloc(unsigned int cpu)
876
877 static int amd_uncore_cpu_up_prepare(unsigned int cpu)
878 {
879 - struct amd_uncore *uncore_nb = NULL, *uncore_l2;
880 + struct amd_uncore *uncore_nb = NULL, *uncore_llc;
881
882 if (amd_uncore_nb) {
883 uncore_nb = amd_uncore_alloc(cpu);
884 @@ -312,18 +313,18 @@ static int amd_uncore_cpu_up_prepare(unsigned int cpu)
885 *per_cpu_ptr(amd_uncore_nb, cpu) = uncore_nb;
886 }
887
888 - if (amd_uncore_l2) {
889 - uncore_l2 = amd_uncore_alloc(cpu);
890 - if (!uncore_l2)
891 + if (amd_uncore_llc) {
892 + uncore_llc = amd_uncore_alloc(cpu);
893 + if (!uncore_llc)
894 goto fail;
895 - uncore_l2->cpu = cpu;
896 - uncore_l2->num_counters = NUM_COUNTERS_L2;
897 - uncore_l2->rdpmc_base = RDPMC_BASE_L2;
898 - uncore_l2->msr_base = MSR_F16H_L2I_PERF_CTL;
899 - uncore_l2->active_mask = &amd_l2_active_mask;
900 - uncore_l2->pmu = &amd_l2_pmu;
901 - uncore_l2->id = -1;
902 - *per_cpu_ptr(amd_uncore_l2, cpu) = uncore_l2;
903 + uncore_llc->cpu = cpu;
904 + uncore_llc->num_counters = NUM_COUNTERS_L2;
905 + uncore_llc->rdpmc_base = RDPMC_BASE_LLC;
906 + uncore_llc->msr_base = MSR_F16H_L2I_PERF_CTL;
907 + uncore_llc->active_mask = &amd_llc_active_mask;
908 + uncore_llc->pmu = &amd_llc_pmu;
909 + uncore_llc->id = -1;
910 + *per_cpu_ptr(amd_uncore_llc, cpu) = uncore_llc;
911 }
912
913 return 0;
914 @@ -376,17 +377,12 @@ static int amd_uncore_cpu_starting(unsigned int cpu)
915 *per_cpu_ptr(amd_uncore_nb, cpu) = uncore;
916 }
917
918 - if (amd_uncore_l2) {
919 - unsigned int apicid = cpu_data(cpu).apicid;
920 - unsigned int nshared;
921 + if (amd_uncore_llc) {
922 + uncore = *per_cpu_ptr(amd_uncore_llc, cpu);
923 + uncore->id = per_cpu(cpu_llc_id, cpu);
924
925 - uncore = *per_cpu_ptr(amd_uncore_l2, cpu);
926 - cpuid_count(0x8000001d, 2, &eax, &ebx, &ecx, &edx);
927 - nshared = ((eax >> 14) & 0xfff) + 1;
928 - uncore->id = apicid - (apicid % nshared);
929 -
930 - uncore = amd_uncore_find_online_sibling(uncore, amd_uncore_l2);
931 - *per_cpu_ptr(amd_uncore_l2, cpu) = uncore;
932 + uncore = amd_uncore_find_online_sibling(uncore, amd_uncore_llc);
933 + *per_cpu_ptr(amd_uncore_llc, cpu) = uncore;
934 }
935
936 return 0;
937 @@ -419,8 +415,8 @@ static int amd_uncore_cpu_online(unsigned int cpu)
938 if (amd_uncore_nb)
939 uncore_online(cpu, amd_uncore_nb);
940
941 - if (amd_uncore_l2)
942 - uncore_online(cpu, amd_uncore_l2);
943 + if (amd_uncore_llc)
944 + uncore_online(cpu, amd_uncore_llc);
945
946 return 0;
947 }
948 @@ -456,8 +452,8 @@ static int amd_uncore_cpu_down_prepare(unsigned int cpu)
949 if (amd_uncore_nb)
950 uncore_down_prepare(cpu, amd_uncore_nb);
951
952 - if (amd_uncore_l2)
953 - uncore_down_prepare(cpu, amd_uncore_l2);
954 + if (amd_uncore_llc)
955 + uncore_down_prepare(cpu, amd_uncore_llc);
956
957 return 0;
958 }
959 @@ -479,8 +475,8 @@ static int amd_uncore_cpu_dead(unsigned int cpu)
960 if (amd_uncore_nb)
961 uncore_dead(cpu, amd_uncore_nb);
962
963 - if (amd_uncore_l2)
964 - uncore_dead(cpu, amd_uncore_l2);
965 + if (amd_uncore_llc)
966 + uncore_dead(cpu, amd_uncore_llc);
967
968 return 0;
969 }
970 @@ -510,16 +506,16 @@ static int __init amd_uncore_init(void)
971 }
972
973 if (boot_cpu_has(X86_FEATURE_PERFCTR_L2)) {
974 - amd_uncore_l2 = alloc_percpu(struct amd_uncore *);
975 - if (!amd_uncore_l2) {
976 + amd_uncore_llc = alloc_percpu(struct amd_uncore *);
977 + if (!amd_uncore_llc) {
978 ret = -ENOMEM;
979 - goto fail_l2;
980 + goto fail_llc;
981 }
982 - ret = perf_pmu_register(&amd_l2_pmu, amd_l2_pmu.name, -1);
983 + ret = perf_pmu_register(&amd_llc_pmu, amd_llc_pmu.name, -1);
984 if (ret)
985 - goto fail_l2;
986 + goto fail_llc;
987
988 - pr_info("perf: AMD L2I counters detected\n");
989 + pr_info("perf: AMD LLC counters detected\n");
990 ret = 0;
991 }
992
993 @@ -529,7 +525,7 @@ static int __init amd_uncore_init(void)
994 if (cpuhp_setup_state(CPUHP_PERF_X86_AMD_UNCORE_PREP,
995 "PERF_X86_AMD_UNCORE_PREP",
996 amd_uncore_cpu_up_prepare, amd_uncore_cpu_dead))
997 - goto fail_l2;
998 + goto fail_llc;
999
1000 if (cpuhp_setup_state(CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING,
1001 "AP_PERF_X86_AMD_UNCORE_STARTING",
1002 @@ -546,11 +542,11 @@ fail_start:
1003 cpuhp_remove_state(CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING);
1004 fail_prep:
1005 cpuhp_remove_state(CPUHP_PERF_X86_AMD_UNCORE_PREP);
1006 -fail_l2:
1007 +fail_llc:
1008 if (boot_cpu_has(X86_FEATURE_PERFCTR_NB))
1009 perf_pmu_unregister(&amd_nb_pmu);
1010 - if (amd_uncore_l2)
1011 - free_percpu(amd_uncore_l2);
1012 + if (amd_uncore_llc)
1013 + free_percpu(amd_uncore_llc);
1014 fail_nb:
1015 if (amd_uncore_nb)
1016 free_percpu(amd_uncore_nb);
1017 diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
1018 index 07a6c1fa173b..a4f343ac042e 100644
1019 --- a/arch/x86/kernel/cpu/bugs.c
1020 +++ b/arch/x86/kernel/cpu/bugs.c
1021 @@ -1205,7 +1205,7 @@ static ssize_t l1tf_show_state(char *buf)
1022 static ssize_t mds_show_state(char *buf)
1023 {
1024 #ifdef CONFIG_HYPERVISOR_GUEST
1025 - if (x86_hyper) {
1026 + if (boot_cpu_has(X86_FEATURE_HYPERVISOR)) {
1027 return sprintf(buf, "%s; SMT Host state unknown\n",
1028 mds_strings[mds_mitigation]);
1029 }
1030 diff --git a/arch/x86/kernel/cpu/mkcapflags.sh b/arch/x86/kernel/cpu/mkcapflags.sh
1031 index 6988c74409a8..711b74e0e623 100644
1032 --- a/arch/x86/kernel/cpu/mkcapflags.sh
1033 +++ b/arch/x86/kernel/cpu/mkcapflags.sh
1034 @@ -3,6 +3,8 @@
1035 # Generate the x86_cap/bug_flags[] arrays from include/asm/cpufeatures.h
1036 #
1037
1038 +set -e
1039 +
1040 IN=$1
1041 OUT=$2
1042
1043 diff --git a/arch/x86/kernel/sysfb_efi.c b/arch/x86/kernel/sysfb_efi.c
1044 index 623965e86b65..897da526e40e 100644
1045 --- a/arch/x86/kernel/sysfb_efi.c
1046 +++ b/arch/x86/kernel/sysfb_efi.c
1047 @@ -231,9 +231,55 @@ static const struct dmi_system_id efifb_dmi_system_table[] __initconst = {
1048 {},
1049 };
1050
1051 +/*
1052 + * Some devices have a portrait LCD but advertise a landscape resolution (and
1053 + * pitch). We simply swap width and height for these devices so that we can
1054 + * correctly deal with some of them coming with multiple resolutions.
1055 + */
1056 +static const struct dmi_system_id efifb_dmi_swap_width_height[] __initconst = {
1057 + {
1058 + /*
1059 + * Lenovo MIIX310-10ICR, only some batches have the troublesome
1060 + * 800x1280 portrait screen. Luckily the portrait version has
1061 + * its own BIOS version, so we match on that.
1062 + */
1063 + .matches = {
1064 + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"),
1065 + DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "MIIX 310-10ICR"),
1066 + DMI_EXACT_MATCH(DMI_BIOS_VERSION, "1HCN44WW"),
1067 + },
1068 + },
1069 + {
1070 + /* Lenovo MIIX 320-10ICR with 800x1280 portrait screen */
1071 + .matches = {
1072 + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"),
1073 + DMI_EXACT_MATCH(DMI_PRODUCT_VERSION,
1074 + "Lenovo MIIX 320-10ICR"),
1075 + },
1076 + },
1077 + {
1078 + /* Lenovo D330 with 800x1280 or 1200x1920 portrait screen */
1079 + .matches = {
1080 + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "LENOVO"),
1081 + DMI_EXACT_MATCH(DMI_PRODUCT_VERSION,
1082 + "Lenovo ideapad D330-10IGM"),
1083 + },
1084 + },
1085 + {},
1086 +};
1087 +
1088 __init void sysfb_apply_efi_quirks(void)
1089 {
1090 if (screen_info.orig_video_isVGA != VIDEO_TYPE_EFI ||
1091 !(screen_info.capabilities & VIDEO_CAPABILITY_SKIP_QUIRKS))
1092 dmi_check_system(efifb_dmi_system_table);
1093 +
1094 + if (screen_info.orig_video_isVGA == VIDEO_TYPE_EFI &&
1095 + dmi_check_system(efifb_dmi_swap_width_height)) {
1096 + u16 temp = screen_info.lfb_width;
1097 +
1098 + screen_info.lfb_width = screen_info.lfb_height;
1099 + screen_info.lfb_height = temp;
1100 + screen_info.lfb_linelength = 4 * screen_info.lfb_width;
1101 + }
1102 }
1103 diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c
1104 index 06ce377dcbc9..0827ee7d0e9b 100644
1105 --- a/arch/x86/kvm/pmu.c
1106 +++ b/arch/x86/kvm/pmu.c
1107 @@ -124,8 +124,8 @@ static void pmc_reprogram_counter(struct kvm_pmc *pmc, u32 type,
1108 intr ? kvm_perf_overflow_intr :
1109 kvm_perf_overflow, pmc);
1110 if (IS_ERR(event)) {
1111 - printk_once("kvm_pmu: event creation failed %ld\n",
1112 - PTR_ERR(event));
1113 + pr_debug_ratelimited("kvm_pmu: event creation failed %ld for pmc->idx = %d\n",
1114 + PTR_ERR(event), pmc->idx);
1115 return;
1116 }
1117
1118 diff --git a/arch/x86/um/os-Linux/registers.c b/arch/x86/um/os-Linux/registers.c
1119 index 00f54a91bb4b..3c423dfcd78b 100644
1120 --- a/arch/x86/um/os-Linux/registers.c
1121 +++ b/arch/x86/um/os-Linux/registers.c
1122 @@ -5,6 +5,7 @@
1123 */
1124
1125 #include <errno.h>
1126 +#include <stdlib.h>
1127 #include <sys/ptrace.h>
1128 #ifdef __i386__
1129 #include <sys/user.h>
1130 @@ -26,17 +27,18 @@ int save_i387_registers(int pid, unsigned long *fp_regs)
1131
1132 int save_fp_registers(int pid, unsigned long *fp_regs)
1133 {
1134 +#ifdef PTRACE_GETREGSET
1135 struct iovec iov;
1136
1137 if (have_xstate_support) {
1138 iov.iov_base = fp_regs;
1139 - iov.iov_len = sizeof(struct _xstate);
1140 + iov.iov_len = FP_SIZE * sizeof(unsigned long);
1141 if (ptrace(PTRACE_GETREGSET, pid, NT_X86_XSTATE, &iov) < 0)
1142 return -errno;
1143 return 0;
1144 - } else {
1145 + } else
1146 +#endif
1147 return save_i387_registers(pid, fp_regs);
1148 - }
1149 }
1150
1151 int restore_i387_registers(int pid, unsigned long *fp_regs)
1152 @@ -48,17 +50,17 @@ int restore_i387_registers(int pid, unsigned long *fp_regs)
1153
1154 int restore_fp_registers(int pid, unsigned long *fp_regs)
1155 {
1156 +#ifdef PTRACE_SETREGSET
1157 struct iovec iov;
1158 -
1159 if (have_xstate_support) {
1160 iov.iov_base = fp_regs;
1161 - iov.iov_len = sizeof(struct _xstate);
1162 + iov.iov_len = FP_SIZE * sizeof(unsigned long);
1163 if (ptrace(PTRACE_SETREGSET, pid, NT_X86_XSTATE, &iov) < 0)
1164 return -errno;
1165 return 0;
1166 - } else {
1167 + } else
1168 +#endif
1169 return restore_i387_registers(pid, fp_regs);
1170 - }
1171 }
1172
1173 #ifdef __i386__
1174 @@ -122,13 +124,21 @@ int put_fp_registers(int pid, unsigned long *regs)
1175
1176 void arch_init_registers(int pid)
1177 {
1178 - struct _xstate fp_regs;
1179 +#ifdef PTRACE_GETREGSET
1180 + void * fp_regs;
1181 struct iovec iov;
1182
1183 - iov.iov_base = &fp_regs;
1184 - iov.iov_len = sizeof(struct _xstate);
1185 + fp_regs = malloc(FP_SIZE * sizeof(unsigned long));
1186 + if(fp_regs == NULL)
1187 + return;
1188 +
1189 + iov.iov_base = fp_regs;
1190 + iov.iov_len = FP_SIZE * sizeof(unsigned long);
1191 if (ptrace(PTRACE_GETREGSET, pid, NT_X86_XSTATE, &iov) == 0)
1192 have_xstate_support = 1;
1193 +
1194 + free(fp_regs);
1195 +#endif
1196 }
1197 #endif
1198
1199 diff --git a/arch/x86/um/user-offsets.c b/arch/x86/um/user-offsets.c
1200 index cb3c22370cf5..7bcd10614f8b 100644
1201 --- a/arch/x86/um/user-offsets.c
1202 +++ b/arch/x86/um/user-offsets.c
1203 @@ -50,7 +50,11 @@ void foo(void)
1204 DEFINE(HOST_GS, GS);
1205 DEFINE(HOST_ORIG_AX, ORIG_EAX);
1206 #else
1207 - DEFINE(HOST_FP_SIZE, sizeof(struct _xstate) / sizeof(unsigned long));
1208 +#ifdef FP_XSTATE_MAGIC1
1209 + DEFINE_LONGS(HOST_FP_SIZE, 2696);
1210 +#else
1211 + DEFINE(HOST_FP_SIZE, sizeof(struct _fpstate) / sizeof(unsigned long));
1212 +#endif
1213 DEFINE_LONGS(HOST_BX, RBX);
1214 DEFINE_LONGS(HOST_CX, RCX);
1215 DEFINE_LONGS(HOST_DI, RDI);
1216 diff --git a/block/compat_ioctl.c b/block/compat_ioctl.c
1217 index 556826ac7cb4..3c9fdd6983aa 100644
1218 --- a/block/compat_ioctl.c
1219 +++ b/block/compat_ioctl.c
1220 @@ -4,7 +4,6 @@
1221 #include <linux/cdrom.h>
1222 #include <linux/compat.h>
1223 #include <linux/elevator.h>
1224 -#include <linux/fd.h>
1225 #include <linux/hdreg.h>
1226 #include <linux/slab.h>
1227 #include <linux/syscalls.h>
1228 @@ -209,318 +208,6 @@ static int compat_blkpg_ioctl(struct block_device *bdev, fmode_t mode,
1229 #define BLKBSZSET_32 _IOW(0x12, 113, int)
1230 #define BLKGETSIZE64_32 _IOR(0x12, 114, int)
1231
1232 -struct compat_floppy_drive_params {
1233 - char cmos;
1234 - compat_ulong_t max_dtr;
1235 - compat_ulong_t hlt;
1236 - compat_ulong_t hut;
1237 - compat_ulong_t srt;
1238 - compat_ulong_t spinup;
1239 - compat_ulong_t spindown;
1240 - unsigned char spindown_offset;
1241 - unsigned char select_delay;
1242 - unsigned char rps;
1243 - unsigned char tracks;
1244 - compat_ulong_t timeout;
1245 - unsigned char interleave_sect;
1246 - struct floppy_max_errors max_errors;
1247 - char flags;
1248 - char read_track;
1249 - short autodetect[8];
1250 - compat_int_t checkfreq;
1251 - compat_int_t native_format;
1252 -};
1253 -
1254 -struct compat_floppy_drive_struct {
1255 - signed char flags;
1256 - compat_ulong_t spinup_date;
1257 - compat_ulong_t select_date;
1258 - compat_ulong_t first_read_date;
1259 - short probed_format;
1260 - short track;
1261 - short maxblock;
1262 - short maxtrack;
1263 - compat_int_t generation;
1264 - compat_int_t keep_data;
1265 - compat_int_t fd_ref;
1266 - compat_int_t fd_device;
1267 - compat_int_t last_checked;
1268 - compat_caddr_t dmabuf;
1269 - compat_int_t bufblocks;
1270 -};
1271 -
1272 -struct compat_floppy_fdc_state {
1273 - compat_int_t spec1;
1274 - compat_int_t spec2;
1275 - compat_int_t dtr;
1276 - unsigned char version;
1277 - unsigned char dor;
1278 - compat_ulong_t address;
1279 - unsigned int rawcmd:2;
1280 - unsigned int reset:1;
1281 - unsigned int need_configure:1;
1282 - unsigned int perp_mode:2;
1283 - unsigned int has_fifo:1;
1284 - unsigned int driver_version;
1285 - unsigned char track[4];
1286 -};
1287 -
1288 -struct compat_floppy_write_errors {
1289 - unsigned int write_errors;
1290 - compat_ulong_t first_error_sector;
1291 - compat_int_t first_error_generation;
1292 - compat_ulong_t last_error_sector;
1293 - compat_int_t last_error_generation;
1294 - compat_uint_t badness;
1295 -};
1296 -
1297 -#define FDSETPRM32 _IOW(2, 0x42, struct compat_floppy_struct)
1298 -#define FDDEFPRM32 _IOW(2, 0x43, struct compat_floppy_struct)
1299 -#define FDSETDRVPRM32 _IOW(2, 0x90, struct compat_floppy_drive_params)
1300 -#define FDGETDRVPRM32 _IOR(2, 0x11, struct compat_floppy_drive_params)
1301 -#define FDGETDRVSTAT32 _IOR(2, 0x12, struct compat_floppy_drive_struct)
1302 -#define FDPOLLDRVSTAT32 _IOR(2, 0x13, struct compat_floppy_drive_struct)
1303 -#define FDGETFDCSTAT32 _IOR(2, 0x15, struct compat_floppy_fdc_state)
1304 -#define FDWERRORGET32 _IOR(2, 0x17, struct compat_floppy_write_errors)
1305 -
1306 -static struct {
1307 - unsigned int cmd32;
1308 - unsigned int cmd;
1309 -} fd_ioctl_trans_table[] = {
1310 - { FDSETPRM32, FDSETPRM },
1311 - { FDDEFPRM32, FDDEFPRM },
1312 - { FDGETPRM32, FDGETPRM },
1313 - { FDSETDRVPRM32, FDSETDRVPRM },
1314 - { FDGETDRVPRM32, FDGETDRVPRM },
1315 - { FDGETDRVSTAT32, FDGETDRVSTAT },
1316 - { FDPOLLDRVSTAT32, FDPOLLDRVSTAT },
1317 - { FDGETFDCSTAT32, FDGETFDCSTAT },
1318 - { FDWERRORGET32, FDWERRORGET }
1319 -};
1320 -
1321 -#define NR_FD_IOCTL_TRANS ARRAY_SIZE(fd_ioctl_trans_table)
1322 -
1323 -static int compat_fd_ioctl(struct block_device *bdev, fmode_t mode,
1324 - unsigned int cmd, unsigned long arg)
1325 -{
1326 - mm_segment_t old_fs = get_fs();
1327 - void *karg = NULL;
1328 - unsigned int kcmd = 0;
1329 - int i, err;
1330 -
1331 - for (i = 0; i < NR_FD_IOCTL_TRANS; i++)
1332 - if (cmd == fd_ioctl_trans_table[i].cmd32) {
1333 - kcmd = fd_ioctl_trans_table[i].cmd;
1334 - break;
1335 - }
1336 - if (!kcmd)
1337 - return -EINVAL;
1338 -
1339 - switch (cmd) {
1340 - case FDSETPRM32:
1341 - case FDDEFPRM32:
1342 - case FDGETPRM32:
1343 - {
1344 - compat_uptr_t name;
1345 - struct compat_floppy_struct __user *uf;
1346 - struct floppy_struct *f;
1347 -
1348 - uf = compat_ptr(arg);
1349 - f = karg = kmalloc(sizeof(struct floppy_struct), GFP_KERNEL);
1350 - if (!karg)
1351 - return -ENOMEM;
1352 - if (cmd == FDGETPRM32)
1353 - break;
1354 - err = __get_user(f->size, &uf->size);
1355 - err |= __get_user(f->sect, &uf->sect);
1356 - err |= __get_user(f->head, &uf->head);
1357 - err |= __get_user(f->track, &uf->track);
1358 - err |= __get_user(f->stretch, &uf->stretch);
1359 - err |= __get_user(f->gap, &uf->gap);
1360 - err |= __get_user(f->rate, &uf->rate);
1361 - err |= __get_user(f->spec1, &uf->spec1);
1362 - err |= __get_user(f->fmt_gap, &uf->fmt_gap);
1363 - err |= __get_user(name, &uf->name);
1364 - f->name = compat_ptr(name);
1365 - if (err) {
1366 - err = -EFAULT;
1367 - goto out;
1368 - }
1369 - break;
1370 - }
1371 - case FDSETDRVPRM32:
1372 - case FDGETDRVPRM32:
1373 - {
1374 - struct compat_floppy_drive_params __user *uf;
1375 - struct floppy_drive_params *f;
1376 -
1377 - uf = compat_ptr(arg);
1378 - f = karg = kmalloc(sizeof(struct floppy_drive_params), GFP_KERNEL);
1379 - if (!karg)
1380 - return -ENOMEM;
1381 - if (cmd == FDGETDRVPRM32)
1382 - break;
1383 - err = __get_user(f->cmos, &uf->cmos);
1384 - err |= __get_user(f->max_dtr, &uf->max_dtr);
1385 - err |= __get_user(f->hlt, &uf->hlt);
1386 - err |= __get_user(f->hut, &uf->hut);
1387 - err |= __get_user(f->srt, &uf->srt);
1388 - err |= __get_user(f->spinup, &uf->spinup);
1389 - err |= __get_user(f->spindown, &uf->spindown);
1390 - err |= __get_user(f->spindown_offset, &uf->spindown_offset);
1391 - err |= __get_user(f->select_delay, &uf->select_delay);
1392 - err |= __get_user(f->rps, &uf->rps);
1393 - err |= __get_user(f->tracks, &uf->tracks);
1394 - err |= __get_user(f->timeout, &uf->timeout);
1395 - err |= __get_user(f->interleave_sect, &uf->interleave_sect);
1396 - err |= __copy_from_user(&f->max_errors, &uf->max_errors, sizeof(f->max_errors));
1397 - err |= __get_user(f->flags, &uf->flags);
1398 - err |= __get_user(f->read_track, &uf->read_track);
1399 - err |= __copy_from_user(f->autodetect, uf->autodetect, sizeof(f->autodetect));
1400 - err |= __get_user(f->checkfreq, &uf->checkfreq);
1401 - err |= __get_user(f->native_format, &uf->native_format);
1402 - if (err) {
1403 - err = -EFAULT;
1404 - goto out;
1405 - }
1406 - break;
1407 - }
1408 - case FDGETDRVSTAT32:
1409 - case FDPOLLDRVSTAT32:
1410 - karg = kmalloc(sizeof(struct floppy_drive_struct), GFP_KERNEL);
1411 - if (!karg)
1412 - return -ENOMEM;
1413 - break;
1414 - case FDGETFDCSTAT32:
1415 - karg = kmalloc(sizeof(struct floppy_fdc_state), GFP_KERNEL);
1416 - if (!karg)
1417 - return -ENOMEM;
1418 - break;
1419 - case FDWERRORGET32:
1420 - karg = kmalloc(sizeof(struct floppy_write_errors), GFP_KERNEL);
1421 - if (!karg)
1422 - return -ENOMEM;
1423 - break;
1424 - default:
1425 - return -EINVAL;
1426 - }
1427 - set_fs(KERNEL_DS);
1428 - err = __blkdev_driver_ioctl(bdev, mode, kcmd, (unsigned long)karg);
1429 - set_fs(old_fs);
1430 - if (err)
1431 - goto out;
1432 - switch (cmd) {
1433 - case FDGETPRM32:
1434 - {
1435 - struct floppy_struct *f = karg;
1436 - struct compat_floppy_struct __user *uf = compat_ptr(arg);
1437 -
1438 - err = __put_user(f->size, &uf->size);
1439 - err |= __put_user(f->sect, &uf->sect);
1440 - err |= __put_user(f->head, &uf->head);
1441 - err |= __put_user(f->track, &uf->track);
1442 - err |= __put_user(f->stretch, &uf->stretch);
1443 - err |= __put_user(f->gap, &uf->gap);
1444 - err |= __put_user(f->rate, &uf->rate);
1445 - err |= __put_user(f->spec1, &uf->spec1);
1446 - err |= __put_user(f->fmt_gap, &uf->fmt_gap);
1447 - err |= __put_user((u64)f->name, (compat_caddr_t __user *)&uf->name);
1448 - break;
1449 - }
1450 - case FDGETDRVPRM32:
1451 - {
1452 - struct compat_floppy_drive_params __user *uf;
1453 - struct floppy_drive_params *f = karg;
1454 -
1455 - uf = compat_ptr(arg);
1456 - err = __put_user(f->cmos, &uf->cmos);
1457 - err |= __put_user(f->max_dtr, &uf->max_dtr);
1458 - err |= __put_user(f->hlt, &uf->hlt);
1459 - err |= __put_user(f->hut, &uf->hut);
1460 - err |= __put_user(f->srt, &uf->srt);
1461 - err |= __put_user(f->spinup, &uf->spinup);
1462 - err |= __put_user(f->spindown, &uf->spindown);
1463 - err |= __put_user(f->spindown_offset, &uf->spindown_offset);
1464 - err |= __put_user(f->select_delay, &uf->select_delay);
1465 - err |= __put_user(f->rps, &uf->rps);
1466 - err |= __put_user(f->tracks, &uf->tracks);
1467 - err |= __put_user(f->timeout, &uf->timeout);
1468 - err |= __put_user(f->interleave_sect, &uf->interleave_sect);
1469 - err |= __copy_to_user(&uf->max_errors, &f->max_errors, sizeof(f->max_errors));
1470 - err |= __put_user(f->flags, &uf->flags);
1471 - err |= __put_user(f->read_track, &uf->read_track);
1472 - err |= __copy_to_user(uf->autodetect, f->autodetect, sizeof(f->autodetect));
1473 - err |= __put_user(f->checkfreq, &uf->checkfreq);
1474 - err |= __put_user(f->native_format, &uf->native_format);
1475 - break;
1476 - }
1477 - case FDGETDRVSTAT32:
1478 - case FDPOLLDRVSTAT32:
1479 - {
1480 - struct compat_floppy_drive_struct __user *uf;
1481 - struct floppy_drive_struct *f = karg;
1482 -
1483 - uf = compat_ptr(arg);
1484 - err = __put_user(f->flags, &uf->flags);
1485 - err |= __put_user(f->spinup_date, &uf->spinup_date);
1486 - err |= __put_user(f->select_date, &uf->select_date);
1487 - err |= __put_user(f->first_read_date, &uf->first_read_date);
1488 - err |= __put_user(f->probed_format, &uf->probed_format);
1489 - err |= __put_user(f->track, &uf->track);
1490 - err |= __put_user(f->maxblock, &uf->maxblock);
1491 - err |= __put_user(f->maxtrack, &uf->maxtrack);
1492 - err |= __put_user(f->generation, &uf->generation);
1493 - err |= __put_user(f->keep_data, &uf->keep_data);
1494 - err |= __put_user(f->fd_ref, &uf->fd_ref);
1495 - err |= __put_user(f->fd_device, &uf->fd_device);
1496 - err |= __put_user(f->last_checked, &uf->last_checked);
1497 - err |= __put_user((u64)f->dmabuf, &uf->dmabuf);
1498 - err |= __put_user((u64)f->bufblocks, &uf->bufblocks);
1499 - break;
1500 - }
1501 - case FDGETFDCSTAT32:
1502 - {
1503 - struct compat_floppy_fdc_state __user *uf;
1504 - struct floppy_fdc_state *f = karg;
1505 -
1506 - uf = compat_ptr(arg);
1507 - err = __put_user(f->spec1, &uf->spec1);
1508 - err |= __put_user(f->spec2, &uf->spec2);
1509 - err |= __put_user(f->dtr, &uf->dtr);
1510 - err |= __put_user(f->version, &uf->version);
1511 - err |= __put_user(f->dor, &uf->dor);
1512 - err |= __put_user(f->address, &uf->address);
1513 - err |= __copy_to_user((char __user *)&uf->address + sizeof(uf->address),
1514 - (char *)&f->address + sizeof(f->address), sizeof(int));
1515 - err |= __put_user(f->driver_version, &uf->driver_version);
1516 - err |= __copy_to_user(uf->track, f->track, sizeof(f->track));
1517 - break;
1518 - }
1519 - case FDWERRORGET32:
1520 - {
1521 - struct compat_floppy_write_errors __user *uf;
1522 - struct floppy_write_errors *f = karg;
1523 -
1524 - uf = compat_ptr(arg);
1525 - err = __put_user(f->write_errors, &uf->write_errors);
1526 - err |= __put_user(f->first_error_sector, &uf->first_error_sector);
1527 - err |= __put_user(f->first_error_generation, &uf->first_error_generation);
1528 - err |= __put_user(f->last_error_sector, &uf->last_error_sector);
1529 - err |= __put_user(f->last_error_generation, &uf->last_error_generation);
1530 - err |= __put_user(f->badness, &uf->badness);
1531 - break;
1532 - }
1533 - default:
1534 - break;
1535 - }
1536 - if (err)
1537 - err = -EFAULT;
1538 -
1539 -out:
1540 - kfree(karg);
1541 - return err;
1542 -}
1543 -
1544 static int compat_blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode,
1545 unsigned cmd, unsigned long arg)
1546 {
1547 @@ -537,16 +224,6 @@ static int compat_blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode,
1548 case HDIO_GET_ADDRESS:
1549 case HDIO_GET_BUSSTATE:
1550 return compat_hdio_ioctl(bdev, mode, cmd, arg);
1551 - case FDSETPRM32:
1552 - case FDDEFPRM32:
1553 - case FDGETPRM32:
1554 - case FDSETDRVPRM32:
1555 - case FDGETDRVPRM32:
1556 - case FDGETDRVSTAT32:
1557 - case FDPOLLDRVSTAT32:
1558 - case FDGETFDCSTAT32:
1559 - case FDWERRORGET32:
1560 - return compat_fd_ioctl(bdev, mode, cmd, arg);
1561 case CDROMREADAUDIO:
1562 return compat_cdrom_read_audio(bdev, mode, cmd, arg);
1563 case CDROM_SEND_PACKET:
1564 @@ -566,23 +243,6 @@ static int compat_blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode,
1565 case HDIO_DRIVE_CMD:
1566 /* 0x330 is reserved -- it used to be HDIO_GETGEO_BIG */
1567 case 0x330:
1568 - /* 0x02 -- Floppy ioctls */
1569 - case FDMSGON:
1570 - case FDMSGOFF:
1571 - case FDSETEMSGTRESH:
1572 - case FDFLUSH:
1573 - case FDWERRORCLR:
1574 - case FDSETMAXERRS:
1575 - case FDGETMAXERRS:
1576 - case FDGETDRVTYP:
1577 - case FDEJECT:
1578 - case FDCLRPRM:
1579 - case FDFMTBEG:
1580 - case FDFMTEND:
1581 - case FDRESET:
1582 - case FDTWADDLE:
1583 - case FDFMTTRK:
1584 - case FDRAWCMD:
1585 /* CDROM stuff */
1586 case CDROMPAUSE:
1587 case CDROMRESUME:
1588 diff --git a/crypto/asymmetric_keys/Kconfig b/crypto/asymmetric_keys/Kconfig
1589 index 331f6baf2df8..13f3de68b479 100644
1590 --- a/crypto/asymmetric_keys/Kconfig
1591 +++ b/crypto/asymmetric_keys/Kconfig
1592 @@ -14,6 +14,7 @@ config ASYMMETRIC_PUBLIC_KEY_SUBTYPE
1593 select MPILIB
1594 select CRYPTO_HASH_INFO
1595 select CRYPTO_AKCIPHER
1596 + select CRYPTO_HASH
1597 help
1598 This option provides support for asymmetric public key type handling.
1599 If signature generation and/or verification are to be used,
1600 @@ -33,6 +34,7 @@ config X509_CERTIFICATE_PARSER
1601 config PKCS7_MESSAGE_PARSER
1602 tristate "PKCS#7 message parser"
1603 depends on X509_CERTIFICATE_PARSER
1604 + select CRYPTO_HASH
1605 select ASN1
1606 select OID_REGISTRY
1607 help
1608 @@ -55,6 +57,7 @@ config SIGNED_PE_FILE_VERIFICATION
1609 bool "Support for PE file signature verification"
1610 depends on PKCS7_MESSAGE_PARSER=y
1611 depends on SYSTEM_DATA_VERIFICATION
1612 + select CRYPTO_HASH
1613 select ASN1
1614 select OID_REGISTRY
1615 help
1616 diff --git a/crypto/chacha20poly1305.c b/crypto/chacha20poly1305.c
1617 index 246905bf00aa..96d842a13ffc 100644
1618 --- a/crypto/chacha20poly1305.c
1619 +++ b/crypto/chacha20poly1305.c
1620 @@ -67,6 +67,8 @@ struct chachapoly_req_ctx {
1621 unsigned int cryptlen;
1622 /* Actual AD, excluding IV */
1623 unsigned int assoclen;
1624 + /* request flags, with MAY_SLEEP cleared if needed */
1625 + u32 flags;
1626 union {
1627 struct poly_req poly;
1628 struct chacha_req chacha;
1629 @@ -76,8 +78,12 @@ struct chachapoly_req_ctx {
1630 static inline void async_done_continue(struct aead_request *req, int err,
1631 int (*cont)(struct aead_request *))
1632 {
1633 - if (!err)
1634 + if (!err) {
1635 + struct chachapoly_req_ctx *rctx = aead_request_ctx(req);
1636 +
1637 + rctx->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
1638 err = cont(req);
1639 + }
1640
1641 if (err != -EINPROGRESS && err != -EBUSY)
1642 aead_request_complete(req, err);
1643 @@ -144,7 +150,7 @@ static int chacha_decrypt(struct aead_request *req)
1644 dst = scatterwalk_ffwd(rctx->dst, req->dst, req->assoclen);
1645 }
1646
1647 - skcipher_request_set_callback(&creq->req, aead_request_flags(req),
1648 + skcipher_request_set_callback(&creq->req, rctx->flags,
1649 chacha_decrypt_done, req);
1650 skcipher_request_set_tfm(&creq->req, ctx->chacha);
1651 skcipher_request_set_crypt(&creq->req, src, dst,
1652 @@ -188,7 +194,7 @@ static int poly_tail(struct aead_request *req)
1653 memcpy(&preq->tail.cryptlen, &len, sizeof(len));
1654 sg_set_buf(preq->src, &preq->tail, sizeof(preq->tail));
1655
1656 - ahash_request_set_callback(&preq->req, aead_request_flags(req),
1657 + ahash_request_set_callback(&preq->req, rctx->flags,
1658 poly_tail_done, req);
1659 ahash_request_set_tfm(&preq->req, ctx->poly);
1660 ahash_request_set_crypt(&preq->req, preq->src,
1661 @@ -219,7 +225,7 @@ static int poly_cipherpad(struct aead_request *req)
1662 sg_init_table(preq->src, 1);
1663 sg_set_buf(preq->src, &preq->pad, padlen);
1664
1665 - ahash_request_set_callback(&preq->req, aead_request_flags(req),
1666 + ahash_request_set_callback(&preq->req, rctx->flags,
1667 poly_cipherpad_done, req);
1668 ahash_request_set_tfm(&preq->req, ctx->poly);
1669 ahash_request_set_crypt(&preq->req, preq->src, NULL, padlen);
1670 @@ -250,7 +256,7 @@ static int poly_cipher(struct aead_request *req)
1671 sg_init_table(rctx->src, 2);
1672 crypt = scatterwalk_ffwd(rctx->src, crypt, req->assoclen);
1673
1674 - ahash_request_set_callback(&preq->req, aead_request_flags(req),
1675 + ahash_request_set_callback(&preq->req, rctx->flags,
1676 poly_cipher_done, req);
1677 ahash_request_set_tfm(&preq->req, ctx->poly);
1678 ahash_request_set_crypt(&preq->req, crypt, NULL, rctx->cryptlen);
1679 @@ -280,7 +286,7 @@ static int poly_adpad(struct aead_request *req)
1680 sg_init_table(preq->src, 1);
1681 sg_set_buf(preq->src, preq->pad, padlen);
1682
1683 - ahash_request_set_callback(&preq->req, aead_request_flags(req),
1684 + ahash_request_set_callback(&preq->req, rctx->flags,
1685 poly_adpad_done, req);
1686 ahash_request_set_tfm(&preq->req, ctx->poly);
1687 ahash_request_set_crypt(&preq->req, preq->src, NULL, padlen);
1688 @@ -304,7 +310,7 @@ static int poly_ad(struct aead_request *req)
1689 struct poly_req *preq = &rctx->u.poly;
1690 int err;
1691
1692 - ahash_request_set_callback(&preq->req, aead_request_flags(req),
1693 + ahash_request_set_callback(&preq->req, rctx->flags,
1694 poly_ad_done, req);
1695 ahash_request_set_tfm(&preq->req, ctx->poly);
1696 ahash_request_set_crypt(&preq->req, req->src, NULL, rctx->assoclen);
1697 @@ -331,7 +337,7 @@ static int poly_setkey(struct aead_request *req)
1698 sg_init_table(preq->src, 1);
1699 sg_set_buf(preq->src, rctx->key, sizeof(rctx->key));
1700
1701 - ahash_request_set_callback(&preq->req, aead_request_flags(req),
1702 + ahash_request_set_callback(&preq->req, rctx->flags,
1703 poly_setkey_done, req);
1704 ahash_request_set_tfm(&preq->req, ctx->poly);
1705 ahash_request_set_crypt(&preq->req, preq->src, NULL, sizeof(rctx->key));
1706 @@ -355,7 +361,7 @@ static int poly_init(struct aead_request *req)
1707 struct poly_req *preq = &rctx->u.poly;
1708 int err;
1709
1710 - ahash_request_set_callback(&preq->req, aead_request_flags(req),
1711 + ahash_request_set_callback(&preq->req, rctx->flags,
1712 poly_init_done, req);
1713 ahash_request_set_tfm(&preq->req, ctx->poly);
1714
1715 @@ -393,7 +399,7 @@ static int poly_genkey(struct aead_request *req)
1716
1717 chacha_iv(creq->iv, req, 0);
1718
1719 - skcipher_request_set_callback(&creq->req, aead_request_flags(req),
1720 + skcipher_request_set_callback(&creq->req, rctx->flags,
1721 poly_genkey_done, req);
1722 skcipher_request_set_tfm(&creq->req, ctx->chacha);
1723 skcipher_request_set_crypt(&creq->req, creq->src, creq->src,
1724 @@ -433,7 +439,7 @@ static int chacha_encrypt(struct aead_request *req)
1725 dst = scatterwalk_ffwd(rctx->dst, req->dst, req->assoclen);
1726 }
1727
1728 - skcipher_request_set_callback(&creq->req, aead_request_flags(req),
1729 + skcipher_request_set_callback(&creq->req, rctx->flags,
1730 chacha_encrypt_done, req);
1731 skcipher_request_set_tfm(&creq->req, ctx->chacha);
1732 skcipher_request_set_crypt(&creq->req, src, dst,
1733 @@ -451,6 +457,7 @@ static int chachapoly_encrypt(struct aead_request *req)
1734 struct chachapoly_req_ctx *rctx = aead_request_ctx(req);
1735
1736 rctx->cryptlen = req->cryptlen;
1737 + rctx->flags = aead_request_flags(req);
1738
1739 /* encrypt call chain:
1740 * - chacha_encrypt/done()
1741 @@ -472,6 +479,7 @@ static int chachapoly_decrypt(struct aead_request *req)
1742 struct chachapoly_req_ctx *rctx = aead_request_ctx(req);
1743
1744 rctx->cryptlen = req->cryptlen - POLY1305_DIGEST_SIZE;
1745 + rctx->flags = aead_request_flags(req);
1746
1747 /* decrypt call chain:
1748 * - poly_genkey/done()
1749 diff --git a/crypto/ghash-generic.c b/crypto/ghash-generic.c
1750 index 12ad3e3a84e3..73b56f2f44f1 100644
1751 --- a/crypto/ghash-generic.c
1752 +++ b/crypto/ghash-generic.c
1753 @@ -34,6 +34,7 @@ static int ghash_setkey(struct crypto_shash *tfm,
1754 const u8 *key, unsigned int keylen)
1755 {
1756 struct ghash_ctx *ctx = crypto_shash_ctx(tfm);
1757 + be128 k;
1758
1759 if (keylen != GHASH_BLOCK_SIZE) {
1760 crypto_shash_set_flags(tfm, CRYPTO_TFM_RES_BAD_KEY_LEN);
1761 @@ -42,7 +43,12 @@ static int ghash_setkey(struct crypto_shash *tfm,
1762
1763 if (ctx->gf128)
1764 gf128mul_free_4k(ctx->gf128);
1765 - ctx->gf128 = gf128mul_init_4k_lle((be128 *)key);
1766 +
1767 + BUILD_BUG_ON(sizeof(k) != GHASH_BLOCK_SIZE);
1768 + memcpy(&k, key, GHASH_BLOCK_SIZE); /* avoid violating alignment rules */
1769 + ctx->gf128 = gf128mul_init_4k_lle(&k);
1770 + memzero_explicit(&k, GHASH_BLOCK_SIZE);
1771 +
1772 if (!ctx->gf128)
1773 return -ENOMEM;
1774
1775 diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
1776 index 90c38778bc1f..16f8fda89981 100644
1777 --- a/drivers/ata/libata-eh.c
1778 +++ b/drivers/ata/libata-eh.c
1779 @@ -1600,7 +1600,7 @@ static int ata_eh_read_log_10h(struct ata_device *dev,
1780 tf->hob_lbah = buf[10];
1781 tf->nsect = buf[12];
1782 tf->hob_nsect = buf[13];
1783 - if (ata_id_has_ncq_autosense(dev->id))
1784 + if (dev->class == ATA_DEV_ZAC && ata_id_has_ncq_autosense(dev->id))
1785 tf->auxiliary = buf[14] << 16 | buf[15] << 8 | buf[16];
1786
1787 return 0;
1788 @@ -1849,7 +1849,8 @@ void ata_eh_analyze_ncq_error(struct ata_link *link)
1789 memcpy(&qc->result_tf, &tf, sizeof(tf));
1790 qc->result_tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_LBA | ATA_TFLAG_LBA48;
1791 qc->err_mask |= AC_ERR_DEV | AC_ERR_NCQ;
1792 - if ((qc->result_tf.command & ATA_SENSE) || qc->result_tf.auxiliary) {
1793 + if (dev->class == ATA_DEV_ZAC &&
1794 + ((qc->result_tf.command & ATA_SENSE) || qc->result_tf.auxiliary)) {
1795 char sense_key, asc, ascq;
1796
1797 sense_key = (qc->result_tf.auxiliary >> 16) & 0xff;
1798 @@ -1903,10 +1904,11 @@ static unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc,
1799 }
1800
1801 switch (qc->dev->class) {
1802 - case ATA_DEV_ATA:
1803 case ATA_DEV_ZAC:
1804 if (stat & ATA_SENSE)
1805 ata_eh_request_sense(qc, qc->scsicmd);
1806 + /* fall through */
1807 + case ATA_DEV_ATA:
1808 if (err & ATA_ICRC)
1809 qc->err_mask |= AC_ERR_ATA_BUS;
1810 if (err & (ATA_UNC | ATA_AMNF))
1811 diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
1812 index 69c84fddfe8a..1799a1dfa46e 100644
1813 --- a/drivers/base/regmap/regmap.c
1814 +++ b/drivers/base/regmap/regmap.c
1815 @@ -1506,6 +1506,8 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg,
1816 map->format.reg_bytes +
1817 map->format.pad_bytes,
1818 val, val_len);
1819 + else
1820 + ret = -ENOTSUPP;
1821
1822 /* If that didn't work fall back on linearising by hand. */
1823 if (ret == -ENOTSUPP) {
1824 diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
1825 index 6914c6e1e1a8..6930abef42b3 100644
1826 --- a/drivers/block/floppy.c
1827 +++ b/drivers/block/floppy.c
1828 @@ -192,6 +192,7 @@ static int print_unex = 1;
1829 #include <linux/io.h>
1830 #include <linux/uaccess.h>
1831 #include <linux/async.h>
1832 +#include <linux/compat.h>
1833
1834 /*
1835 * PS/2 floppies have much slower step rates than regular floppies.
1836 @@ -2113,6 +2114,9 @@ static void setup_format_params(int track)
1837 raw_cmd->kernel_data = floppy_track_buffer;
1838 raw_cmd->length = 4 * F_SECT_PER_TRACK;
1839
1840 + if (!F_SECT_PER_TRACK)
1841 + return;
1842 +
1843 /* allow for about 30ms for data transport per track */
1844 head_shift = (F_SECT_PER_TRACK + 5) / 6;
1845
1846 @@ -3233,8 +3237,12 @@ static int set_geometry(unsigned int cmd, struct floppy_struct *g,
1847 int cnt;
1848
1849 /* sanity checking for parameters. */
1850 - if (g->sect <= 0 ||
1851 - g->head <= 0 ||
1852 + if ((int)g->sect <= 0 ||
1853 + (int)g->head <= 0 ||
1854 + /* check for overflow in max_sector */
1855 + (int)(g->sect * g->head) <= 0 ||
1856 + /* check for zero in F_SECT_PER_TRACK */
1857 + (unsigned char)((g->sect << 2) >> FD_SIZECODE(g)) == 0 ||
1858 g->track <= 0 || g->track > UDP->tracks >> STRETCH(g) ||
1859 /* check if reserved bits are set */
1860 (g->stretch & ~(FD_STRETCH | FD_SWAPSIDES | FD_SECTBASEMASK)) != 0)
1861 @@ -3378,6 +3386,24 @@ static int fd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
1862 return 0;
1863 }
1864
1865 +static bool valid_floppy_drive_params(const short autodetect[8],
1866 + int native_format)
1867 +{
1868 + size_t floppy_type_size = ARRAY_SIZE(floppy_type);
1869 + size_t i = 0;
1870 +
1871 + for (i = 0; i < 8; ++i) {
1872 + if (autodetect[i] < 0 ||
1873 + autodetect[i] >= floppy_type_size)
1874 + return false;
1875 + }
1876 +
1877 + if (native_format < 0 || native_format >= floppy_type_size)
1878 + return false;
1879 +
1880 + return true;
1881 +}
1882 +
1883 static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd,
1884 unsigned long param)
1885 {
1886 @@ -3504,6 +3530,9 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned int
1887 SUPBOUND(size, strlen((const char *)outparam) + 1);
1888 break;
1889 case FDSETDRVPRM:
1890 + if (!valid_floppy_drive_params(inparam.dp.autodetect,
1891 + inparam.dp.native_format))
1892 + return -EINVAL;
1893 *UDP = inparam.dp;
1894 break;
1895 case FDGETDRVPRM:
1896 @@ -3569,6 +3598,332 @@ static int fd_ioctl(struct block_device *bdev, fmode_t mode,
1897 return ret;
1898 }
1899
1900 +#ifdef CONFIG_COMPAT
1901 +
1902 +struct compat_floppy_drive_params {
1903 + char cmos;
1904 + compat_ulong_t max_dtr;
1905 + compat_ulong_t hlt;
1906 + compat_ulong_t hut;
1907 + compat_ulong_t srt;
1908 + compat_ulong_t spinup;
1909 + compat_ulong_t spindown;
1910 + unsigned char spindown_offset;
1911 + unsigned char select_delay;
1912 + unsigned char rps;
1913 + unsigned char tracks;
1914 + compat_ulong_t timeout;
1915 + unsigned char interleave_sect;
1916 + struct floppy_max_errors max_errors;
1917 + char flags;
1918 + char read_track;
1919 + short autodetect[8];
1920 + compat_int_t checkfreq;
1921 + compat_int_t native_format;
1922 +};
1923 +
1924 +struct compat_floppy_drive_struct {
1925 + signed char flags;
1926 + compat_ulong_t spinup_date;
1927 + compat_ulong_t select_date;
1928 + compat_ulong_t first_read_date;
1929 + short probed_format;
1930 + short track;
1931 + short maxblock;
1932 + short maxtrack;
1933 + compat_int_t generation;
1934 + compat_int_t keep_data;
1935 + compat_int_t fd_ref;
1936 + compat_int_t fd_device;
1937 + compat_int_t last_checked;
1938 + compat_caddr_t dmabuf;
1939 + compat_int_t bufblocks;
1940 +};
1941 +
1942 +struct compat_floppy_fdc_state {
1943 + compat_int_t spec1;
1944 + compat_int_t spec2;
1945 + compat_int_t dtr;
1946 + unsigned char version;
1947 + unsigned char dor;
1948 + compat_ulong_t address;
1949 + unsigned int rawcmd:2;
1950 + unsigned int reset:1;
1951 + unsigned int need_configure:1;
1952 + unsigned int perp_mode:2;
1953 + unsigned int has_fifo:1;
1954 + unsigned int driver_version;
1955 + unsigned char track[4];
1956 +};
1957 +
1958 +struct compat_floppy_write_errors {
1959 + unsigned int write_errors;
1960 + compat_ulong_t first_error_sector;
1961 + compat_int_t first_error_generation;
1962 + compat_ulong_t last_error_sector;
1963 + compat_int_t last_error_generation;
1964 + compat_uint_t badness;
1965 +};
1966 +
1967 +#define FDSETPRM32 _IOW(2, 0x42, struct compat_floppy_struct)
1968 +#define FDDEFPRM32 _IOW(2, 0x43, struct compat_floppy_struct)
1969 +#define FDSETDRVPRM32 _IOW(2, 0x90, struct compat_floppy_drive_params)
1970 +#define FDGETDRVPRM32 _IOR(2, 0x11, struct compat_floppy_drive_params)
1971 +#define FDGETDRVSTAT32 _IOR(2, 0x12, struct compat_floppy_drive_struct)
1972 +#define FDPOLLDRVSTAT32 _IOR(2, 0x13, struct compat_floppy_drive_struct)
1973 +#define FDGETFDCSTAT32 _IOR(2, 0x15, struct compat_floppy_fdc_state)
1974 +#define FDWERRORGET32 _IOR(2, 0x17, struct compat_floppy_write_errors)
1975 +
1976 +static int compat_set_geometry(struct block_device *bdev, fmode_t mode, unsigned int cmd,
1977 + struct compat_floppy_struct __user *arg)
1978 +{
1979 + struct floppy_struct v;
1980 + int drive, type;
1981 + int err;
1982 +
1983 + BUILD_BUG_ON(offsetof(struct floppy_struct, name) !=
1984 + offsetof(struct compat_floppy_struct, name));
1985 +
1986 + if (!(mode & (FMODE_WRITE | FMODE_WRITE_IOCTL)))
1987 + return -EPERM;
1988 +
1989 + memset(&v, 0, sizeof(struct floppy_struct));
1990 + if (copy_from_user(&v, arg, offsetof(struct floppy_struct, name)))
1991 + return -EFAULT;
1992 +
1993 + mutex_lock(&floppy_mutex);
1994 + drive = (long)bdev->bd_disk->private_data;
1995 + type = ITYPE(UDRS->fd_device);
1996 + err = set_geometry(cmd == FDSETPRM32 ? FDSETPRM : FDDEFPRM,
1997 + &v, drive, type, bdev);
1998 + mutex_unlock(&floppy_mutex);
1999 + return err;
2000 +}
2001 +
2002 +static int compat_get_prm(int drive,
2003 + struct compat_floppy_struct __user *arg)
2004 +{
2005 + struct compat_floppy_struct v;
2006 + struct floppy_struct *p;
2007 + int err;
2008 +
2009 + memset(&v, 0, sizeof(v));
2010 + mutex_lock(&floppy_mutex);
2011 + err = get_floppy_geometry(drive, ITYPE(UDRS->fd_device), &p);
2012 + if (err) {
2013 + mutex_unlock(&floppy_mutex);
2014 + return err;
2015 + }
2016 + memcpy(&v, p, offsetof(struct floppy_struct, name));
2017 + mutex_unlock(&floppy_mutex);
2018 + if (copy_to_user(arg, &v, sizeof(struct compat_floppy_struct)))
2019 + return -EFAULT;
2020 + return 0;
2021 +}
2022 +
2023 +static int compat_setdrvprm(int drive,
2024 + struct compat_floppy_drive_params __user *arg)
2025 +{
2026 + struct compat_floppy_drive_params v;
2027 +
2028 + if (!capable(CAP_SYS_ADMIN))
2029 + return -EPERM;
2030 + if (copy_from_user(&v, arg, sizeof(struct compat_floppy_drive_params)))
2031 + return -EFAULT;
2032 + if (!valid_floppy_drive_params(v.autodetect, v.native_format))
2033 + return -EINVAL;
2034 + mutex_lock(&floppy_mutex);
2035 + UDP->cmos = v.cmos;
2036 + UDP->max_dtr = v.max_dtr;
2037 + UDP->hlt = v.hlt;
2038 + UDP->hut = v.hut;
2039 + UDP->srt = v.srt;
2040 + UDP->spinup = v.spinup;
2041 + UDP->spindown = v.spindown;
2042 + UDP->spindown_offset = v.spindown_offset;
2043 + UDP->select_delay = v.select_delay;
2044 + UDP->rps = v.rps;
2045 + UDP->tracks = v.tracks;
2046 + UDP->timeout = v.timeout;
2047 + UDP->interleave_sect = v.interleave_sect;
2048 + UDP->max_errors = v.max_errors;
2049 + UDP->flags = v.flags;
2050 + UDP->read_track = v.read_track;
2051 + memcpy(UDP->autodetect, v.autodetect, sizeof(v.autodetect));
2052 + UDP->checkfreq = v.checkfreq;
2053 + UDP->native_format = v.native_format;
2054 + mutex_unlock(&floppy_mutex);
2055 + return 0;
2056 +}
2057 +
2058 +static int compat_getdrvprm(int drive,
2059 + struct compat_floppy_drive_params __user *arg)
2060 +{
2061 + struct compat_floppy_drive_params v;
2062 +
2063 + memset(&v, 0, sizeof(struct compat_floppy_drive_params));
2064 + mutex_lock(&floppy_mutex);
2065 + v.cmos = UDP->cmos;
2066 + v.max_dtr = UDP->max_dtr;
2067 + v.hlt = UDP->hlt;
2068 + v.hut = UDP->hut;
2069 + v.srt = UDP->srt;
2070 + v.spinup = UDP->spinup;
2071 + v.spindown = UDP->spindown;
2072 + v.spindown_offset = UDP->spindown_offset;
2073 + v.select_delay = UDP->select_delay;
2074 + v.rps = UDP->rps;
2075 + v.tracks = UDP->tracks;
2076 + v.timeout = UDP->timeout;
2077 + v.interleave_sect = UDP->interleave_sect;
2078 + v.max_errors = UDP->max_errors;
2079 + v.flags = UDP->flags;
2080 + v.read_track = UDP->read_track;
2081 + memcpy(v.autodetect, UDP->autodetect, sizeof(v.autodetect));
2082 + v.checkfreq = UDP->checkfreq;
2083 + v.native_format = UDP->native_format;
2084 + mutex_unlock(&floppy_mutex);
2085 +
2086 + if (copy_from_user(arg, &v, sizeof(struct compat_floppy_drive_params)))
2087 + return -EFAULT;
2088 + return 0;
2089 +}
2090 +
2091 +static int compat_getdrvstat(int drive, bool poll,
2092 + struct compat_floppy_drive_struct __user *arg)
2093 +{
2094 + struct compat_floppy_drive_struct v;
2095 +
2096 + memset(&v, 0, sizeof(struct compat_floppy_drive_struct));
2097 + mutex_lock(&floppy_mutex);
2098 +
2099 + if (poll) {
2100 + if (lock_fdc(drive))
2101 + goto Eintr;
2102 + if (poll_drive(true, FD_RAW_NEED_DISK) == -EINTR)
2103 + goto Eintr;
2104 + process_fd_request();
2105 + }
2106 + v.spinup_date = UDRS->spinup_date;
2107 + v.select_date = UDRS->select_date;
2108 + v.first_read_date = UDRS->first_read_date;
2109 + v.probed_format = UDRS->probed_format;
2110 + v.track = UDRS->track;
2111 + v.maxblock = UDRS->maxblock;
2112 + v.maxtrack = UDRS->maxtrack;
2113 + v.generation = UDRS->generation;
2114 + v.keep_data = UDRS->keep_data;
2115 + v.fd_ref = UDRS->fd_ref;
2116 + v.fd_device = UDRS->fd_device;
2117 + v.last_checked = UDRS->last_checked;
2118 + v.dmabuf = (uintptr_t)UDRS->dmabuf;
2119 + v.bufblocks = UDRS->bufblocks;
2120 + mutex_unlock(&floppy_mutex);
2121 +
2122 + if (copy_from_user(arg, &v, sizeof(struct compat_floppy_drive_struct)))
2123 + return -EFAULT;
2124 + return 0;
2125 +Eintr:
2126 + mutex_unlock(&floppy_mutex);
2127 + return -EINTR;
2128 +}
2129 +
2130 +static int compat_getfdcstat(int drive,
2131 + struct compat_floppy_fdc_state __user *arg)
2132 +{
2133 + struct compat_floppy_fdc_state v32;
2134 + struct floppy_fdc_state v;
2135 +
2136 + mutex_lock(&floppy_mutex);
2137 + v = *UFDCS;
2138 + mutex_unlock(&floppy_mutex);
2139 +
2140 + memset(&v32, 0, sizeof(struct compat_floppy_fdc_state));
2141 + v32.spec1 = v.spec1;
2142 + v32.spec2 = v.spec2;
2143 + v32.dtr = v.dtr;
2144 + v32.version = v.version;
2145 + v32.dor = v.dor;
2146 + v32.address = v.address;
2147 + v32.rawcmd = v.rawcmd;
2148 + v32.reset = v.reset;
2149 + v32.need_configure = v.need_configure;
2150 + v32.perp_mode = v.perp_mode;
2151 + v32.has_fifo = v.has_fifo;
2152 + v32.driver_version = v.driver_version;
2153 + memcpy(v32.track, v.track, 4);
2154 + if (copy_to_user(arg, &v32, sizeof(struct compat_floppy_fdc_state)))
2155 + return -EFAULT;
2156 + return 0;
2157 +}
2158 +
2159 +static int compat_werrorget(int drive,
2160 + struct compat_floppy_write_errors __user *arg)
2161 +{
2162 + struct compat_floppy_write_errors v32;
2163 + struct floppy_write_errors v;
2164 +
2165 + memset(&v32, 0, sizeof(struct compat_floppy_write_errors));
2166 + mutex_lock(&floppy_mutex);
2167 + v = *UDRWE;
2168 + mutex_unlock(&floppy_mutex);
2169 + v32.write_errors = v.write_errors;
2170 + v32.first_error_sector = v.first_error_sector;
2171 + v32.first_error_generation = v.first_error_generation;
2172 + v32.last_error_sector = v.last_error_sector;
2173 + v32.last_error_generation = v.last_error_generation;
2174 + v32.badness = v.badness;
2175 + if (copy_to_user(arg, &v32, sizeof(struct compat_floppy_write_errors)))
2176 + return -EFAULT;
2177 + return 0;
2178 +}
2179 +
2180 +static int fd_compat_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd,
2181 + unsigned long param)
2182 +{
2183 + int drive = (long)bdev->bd_disk->private_data;
2184 + switch (cmd) {
2185 + case FDMSGON:
2186 + case FDMSGOFF:
2187 + case FDSETEMSGTRESH:
2188 + case FDFLUSH:
2189 + case FDWERRORCLR:
2190 + case FDEJECT:
2191 + case FDCLRPRM:
2192 + case FDFMTBEG:
2193 + case FDRESET:
2194 + case FDTWADDLE:
2195 + return fd_ioctl(bdev, mode, cmd, param);
2196 + case FDSETMAXERRS:
2197 + case FDGETMAXERRS:
2198 + case FDGETDRVTYP:
2199 + case FDFMTEND:
2200 + case FDFMTTRK:
2201 + case FDRAWCMD:
2202 + return fd_ioctl(bdev, mode, cmd,
2203 + (unsigned long)compat_ptr(param));
2204 + case FDSETPRM32:
2205 + case FDDEFPRM32:
2206 + return compat_set_geometry(bdev, mode, cmd, compat_ptr(param));
2207 + case FDGETPRM32:
2208 + return compat_get_prm(drive, compat_ptr(param));
2209 + case FDSETDRVPRM32:
2210 + return compat_setdrvprm(drive, compat_ptr(param));
2211 + case FDGETDRVPRM32:
2212 + return compat_getdrvprm(drive, compat_ptr(param));
2213 + case FDPOLLDRVSTAT32:
2214 + return compat_getdrvstat(drive, true, compat_ptr(param));
2215 + case FDGETDRVSTAT32:
2216 + return compat_getdrvstat(drive, false, compat_ptr(param));
2217 + case FDGETFDCSTAT32:
2218 + return compat_getfdcstat(drive, compat_ptr(param));
2219 + case FDWERRORGET32:
2220 + return compat_werrorget(drive, compat_ptr(param));
2221 + }
2222 + return -EINVAL;
2223 +}
2224 +#endif
2225 +
2226 static void __init config_types(void)
2227 {
2228 bool has_drive = false;
2229 @@ -3891,6 +4246,9 @@ static const struct block_device_operations floppy_fops = {
2230 .getgeo = fd_getgeo,
2231 .check_events = floppy_check_events,
2232 .revalidate_disk = floppy_revalidate,
2233 +#ifdef CONFIG_COMPAT
2234 + .compat_ioctl = fd_compat_ioctl,
2235 +#endif
2236 };
2237
2238 /*
2239 diff --git a/drivers/bluetooth/hci_ath.c b/drivers/bluetooth/hci_ath.c
2240 index 0ccf6bf01ed4..c50b68bbecdc 100644
2241 --- a/drivers/bluetooth/hci_ath.c
2242 +++ b/drivers/bluetooth/hci_ath.c
2243 @@ -101,6 +101,9 @@ static int ath_open(struct hci_uart *hu)
2244
2245 BT_DBG("hu %p", hu);
2246
2247 + if (!hci_uart_has_flow_control(hu))
2248 + return -EOPNOTSUPP;
2249 +
2250 ath = kzalloc(sizeof(*ath), GFP_KERNEL);
2251 if (!ath)
2252 return -ENOMEM;
2253 diff --git a/drivers/bluetooth/hci_bcm.c b/drivers/bluetooth/hci_bcm.c
2254 index deed58013555..25042c794852 100644
2255 --- a/drivers/bluetooth/hci_bcm.c
2256 +++ b/drivers/bluetooth/hci_bcm.c
2257 @@ -279,6 +279,9 @@ static int bcm_open(struct hci_uart *hu)
2258
2259 bt_dev_dbg(hu->hdev, "hu %p", hu);
2260
2261 + if (!hci_uart_has_flow_control(hu))
2262 + return -EOPNOTSUPP;
2263 +
2264 bcm = kzalloc(sizeof(*bcm), GFP_KERNEL);
2265 if (!bcm)
2266 return -ENOMEM;
2267 diff --git a/drivers/bluetooth/hci_bcsp.c b/drivers/bluetooth/hci_bcsp.c
2268 index a2c921faaa12..34e04bf87a62 100644
2269 --- a/drivers/bluetooth/hci_bcsp.c
2270 +++ b/drivers/bluetooth/hci_bcsp.c
2271 @@ -759,6 +759,11 @@ static int bcsp_close(struct hci_uart *hu)
2272 skb_queue_purge(&bcsp->rel);
2273 skb_queue_purge(&bcsp->unrel);
2274
2275 + if (bcsp->rx_skb) {
2276 + kfree_skb(bcsp->rx_skb);
2277 + bcsp->rx_skb = NULL;
2278 + }
2279 +
2280 kfree(bcsp);
2281 return 0;
2282 }
2283 diff --git a/drivers/bluetooth/hci_intel.c b/drivers/bluetooth/hci_intel.c
2284 index 73306384af6c..f822e862b689 100644
2285 --- a/drivers/bluetooth/hci_intel.c
2286 +++ b/drivers/bluetooth/hci_intel.c
2287 @@ -407,6 +407,9 @@ static int intel_open(struct hci_uart *hu)
2288
2289 BT_DBG("hu %p", hu);
2290
2291 + if (!hci_uart_has_flow_control(hu))
2292 + return -EOPNOTSUPP;
2293 +
2294 intel = kzalloc(sizeof(*intel), GFP_KERNEL);
2295 if (!intel)
2296 return -ENOMEM;
2297 diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
2298 index 2230f9368c21..a2f6953a86f5 100644
2299 --- a/drivers/bluetooth/hci_ldisc.c
2300 +++ b/drivers/bluetooth/hci_ldisc.c
2301 @@ -263,6 +263,15 @@ static int hci_uart_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
2302 return 0;
2303 }
2304
2305 +/* Check the underlying device or tty has flow control support */
2306 +bool hci_uart_has_flow_control(struct hci_uart *hu)
2307 +{
2308 + if (hu->tty->driver->ops->tiocmget && hu->tty->driver->ops->tiocmset)
2309 + return true;
2310 +
2311 + return false;
2312 +}
2313 +
2314 /* Flow control or un-flow control the device */
2315 void hci_uart_set_flow_control(struct hci_uart *hu, bool enable)
2316 {
2317 diff --git a/drivers/bluetooth/hci_mrvl.c b/drivers/bluetooth/hci_mrvl.c
2318 index bbc4b39b1dbf..716d89a90907 100644
2319 --- a/drivers/bluetooth/hci_mrvl.c
2320 +++ b/drivers/bluetooth/hci_mrvl.c
2321 @@ -66,6 +66,9 @@ static int mrvl_open(struct hci_uart *hu)
2322
2323 BT_DBG("hu %p", hu);
2324
2325 + if (!hci_uart_has_flow_control(hu))
2326 + return -EOPNOTSUPP;
2327 +
2328 mrvl = kzalloc(sizeof(*mrvl), GFP_KERNEL);
2329 if (!mrvl)
2330 return -ENOMEM;
2331 diff --git a/drivers/bluetooth/hci_uart.h b/drivers/bluetooth/hci_uart.h
2332 index 070139513e65..aeef870e31b8 100644
2333 --- a/drivers/bluetooth/hci_uart.h
2334 +++ b/drivers/bluetooth/hci_uart.h
2335 @@ -109,6 +109,7 @@ int hci_uart_tx_wakeup(struct hci_uart *hu);
2336 int hci_uart_init_ready(struct hci_uart *hu);
2337 void hci_uart_init_tty(struct hci_uart *hu);
2338 void hci_uart_set_baudrate(struct hci_uart *hu, unsigned int speed);
2339 +bool hci_uart_has_flow_control(struct hci_uart *hu);
2340 void hci_uart_set_flow_control(struct hci_uart *hu, bool enable);
2341 void hci_uart_set_speeds(struct hci_uart *hu, unsigned int init_speed,
2342 unsigned int oper_speed);
2343 diff --git a/drivers/char/hpet.c b/drivers/char/hpet.c
2344 index 818a8d40e5c9..bedfd2412ec1 100644
2345 --- a/drivers/char/hpet.c
2346 +++ b/drivers/char/hpet.c
2347 @@ -569,8 +569,7 @@ static inline unsigned long hpet_time_div(struct hpets *hpets,
2348 unsigned long long m;
2349
2350 m = hpets->hp_tick_freq + (dis >> 1);
2351 - do_div(m, dis);
2352 - return (unsigned long)m;
2353 + return div64_ul(m, dis);
2354 }
2355
2356 static int
2357 diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
2358 index fb0cf8b74516..d32248e2ceab 100644
2359 --- a/drivers/clocksource/exynos_mct.c
2360 +++ b/drivers/clocksource/exynos_mct.c
2361 @@ -211,7 +211,7 @@ static void exynos4_frc_resume(struct clocksource *cs)
2362
2363 static struct clocksource mct_frc = {
2364 .name = "mct-frc",
2365 - .rating = 400,
2366 + .rating = 450, /* use value higher than ARM arch timer */
2367 .read = exynos4_frc_read,
2368 .mask = CLOCKSOURCE_MASK(32),
2369 .flags = CLOCK_SOURCE_IS_CONTINUOUS,
2370 @@ -466,7 +466,7 @@ static int exynos4_mct_starting_cpu(unsigned int cpu)
2371 evt->set_state_oneshot_stopped = set_state_shutdown;
2372 evt->tick_resume = set_state_shutdown;
2373 evt->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
2374 - evt->rating = 450;
2375 + evt->rating = 500; /* use value higher than ARM arch timer */
2376
2377 exynos4_mct_write(TICK_BASE_CNT, mevt->base + MCT_L_TCNTB_OFFSET);
2378
2379 diff --git a/drivers/crypto/amcc/crypto4xx_trng.c b/drivers/crypto/amcc/crypto4xx_trng.c
2380 index 368c5599515e..a194ee0ddbb6 100644
2381 --- a/drivers/crypto/amcc/crypto4xx_trng.c
2382 +++ b/drivers/crypto/amcc/crypto4xx_trng.c
2383 @@ -111,7 +111,6 @@ void ppc4xx_trng_probe(struct crypto4xx_core_device *core_dev)
2384 return;
2385
2386 err_out:
2387 - of_node_put(trng);
2388 iounmap(dev->trng_base);
2389 kfree(rng);
2390 dev->trng_base = NULL;
2391 diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c
2392 index 88caca3370f2..f8ac768ed5d7 100644
2393 --- a/drivers/crypto/caam/caamalg.c
2394 +++ b/drivers/crypto/caam/caamalg.c
2395 @@ -2015,6 +2015,7 @@ static void ablkcipher_encrypt_done(struct device *jrdev, u32 *desc, u32 err,
2396 struct ablkcipher_request *req = context;
2397 struct ablkcipher_edesc *edesc;
2398 struct crypto_ablkcipher *ablkcipher = crypto_ablkcipher_reqtfm(req);
2399 + struct caam_ctx *ctx = crypto_ablkcipher_ctx(ablkcipher);
2400 int ivsize = crypto_ablkcipher_ivsize(ablkcipher);
2401
2402 #ifdef DEBUG
2403 @@ -2040,10 +2041,11 @@ static void ablkcipher_encrypt_done(struct device *jrdev, u32 *desc, u32 err,
2404
2405 /*
2406 * The crypto API expects us to set the IV (req->info) to the last
2407 - * ciphertext block. This is used e.g. by the CTS mode.
2408 + * ciphertext block when running in CBC mode.
2409 */
2410 - scatterwalk_map_and_copy(req->info, req->dst, req->nbytes - ivsize,
2411 - ivsize, 0);
2412 + if ((ctx->class1_alg_type & OP_ALG_AAI_MASK) == OP_ALG_AAI_CBC)
2413 + scatterwalk_map_and_copy(req->info, req->dst, req->nbytes -
2414 + ivsize, ivsize, 0);
2415
2416 kfree(edesc);
2417
2418 @@ -2056,6 +2058,7 @@ static void ablkcipher_decrypt_done(struct device *jrdev, u32 *desc, u32 err,
2419 struct ablkcipher_request *req = context;
2420 struct ablkcipher_edesc *edesc;
2421 struct crypto_ablkcipher *ablkcipher = crypto_ablkcipher_reqtfm(req);
2422 + struct caam_ctx *ctx = crypto_ablkcipher_ctx(ablkcipher);
2423 int ivsize = crypto_ablkcipher_ivsize(ablkcipher);
2424
2425 #ifdef DEBUG
2426 @@ -2080,10 +2083,11 @@ static void ablkcipher_decrypt_done(struct device *jrdev, u32 *desc, u32 err,
2427
2428 /*
2429 * The crypto API expects us to set the IV (req->info) to the last
2430 - * ciphertext block.
2431 + * ciphertext block when running in CBC mode.
2432 */
2433 - scatterwalk_map_and_copy(req->info, req->src, req->nbytes - ivsize,
2434 - ivsize, 0);
2435 + if ((ctx->class1_alg_type & OP_ALG_AAI_MASK) == OP_ALG_AAI_CBC)
2436 + scatterwalk_map_and_copy(req->info, req->src, req->nbytes -
2437 + ivsize, ivsize, 0);
2438
2439 kfree(edesc);
2440
2441 diff --git a/drivers/crypto/ccp/ccp-dev.c b/drivers/crypto/ccp/ccp-dev.c
2442 index f796e36d7ec3..46d18f39fa7b 100644
2443 --- a/drivers/crypto/ccp/ccp-dev.c
2444 +++ b/drivers/crypto/ccp/ccp-dev.c
2445 @@ -40,57 +40,63 @@ struct ccp_tasklet_data {
2446 struct ccp_cmd *cmd;
2447 };
2448
2449 -/* Human-readable error strings */
2450 -char *ccp_error_codes[] = {
2451 - "",
2452 - "ERR 01: ILLEGAL_ENGINE",
2453 - "ERR 02: ILLEGAL_KEY_ID",
2454 - "ERR 03: ILLEGAL_FUNCTION_TYPE",
2455 - "ERR 04: ILLEGAL_FUNCTION_MODE",
2456 - "ERR 05: ILLEGAL_FUNCTION_ENCRYPT",
2457 - "ERR 06: ILLEGAL_FUNCTION_SIZE",
2458 - "ERR 07: Zlib_MISSING_INIT_EOM",
2459 - "ERR 08: ILLEGAL_FUNCTION_RSVD",
2460 - "ERR 09: ILLEGAL_BUFFER_LENGTH",
2461 - "ERR 10: VLSB_FAULT",
2462 - "ERR 11: ILLEGAL_MEM_ADDR",
2463 - "ERR 12: ILLEGAL_MEM_SEL",
2464 - "ERR 13: ILLEGAL_CONTEXT_ID",
2465 - "ERR 14: ILLEGAL_KEY_ADDR",
2466 - "ERR 15: 0xF Reserved",
2467 - "ERR 16: Zlib_ILLEGAL_MULTI_QUEUE",
2468 - "ERR 17: Zlib_ILLEGAL_JOBID_CHANGE",
2469 - "ERR 18: CMD_TIMEOUT",
2470 - "ERR 19: IDMA0_AXI_SLVERR",
2471 - "ERR 20: IDMA0_AXI_DECERR",
2472 - "ERR 21: 0x15 Reserved",
2473 - "ERR 22: IDMA1_AXI_SLAVE_FAULT",
2474 - "ERR 23: IDMA1_AIXI_DECERR",
2475 - "ERR 24: 0x18 Reserved",
2476 - "ERR 25: ZLIBVHB_AXI_SLVERR",
2477 - "ERR 26: ZLIBVHB_AXI_DECERR",
2478 - "ERR 27: 0x1B Reserved",
2479 - "ERR 27: ZLIB_UNEXPECTED_EOM",
2480 - "ERR 27: ZLIB_EXTRA_DATA",
2481 - "ERR 30: ZLIB_BTYPE",
2482 - "ERR 31: ZLIB_UNDEFINED_SYMBOL",
2483 - "ERR 32: ZLIB_UNDEFINED_DISTANCE_S",
2484 - "ERR 33: ZLIB_CODE_LENGTH_SYMBOL",
2485 - "ERR 34: ZLIB _VHB_ILLEGAL_FETCH",
2486 - "ERR 35: ZLIB_UNCOMPRESSED_LEN",
2487 - "ERR 36: ZLIB_LIMIT_REACHED",
2488 - "ERR 37: ZLIB_CHECKSUM_MISMATCH0",
2489 - "ERR 38: ODMA0_AXI_SLVERR",
2490 - "ERR 39: ODMA0_AXI_DECERR",
2491 - "ERR 40: 0x28 Reserved",
2492 - "ERR 41: ODMA1_AXI_SLVERR",
2493 - "ERR 42: ODMA1_AXI_DECERR",
2494 - "ERR 43: LSB_PARITY_ERR",
2495 + /* Human-readable error strings */
2496 +#define CCP_MAX_ERROR_CODE 64
2497 + static char *ccp_error_codes[] = {
2498 + "",
2499 + "ILLEGAL_ENGINE",
2500 + "ILLEGAL_KEY_ID",
2501 + "ILLEGAL_FUNCTION_TYPE",
2502 + "ILLEGAL_FUNCTION_MODE",
2503 + "ILLEGAL_FUNCTION_ENCRYPT",
2504 + "ILLEGAL_FUNCTION_SIZE",
2505 + "Zlib_MISSING_INIT_EOM",
2506 + "ILLEGAL_FUNCTION_RSVD",
2507 + "ILLEGAL_BUFFER_LENGTH",
2508 + "VLSB_FAULT",
2509 + "ILLEGAL_MEM_ADDR",
2510 + "ILLEGAL_MEM_SEL",
2511 + "ILLEGAL_CONTEXT_ID",
2512 + "ILLEGAL_KEY_ADDR",
2513 + "0xF Reserved",
2514 + "Zlib_ILLEGAL_MULTI_QUEUE",
2515 + "Zlib_ILLEGAL_JOBID_CHANGE",
2516 + "CMD_TIMEOUT",
2517 + "IDMA0_AXI_SLVERR",
2518 + "IDMA0_AXI_DECERR",
2519 + "0x15 Reserved",
2520 + "IDMA1_AXI_SLAVE_FAULT",
2521 + "IDMA1_AIXI_DECERR",
2522 + "0x18 Reserved",
2523 + "ZLIBVHB_AXI_SLVERR",
2524 + "ZLIBVHB_AXI_DECERR",
2525 + "0x1B Reserved",
2526 + "ZLIB_UNEXPECTED_EOM",
2527 + "ZLIB_EXTRA_DATA",
2528 + "ZLIB_BTYPE",
2529 + "ZLIB_UNDEFINED_SYMBOL",
2530 + "ZLIB_UNDEFINED_DISTANCE_S",
2531 + "ZLIB_CODE_LENGTH_SYMBOL",
2532 + "ZLIB _VHB_ILLEGAL_FETCH",
2533 + "ZLIB_UNCOMPRESSED_LEN",
2534 + "ZLIB_LIMIT_REACHED",
2535 + "ZLIB_CHECKSUM_MISMATCH0",
2536 + "ODMA0_AXI_SLVERR",
2537 + "ODMA0_AXI_DECERR",
2538 + "0x28 Reserved",
2539 + "ODMA1_AXI_SLVERR",
2540 + "ODMA1_AXI_DECERR",
2541 };
2542
2543 -void ccp_log_error(struct ccp_device *d, int e)
2544 +void ccp_log_error(struct ccp_device *d, unsigned int e)
2545 {
2546 - dev_err(d->dev, "CCP error: %s (0x%x)\n", ccp_error_codes[e], e);
2547 + if (WARN_ON(e >= CCP_MAX_ERROR_CODE))
2548 + return;
2549 +
2550 + if (e < ARRAY_SIZE(ccp_error_codes))
2551 + dev_err(d->dev, "CCP error %d: %s\n", e, ccp_error_codes[e]);
2552 + else
2553 + dev_err(d->dev, "CCP error %d: Unknown Error\n", e);
2554 }
2555
2556 /* List of CCPs, CCP count, read-write access lock, and access functions
2557 diff --git a/drivers/crypto/ccp/ccp-dev.h b/drivers/crypto/ccp/ccp-dev.h
2558 index 347b77108baa..cfe21d033745 100644
2559 --- a/drivers/crypto/ccp/ccp-dev.h
2560 +++ b/drivers/crypto/ccp/ccp-dev.h
2561 @@ -607,7 +607,7 @@ void ccp_platform_exit(void);
2562 void ccp_add_device(struct ccp_device *ccp);
2563 void ccp_del_device(struct ccp_device *ccp);
2564
2565 -extern void ccp_log_error(struct ccp_device *, int);
2566 +extern void ccp_log_error(struct ccp_device *, unsigned int);
2567
2568 struct ccp_device *ccp_alloc_struct(struct device *dev);
2569 bool ccp_queues_suspended(struct ccp_device *ccp);
2570 diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
2571 index 5a24a484ecc7..ea8595d2c3d8 100644
2572 --- a/drivers/crypto/talitos.c
2573 +++ b/drivers/crypto/talitos.c
2574 @@ -984,7 +984,6 @@ static void ipsec_esp_encrypt_done(struct device *dev,
2575 struct crypto_aead *authenc = crypto_aead_reqtfm(areq);
2576 unsigned int authsize = crypto_aead_authsize(authenc);
2577 struct talitos_edesc *edesc;
2578 - struct scatterlist *sg;
2579 void *icvdata;
2580
2581 edesc = container_of(desc, struct talitos_edesc, desc);
2582 @@ -998,9 +997,8 @@ static void ipsec_esp_encrypt_done(struct device *dev,
2583 else
2584 icvdata = &edesc->link_tbl[edesc->src_nents +
2585 edesc->dst_nents + 2];
2586 - sg = sg_last(areq->dst, edesc->dst_nents);
2587 - memcpy((char *)sg_virt(sg) + sg->length - authsize,
2588 - icvdata, authsize);
2589 + sg_pcopy_from_buffer(areq->dst, edesc->dst_nents ? : 1, icvdata,
2590 + authsize, areq->assoclen + areq->cryptlen);
2591 }
2592
2593 kfree(edesc);
2594 @@ -1016,7 +1014,6 @@ static void ipsec_esp_decrypt_swauth_done(struct device *dev,
2595 struct crypto_aead *authenc = crypto_aead_reqtfm(req);
2596 unsigned int authsize = crypto_aead_authsize(authenc);
2597 struct talitos_edesc *edesc;
2598 - struct scatterlist *sg;
2599 char *oicv, *icv;
2600 struct talitos_private *priv = dev_get_drvdata(dev);
2601 bool is_sec1 = has_ftr_sec1(priv);
2602 @@ -1026,9 +1023,18 @@ static void ipsec_esp_decrypt_swauth_done(struct device *dev,
2603 ipsec_esp_unmap(dev, edesc, req);
2604
2605 if (!err) {
2606 + char icvdata[SHA512_DIGEST_SIZE];
2607 + int nents = edesc->dst_nents ? : 1;
2608 + unsigned int len = req->assoclen + req->cryptlen;
2609 +
2610 /* auth check */
2611 - sg = sg_last(req->dst, edesc->dst_nents ? : 1);
2612 - icv = (char *)sg_virt(sg) + sg->length - authsize;
2613 + if (nents > 1) {
2614 + sg_pcopy_to_buffer(req->dst, nents, icvdata, authsize,
2615 + len - authsize);
2616 + icv = icvdata;
2617 + } else {
2618 + icv = (char *)sg_virt(req->dst) + len - authsize;
2619 + }
2620
2621 if (edesc->dma_len) {
2622 if (is_sec1)
2623 @@ -1458,7 +1464,6 @@ static int aead_decrypt(struct aead_request *req)
2624 struct talitos_ctx *ctx = crypto_aead_ctx(authenc);
2625 struct talitos_private *priv = dev_get_drvdata(ctx->dev);
2626 struct talitos_edesc *edesc;
2627 - struct scatterlist *sg;
2628 void *icvdata;
2629
2630 req->cryptlen -= authsize;
2631 @@ -1493,9 +1498,8 @@ static int aead_decrypt(struct aead_request *req)
2632 else
2633 icvdata = &edesc->link_tbl[0];
2634
2635 - sg = sg_last(req->src, edesc->src_nents ? : 1);
2636 -
2637 - memcpy(icvdata, (char *)sg_virt(sg) + sg->length - authsize, authsize);
2638 + sg_pcopy_to_buffer(req->src, edesc->src_nents ? : 1, icvdata, authsize,
2639 + req->assoclen + req->cryptlen - authsize);
2640
2641 return ipsec_esp(edesc, req, ipsec_esp_decrypt_swauth_done);
2642 }
2643 @@ -1544,11 +1548,15 @@ static void ablkcipher_done(struct device *dev,
2644 int err)
2645 {
2646 struct ablkcipher_request *areq = context;
2647 + struct crypto_ablkcipher *cipher = crypto_ablkcipher_reqtfm(areq);
2648 + struct talitos_ctx *ctx = crypto_ablkcipher_ctx(cipher);
2649 + unsigned int ivsize = crypto_ablkcipher_ivsize(cipher);
2650 struct talitos_edesc *edesc;
2651
2652 edesc = container_of(desc, struct talitos_edesc, desc);
2653
2654 common_nonsnoop_unmap(dev, edesc, areq);
2655 + memcpy(areq->info, ctx->iv, ivsize);
2656
2657 kfree(edesc);
2658
2659 @@ -3111,7 +3119,10 @@ static struct talitos_crypto_alg *talitos_alg_alloc(struct device *dev,
2660 alg->cra_priority = t_alg->algt.priority;
2661 else
2662 alg->cra_priority = TALITOS_CRA_PRIORITY;
2663 - alg->cra_alignmask = 0;
2664 + if (has_ftr_sec1(priv))
2665 + alg->cra_alignmask = 3;
2666 + else
2667 + alg->cra_alignmask = 0;
2668 alg->cra_ctxsize = sizeof(struct talitos_ctx);
2669 alg->cra_flags |= CRYPTO_ALG_KERN_DRIVER_ONLY;
2670
2671 diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
2672 index 84856ac75a09..9f240b2d85a5 100644
2673 --- a/drivers/dma/imx-sdma.c
2674 +++ b/drivers/dma/imx-sdma.c
2675 @@ -1821,27 +1821,6 @@ static int sdma_probe(struct platform_device *pdev)
2676 if (pdata && pdata->script_addrs)
2677 sdma_add_scripts(sdma, pdata->script_addrs);
2678
2679 - if (pdata) {
2680 - ret = sdma_get_firmware(sdma, pdata->fw_name);
2681 - if (ret)
2682 - dev_warn(&pdev->dev, "failed to get firmware from platform data\n");
2683 - } else {
2684 - /*
2685 - * Because that device tree does not encode ROM script address,
2686 - * the RAM script in firmware is mandatory for device tree
2687 - * probe, otherwise it fails.
2688 - */
2689 - ret = of_property_read_string(np, "fsl,sdma-ram-script-name",
2690 - &fw_name);
2691 - if (ret)
2692 - dev_warn(&pdev->dev, "failed to get firmware name\n");
2693 - else {
2694 - ret = sdma_get_firmware(sdma, fw_name);
2695 - if (ret)
2696 - dev_warn(&pdev->dev, "failed to get firmware from device tree\n");
2697 - }
2698 - }
2699 -
2700 sdma->dma_device.dev = &pdev->dev;
2701
2702 sdma->dma_device.device_alloc_chan_resources = sdma_alloc_chan_resources;
2703 @@ -1883,6 +1862,33 @@ static int sdma_probe(struct platform_device *pdev)
2704 of_node_put(spba_bus);
2705 }
2706
2707 + /*
2708 + * Kick off firmware loading as the very last step:
2709 + * attempt to load firmware only if we're not on the error path, because
2710 + * the firmware callback requires a fully functional and allocated sdma
2711 + * instance.
2712 + */
2713 + if (pdata) {
2714 + ret = sdma_get_firmware(sdma, pdata->fw_name);
2715 + if (ret)
2716 + dev_warn(&pdev->dev, "failed to get firmware from platform data\n");
2717 + } else {
2718 + /*
2719 + * Because that device tree does not encode ROM script address,
2720 + * the RAM script in firmware is mandatory for device tree
2721 + * probe, otherwise it fails.
2722 + */
2723 + ret = of_property_read_string(np, "fsl,sdma-ram-script-name",
2724 + &fw_name);
2725 + if (ret) {
2726 + dev_warn(&pdev->dev, "failed to get firmware name\n");
2727 + } else {
2728 + ret = sdma_get_firmware(sdma, fw_name);
2729 + if (ret)
2730 + dev_warn(&pdev->dev, "failed to get firmware from device tree\n");
2731 + }
2732 + }
2733 +
2734 return 0;
2735
2736 err_register:
2737 diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
2738 index 40d792e96b75..d59641194860 100644
2739 --- a/drivers/edac/edac_mc_sysfs.c
2740 +++ b/drivers/edac/edac_mc_sysfs.c
2741 @@ -26,7 +26,7 @@
2742 static int edac_mc_log_ue = 1;
2743 static int edac_mc_log_ce = 1;
2744 static int edac_mc_panic_on_ue;
2745 -static int edac_mc_poll_msec = 1000;
2746 +static unsigned int edac_mc_poll_msec = 1000;
2747
2748 /* Getter functions for above */
2749 int edac_mc_get_log_ue(void)
2750 @@ -45,30 +45,30 @@ int edac_mc_get_panic_on_ue(void)
2751 }
2752
2753 /* this is temporary */
2754 -int edac_mc_get_poll_msec(void)
2755 +unsigned int edac_mc_get_poll_msec(void)
2756 {
2757 return edac_mc_poll_msec;
2758 }
2759
2760 static int edac_set_poll_msec(const char *val, struct kernel_param *kp)
2761 {
2762 - unsigned long l;
2763 + unsigned int i;
2764 int ret;
2765
2766 if (!val)
2767 return -EINVAL;
2768
2769 - ret = kstrtoul(val, 0, &l);
2770 + ret = kstrtouint(val, 0, &i);
2771 if (ret)
2772 return ret;
2773
2774 - if (l < 1000)
2775 + if (i < 1000)
2776 return -EINVAL;
2777
2778 - *((unsigned long *)kp->arg) = l;
2779 + *((unsigned int *)kp->arg) = i;
2780
2781 /* notify edac_mc engine to reset the poll period */
2782 - edac_mc_reset_delay_period(l);
2783 + edac_mc_reset_delay_period(i);
2784
2785 return 0;
2786 }
2787 @@ -82,7 +82,7 @@ MODULE_PARM_DESC(edac_mc_log_ue,
2788 module_param(edac_mc_log_ce, int, 0644);
2789 MODULE_PARM_DESC(edac_mc_log_ce,
2790 "Log correctable error to console: 0=off 1=on");
2791 -module_param_call(edac_mc_poll_msec, edac_set_poll_msec, param_get_int,
2792 +module_param_call(edac_mc_poll_msec, edac_set_poll_msec, param_get_uint,
2793 &edac_mc_poll_msec, 0644);
2794 MODULE_PARM_DESC(edac_mc_poll_msec, "Polling period in milliseconds");
2795
2796 @@ -426,6 +426,8 @@ static inline int nr_pages_per_csrow(struct csrow_info *csrow)
2797 static int edac_create_csrow_object(struct mem_ctl_info *mci,
2798 struct csrow_info *csrow, int index)
2799 {
2800 + int err;
2801 +
2802 csrow->dev.type = &csrow_attr_type;
2803 csrow->dev.bus = mci->bus;
2804 csrow->dev.groups = csrow_dev_groups;
2805 @@ -438,7 +440,11 @@ static int edac_create_csrow_object(struct mem_ctl_info *mci,
2806 edac_dbg(0, "creating (virtual) csrow node %s\n",
2807 dev_name(&csrow->dev));
2808
2809 - return device_add(&csrow->dev);
2810 + err = device_add(&csrow->dev);
2811 + if (err)
2812 + put_device(&csrow->dev);
2813 +
2814 + return err;
2815 }
2816
2817 /* Create a CSROW object under specifed edac_mc_device */
2818 diff --git a/drivers/edac/edac_module.h b/drivers/edac/edac_module.h
2819 index cfaacb99c973..c36f9f721fb2 100644
2820 --- a/drivers/edac/edac_module.h
2821 +++ b/drivers/edac/edac_module.h
2822 @@ -33,7 +33,7 @@ extern int edac_mc_get_log_ue(void);
2823 extern int edac_mc_get_log_ce(void);
2824 extern int edac_mc_get_panic_on_ue(void);
2825 extern int edac_get_poll_msec(void);
2826 -extern int edac_mc_get_poll_msec(void);
2827 +extern unsigned int edac_mc_get_poll_msec(void);
2828
2829 unsigned edac_dimm_info_location(struct dimm_info *dimm, char *buf,
2830 unsigned len);
2831 diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
2832 index 038882183bdf..fc841ce24db7 100644
2833 --- a/drivers/gpio/gpio-omap.c
2834 +++ b/drivers/gpio/gpio-omap.c
2835 @@ -786,9 +786,9 @@ static void omap_gpio_irq_shutdown(struct irq_data *d)
2836
2837 raw_spin_lock_irqsave(&bank->lock, flags);
2838 bank->irq_usage &= ~(BIT(offset));
2839 - omap_set_gpio_irqenable(bank, offset, 0);
2840 - omap_clear_gpio_irqstatus(bank, offset);
2841 omap_set_gpio_triggering(bank, offset, IRQ_TYPE_NONE);
2842 + omap_clear_gpio_irqstatus(bank, offset);
2843 + omap_set_gpio_irqenable(bank, offset, 0);
2844 if (!LINE_USED(bank->mod_usage, offset))
2845 omap_clear_gpio_debounce(bank, offset);
2846 omap_disable_gpio_module(bank, offset);
2847 @@ -830,8 +830,8 @@ static void omap_gpio_mask_irq(struct irq_data *d)
2848 unsigned long flags;
2849
2850 raw_spin_lock_irqsave(&bank->lock, flags);
2851 - omap_set_gpio_irqenable(bank, offset, 0);
2852 omap_set_gpio_triggering(bank, offset, IRQ_TYPE_NONE);
2853 + omap_set_gpio_irqenable(bank, offset, 0);
2854 raw_spin_unlock_irqrestore(&bank->lock, flags);
2855 }
2856
2857 @@ -843,9 +843,6 @@ static void omap_gpio_unmask_irq(struct irq_data *d)
2858 unsigned long flags;
2859
2860 raw_spin_lock_irqsave(&bank->lock, flags);
2861 - if (trigger)
2862 - omap_set_gpio_triggering(bank, offset, trigger);
2863 -
2864 omap_set_gpio_irqenable(bank, offset, 1);
2865
2866 /*
2867 @@ -853,9 +850,13 @@ static void omap_gpio_unmask_irq(struct irq_data *d)
2868 * is cleared, thus after the handler has run. OMAP4 needs this done
2869 * after enabing the interrupt to clear the wakeup status.
2870 */
2871 - if (bank->level_mask & BIT(offset))
2872 + if (bank->regs->leveldetect0 && bank->regs->wkup_en &&
2873 + trigger & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW))
2874 omap_clear_gpio_irqstatus(bank, offset);
2875
2876 + if (trigger)
2877 + omap_set_gpio_triggering(bank, offset, trigger);
2878 +
2879 raw_spin_unlock_irqrestore(&bank->lock, flags);
2880 }
2881
2882 @@ -1585,6 +1586,8 @@ static struct omap_gpio_reg_offs omap4_gpio_regs = {
2883 .clr_dataout = OMAP4_GPIO_CLEARDATAOUT,
2884 .irqstatus = OMAP4_GPIO_IRQSTATUS0,
2885 .irqstatus2 = OMAP4_GPIO_IRQSTATUS1,
2886 + .irqstatus_raw0 = OMAP4_GPIO_IRQSTATUSRAW0,
2887 + .irqstatus_raw1 = OMAP4_GPIO_IRQSTATUSRAW1,
2888 .irqenable = OMAP4_GPIO_IRQSTATUSSET0,
2889 .irqenable2 = OMAP4_GPIO_IRQSTATUSSET1,
2890 .set_irqenable = OMAP4_GPIO_IRQSTATUSSET0,
2891 diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
2892 index 9e2fe12c2858..a3251faa3ed8 100644
2893 --- a/drivers/gpio/gpiolib.c
2894 +++ b/drivers/gpio/gpiolib.c
2895 @@ -2411,7 +2411,7 @@ static int _gpiod_get_raw_value(const struct gpio_desc *desc)
2896 int gpiod_get_raw_value(const struct gpio_desc *desc)
2897 {
2898 VALIDATE_DESC(desc);
2899 - /* Should be using gpio_get_value_cansleep() */
2900 + /* Should be using gpiod_get_raw_value_cansleep() */
2901 WARN_ON(desc->gdev->chip->can_sleep);
2902 return _gpiod_get_raw_value(desc);
2903 }
2904 @@ -2432,7 +2432,7 @@ int gpiod_get_value(const struct gpio_desc *desc)
2905 int value;
2906
2907 VALIDATE_DESC(desc);
2908 - /* Should be using gpio_get_value_cansleep() */
2909 + /* Should be using gpiod_get_value_cansleep() */
2910 WARN_ON(desc->gdev->chip->can_sleep);
2911
2912 value = _gpiod_get_raw_value(desc);
2913 @@ -2608,7 +2608,7 @@ void gpiod_set_array_value_complex(bool raw, bool can_sleep,
2914 void gpiod_set_raw_value(struct gpio_desc *desc, int value)
2915 {
2916 VALIDATE_DESC_VOID(desc);
2917 - /* Should be using gpiod_set_value_cansleep() */
2918 + /* Should be using gpiod_set_raw_value_cansleep() */
2919 WARN_ON(desc->gdev->chip->can_sleep);
2920 _gpiod_set_raw_value(desc, value);
2921 }
2922 diff --git a/drivers/gpu/drm/bridge/sii902x.c b/drivers/gpu/drm/bridge/sii902x.c
2923 index 9126d0306ab5..51e2d03995a1 100644
2924 --- a/drivers/gpu/drm/bridge/sii902x.c
2925 +++ b/drivers/gpu/drm/bridge/sii902x.c
2926 @@ -250,10 +250,11 @@ static void sii902x_bridge_mode_set(struct drm_bridge *bridge,
2927 struct regmap *regmap = sii902x->regmap;
2928 u8 buf[HDMI_INFOFRAME_SIZE(AVI)];
2929 struct hdmi_avi_infoframe frame;
2930 + u16 pixel_clock_10kHz = adj->clock / 10;
2931 int ret;
2932
2933 - buf[0] = adj->clock;
2934 - buf[1] = adj->clock >> 8;
2935 + buf[0] = pixel_clock_10kHz & 0xff;
2936 + buf[1] = pixel_clock_10kHz >> 8;
2937 buf[2] = adj->vrefresh;
2938 buf[3] = 0x00;
2939 buf[4] = adj->hdisplay;
2940 diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c
2941 index fa3f2f039a74..80993a8734e0 100644
2942 --- a/drivers/gpu/drm/bridge/tc358767.c
2943 +++ b/drivers/gpu/drm/bridge/tc358767.c
2944 @@ -1153,6 +1153,13 @@ static int tc_connector_get_modes(struct drm_connector *connector)
2945 struct tc_data *tc = connector_to_tc(connector);
2946 struct edid *edid;
2947 unsigned int count;
2948 + int ret;
2949 +
2950 + ret = tc_get_display_props(tc);
2951 + if (ret < 0) {
2952 + dev_err(tc->dev, "failed to read display props: %d\n", ret);
2953 + return 0;
2954 + }
2955
2956 if (tc->panel && tc->panel->funcs && tc->panel->funcs->get_modes) {
2957 count = tc->panel->funcs->get_modes(tc->panel);
2958 diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c
2959 index ecacb22834d7..719345074711 100644
2960 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c
2961 +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c
2962 @@ -184,6 +184,25 @@ nvkm_i2c_fini(struct nvkm_subdev *subdev, bool suspend)
2963 return 0;
2964 }
2965
2966 +static int
2967 +nvkm_i2c_preinit(struct nvkm_subdev *subdev)
2968 +{
2969 + struct nvkm_i2c *i2c = nvkm_i2c(subdev);
2970 + struct nvkm_i2c_bus *bus;
2971 + struct nvkm_i2c_pad *pad;
2972 +
2973 + /*
2974 + * We init our i2c busses as early as possible, since they may be
2975 + * needed by the vbios init scripts on some cards
2976 + */
2977 + list_for_each_entry(pad, &i2c->pad, head)
2978 + nvkm_i2c_pad_init(pad);
2979 + list_for_each_entry(bus, &i2c->bus, head)
2980 + nvkm_i2c_bus_init(bus);
2981 +
2982 + return 0;
2983 +}
2984 +
2985 static int
2986 nvkm_i2c_init(struct nvkm_subdev *subdev)
2987 {
2988 @@ -238,6 +257,7 @@ nvkm_i2c_dtor(struct nvkm_subdev *subdev)
2989 static const struct nvkm_subdev_func
2990 nvkm_i2c = {
2991 .dtor = nvkm_i2c_dtor,
2992 + .preinit = nvkm_i2c_preinit,
2993 .init = nvkm_i2c_init,
2994 .fini = nvkm_i2c_fini,
2995 .intr = nvkm_i2c_intr,
2996 diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
2997 index 5b2a9f97ff04..68a2b25deb50 100644
2998 --- a/drivers/gpu/drm/panel/panel-simple.c
2999 +++ b/drivers/gpu/drm/panel/panel-simple.c
3000 @@ -1944,7 +1944,14 @@ static int panel_simple_dsi_probe(struct mipi_dsi_device *dsi)
3001 dsi->format = desc->format;
3002 dsi->lanes = desc->lanes;
3003
3004 - return mipi_dsi_attach(dsi);
3005 + err = mipi_dsi_attach(dsi);
3006 + if (err) {
3007 + struct panel_simple *panel = dev_get_drvdata(&dsi->dev);
3008 +
3009 + drm_panel_remove(&panel->base);
3010 + }
3011 +
3012 + return err;
3013 }
3014
3015 static int panel_simple_dsi_remove(struct mipi_dsi_device *dsi)
3016 diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
3017 index 32d87c6035c9..5bed63eee5f0 100644
3018 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
3019 +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
3020 @@ -865,7 +865,8 @@ static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
3021 struct vop *vop = to_vop(crtc);
3022
3023 adjusted_mode->clock =
3024 - clk_round_rate(vop->dclk, mode->clock * 1000) / 1000;
3025 + DIV_ROUND_UP(clk_round_rate(vop->dclk, mode->clock * 1000),
3026 + 1000);
3027
3028 return true;
3029 }
3030 diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
3031 index 54639395aba0..a3559b1a3a0f 100644
3032 --- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c
3033 +++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c
3034 @@ -521,6 +521,9 @@ static int virtio_gpu_get_caps_ioctl(struct drm_device *dev,
3035 ret = wait_event_timeout(vgdev->resp_wq,
3036 atomic_read(&cache_ent->is_valid), 5 * HZ);
3037
3038 + /* is_valid check must proceed before copy of the cache entry. */
3039 + smp_rmb();
3040 +
3041 ptr = cache_ent->caps_cache;
3042
3043 copy_exit:
3044 diff --git a/drivers/gpu/drm/virtio/virtgpu_vq.c b/drivers/gpu/drm/virtio/virtgpu_vq.c
3045 index 52436b3c01bb..a1b3ea1ccb65 100644
3046 --- a/drivers/gpu/drm/virtio/virtgpu_vq.c
3047 +++ b/drivers/gpu/drm/virtio/virtgpu_vq.c
3048 @@ -618,6 +618,8 @@ static void virtio_gpu_cmd_capset_cb(struct virtio_gpu_device *vgdev,
3049 cache_ent->id == le32_to_cpu(cmd->capset_id)) {
3050 memcpy(cache_ent->caps_cache, resp->capset_data,
3051 cache_ent->size);
3052 + /* Copy must occur before is_valid is signalled. */
3053 + smp_wmb();
3054 atomic_set(&cache_ent->is_valid, 1);
3055 break;
3056 }
3057 diff --git a/drivers/gpu/ipu-v3/ipu-ic.c b/drivers/gpu/ipu-v3/ipu-ic.c
3058 index 321eb983c2f5..65d7daf944b0 100644
3059 --- a/drivers/gpu/ipu-v3/ipu-ic.c
3060 +++ b/drivers/gpu/ipu-v3/ipu-ic.c
3061 @@ -256,7 +256,7 @@ static int init_csc(struct ipu_ic *ic,
3062 writel(param, base++);
3063
3064 param = ((a[0] & 0x1fe0) >> 5) | (params->scale << 8) |
3065 - (params->sat << 9);
3066 + (params->sat << 10);
3067 writel(param, base++);
3068
3069 param = ((a[1] & 0x1f) << 27) | ((c[0][1] & 0x1ff) << 18) |
3070 diff --git a/drivers/hwtracing/intel_th/msu.c b/drivers/hwtracing/intel_th/msu.c
3071 index aadae9dc2aad..7bdd1bfbeedd 100644
3072 --- a/drivers/hwtracing/intel_th/msu.c
3073 +++ b/drivers/hwtracing/intel_th/msu.c
3074 @@ -638,7 +638,7 @@ static int msc_buffer_contig_alloc(struct msc *msc, unsigned long size)
3075 goto err_out;
3076
3077 ret = -ENOMEM;
3078 - page = alloc_pages(GFP_KERNEL | __GFP_ZERO, order);
3079 + page = alloc_pages(GFP_KERNEL | __GFP_ZERO | GFP_DMA32, order);
3080 if (!page)
3081 goto err_free_sgt;
3082
3083 diff --git a/drivers/i2c/busses/i2c-qup.c b/drivers/i2c/busses/i2c-qup.c
3084 index a8497cfdae6f..7524e17ac966 100644
3085 --- a/drivers/i2c/busses/i2c-qup.c
3086 +++ b/drivers/i2c/busses/i2c-qup.c
3087 @@ -808,6 +808,8 @@ static int qup_i2c_bam_do_xfer(struct qup_i2c_dev *qup, struct i2c_msg *msg,
3088 }
3089
3090 if (ret || qup->bus_err || qup->qup_err) {
3091 + reinit_completion(&qup->xfer);
3092 +
3093 if (qup_i2c_change_state(qup, QUP_RUN_STATE)) {
3094 dev_err(qup->dev, "change to run state timed out");
3095 goto desc_err;
3096 diff --git a/drivers/infiniband/hw/i40iw/i40iw_verbs.c b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
3097 index 095912fb3201..c3d2400e36b9 100644
3098 --- a/drivers/infiniband/hw/i40iw/i40iw_verbs.c
3099 +++ b/drivers/infiniband/hw/i40iw/i40iw_verbs.c
3100 @@ -812,6 +812,8 @@ static int i40iw_query_qp(struct ib_qp *ibqp,
3101 struct i40iw_qp *iwqp = to_iwqp(ibqp);
3102 struct i40iw_sc_qp *qp = &iwqp->sc_qp;
3103
3104 + attr->qp_state = iwqp->ibqp_state;
3105 + attr->cur_qp_state = attr->qp_state;
3106 attr->qp_access_flags = 0;
3107 attr->cap.max_send_wr = qp->qp_uk.sq_size;
3108 attr->cap.max_recv_wr = qp->qp_uk.rq_size;
3109 diff --git a/drivers/infiniband/sw/rxe/rxe_resp.c b/drivers/infiniband/sw/rxe/rxe_resp.c
3110 index 297653ab4004..5bfea23f3b60 100644
3111 --- a/drivers/infiniband/sw/rxe/rxe_resp.c
3112 +++ b/drivers/infiniband/sw/rxe/rxe_resp.c
3113 @@ -432,6 +432,7 @@ static enum resp_states check_rkey(struct rxe_qp *qp,
3114 qp->resp.va = reth_va(pkt);
3115 qp->resp.rkey = reth_rkey(pkt);
3116 qp->resp.resid = reth_len(pkt);
3117 + qp->resp.length = reth_len(pkt);
3118 }
3119 access = (pkt->mask & RXE_READ_MASK) ? IB_ACCESS_REMOTE_READ
3120 : IB_ACCESS_REMOTE_WRITE;
3121 @@ -841,7 +842,9 @@ static enum resp_states do_complete(struct rxe_qp *qp,
3122 pkt->mask & RXE_WRITE_MASK) ?
3123 IB_WC_RECV_RDMA_WITH_IMM : IB_WC_RECV;
3124 wc->vendor_err = 0;
3125 - wc->byte_len = wqe->dma.length - wqe->dma.resid;
3126 + wc->byte_len = (pkt->mask & RXE_IMMDT_MASK &&
3127 + pkt->mask & RXE_WRITE_MASK) ?
3128 + qp->resp.length : wqe->dma.length - wqe->dma.resid;
3129
3130 /* fields after byte_len are different between kernel and user
3131 * space
3132 diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.h b/drivers/infiniband/sw/rxe/rxe_verbs.h
3133 index cac1d52a08f0..47003d2a4a46 100644
3134 --- a/drivers/infiniband/sw/rxe/rxe_verbs.h
3135 +++ b/drivers/infiniband/sw/rxe/rxe_verbs.h
3136 @@ -209,6 +209,7 @@ struct rxe_resp_info {
3137 struct rxe_mem *mr;
3138 u32 resid;
3139 u32 rkey;
3140 + u32 length;
3141 u64 atomic_orig;
3142
3143 /* SRQ only */
3144 diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
3145 index 17c5bc7e8957..45504febbc2a 100644
3146 --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
3147 +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
3148 @@ -1751,6 +1751,7 @@ static int ipoib_get_vf_config(struct net_device *dev, int vf,
3149 return err;
3150
3151 ivf->vf = vf;
3152 + memcpy(ivf->mac, dev->dev_addr, dev->addr_len);
3153
3154 return 0;
3155 }
3156 diff --git a/drivers/input/tablet/gtco.c b/drivers/input/tablet/gtco.c
3157 index 339a0e2d2f86..8af736dc4b18 100644
3158 --- a/drivers/input/tablet/gtco.c
3159 +++ b/drivers/input/tablet/gtco.c
3160 @@ -78,6 +78,7 @@ Scott Hill shill@gtcocalcomp.com
3161
3162 /* Max size of a single report */
3163 #define REPORT_MAX_SIZE 10
3164 +#define MAX_COLLECTION_LEVELS 10
3165
3166
3167 /* Bitmask whether pen is in range */
3168 @@ -223,8 +224,7 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
3169 char maintype = 'x';
3170 char globtype[12];
3171 int indent = 0;
3172 - char indentstr[10] = "";
3173 -
3174 + char indentstr[MAX_COLLECTION_LEVELS + 1] = { 0 };
3175
3176 dev_dbg(ddev, "======>>>>>>PARSE<<<<<<======\n");
3177
3178 @@ -350,6 +350,13 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
3179 case TAG_MAIN_COL_START:
3180 maintype = 'S';
3181
3182 + if (indent == MAX_COLLECTION_LEVELS) {
3183 + dev_err(ddev, "Collection level %d would exceed limit of %d\n",
3184 + indent + 1,
3185 + MAX_COLLECTION_LEVELS);
3186 + break;
3187 + }
3188 +
3189 if (data == 0) {
3190 dev_dbg(ddev, "======>>>>>> Physical\n");
3191 strcpy(globtype, "Physical");
3192 @@ -369,8 +376,15 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
3193 break;
3194
3195 case TAG_MAIN_COL_END:
3196 - dev_dbg(ddev, "<<<<<<======\n");
3197 maintype = 'E';
3198 +
3199 + if (indent == 0) {
3200 + dev_err(ddev, "Collection level already at zero\n");
3201 + break;
3202 + }
3203 +
3204 + dev_dbg(ddev, "<<<<<<======\n");
3205 +
3206 indent--;
3207 for (x = 0; x < indent; x++)
3208 indentstr[x] = '-';
3209 diff --git a/drivers/isdn/hardware/mISDN/hfcsusb.c b/drivers/isdn/hardware/mISDN/hfcsusb.c
3210 index 114f3bcba1b0..c60c7998af17 100644
3211 --- a/drivers/isdn/hardware/mISDN/hfcsusb.c
3212 +++ b/drivers/isdn/hardware/mISDN/hfcsusb.c
3213 @@ -1963,6 +1963,9 @@ hfcsusb_probe(struct usb_interface *intf, const struct usb_device_id *id)
3214
3215 /* get endpoint base */
3216 idx = ((ep_addr & 0x7f) - 1) * 2;
3217 + if (idx > 15)
3218 + return -EIO;
3219 +
3220 if (ep_addr & 0x80)
3221 idx++;
3222 attr = ep->desc.bmAttributes;
3223 diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
3224 index 87ef465c6947..c1c43800c4aa 100644
3225 --- a/drivers/mailbox/mailbox.c
3226 +++ b/drivers/mailbox/mailbox.c
3227 @@ -389,11 +389,13 @@ struct mbox_chan *mbox_request_channel_byname(struct mbox_client *cl,
3228
3229 of_property_for_each_string(np, "mbox-names", prop, mbox_name) {
3230 if (!strncmp(name, mbox_name, strlen(name)))
3231 - break;
3232 + return mbox_request_channel(cl, index);
3233 index++;
3234 }
3235
3236 - return mbox_request_channel(cl, index);
3237 + dev_err(cl->dev, "%s() could not locate channel named \"%s\"\n",
3238 + __func__, name);
3239 + return ERR_PTR(-EINVAL);
3240 }
3241 EXPORT_SYMBOL_GPL(mbox_request_channel_byname);
3242
3243 diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
3244 index 9f2588eaaf5f..c5bc3e5e921e 100644
3245 --- a/drivers/md/bcache/super.c
3246 +++ b/drivers/md/bcache/super.c
3247 @@ -1405,7 +1405,7 @@ static void cache_set_flush(struct closure *cl)
3248 kobject_put(&c->internal);
3249 kobject_del(&c->kobj);
3250
3251 - if (c->gc_thread)
3252 + if (!IS_ERR_OR_NULL(c->gc_thread))
3253 kthread_stop(c->gc_thread);
3254
3255 if (!IS_ERR_OR_NULL(c->root))
3256 diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
3257 index c837defb5e4d..673ce38735ff 100644
3258 --- a/drivers/md/dm-bufio.c
3259 +++ b/drivers/md/dm-bufio.c
3260 @@ -1585,9 +1585,7 @@ dm_bufio_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
3261 unsigned long freed;
3262
3263 c = container_of(shrink, struct dm_bufio_client, shrinker);
3264 - if (sc->gfp_mask & __GFP_FS)
3265 - dm_bufio_lock(c);
3266 - else if (!dm_bufio_trylock(c))
3267 + if (!dm_bufio_trylock(c))
3268 return SHRINK_STOP;
3269
3270 freed = __scan(c, sc->nr_to_scan, sc->gfp_mask);
3271 diff --git a/drivers/media/dvb-frontends/tua6100.c b/drivers/media/dvb-frontends/tua6100.c
3272 index 6da12b9e55eb..02c734b8718b 100644
3273 --- a/drivers/media/dvb-frontends/tua6100.c
3274 +++ b/drivers/media/dvb-frontends/tua6100.c
3275 @@ -80,8 +80,8 @@ static int tua6100_set_params(struct dvb_frontend *fe)
3276 struct i2c_msg msg1 = { .addr = priv->i2c_address, .flags = 0, .buf = reg1, .len = 4 };
3277 struct i2c_msg msg2 = { .addr = priv->i2c_address, .flags = 0, .buf = reg2, .len = 3 };
3278
3279 -#define _R 4
3280 -#define _P 32
3281 +#define _R_VAL 4
3282 +#define _P_VAL 32
3283 #define _ri 4000000
3284
3285 // setup register 0
3286 @@ -96,14 +96,14 @@ static int tua6100_set_params(struct dvb_frontend *fe)
3287 else
3288 reg1[1] = 0x0c;
3289
3290 - if (_P == 64)
3291 + if (_P_VAL == 64)
3292 reg1[1] |= 0x40;
3293 if (c->frequency >= 1525000)
3294 reg1[1] |= 0x80;
3295
3296 // register 2
3297 - reg2[1] = (_R >> 8) & 0x03;
3298 - reg2[2] = _R;
3299 + reg2[1] = (_R_VAL >> 8) & 0x03;
3300 + reg2[2] = _R_VAL;
3301 if (c->frequency < 1455000)
3302 reg2[1] |= 0x1c;
3303 else if (c->frequency < 1630000)
3304 @@ -115,18 +115,18 @@ static int tua6100_set_params(struct dvb_frontend *fe)
3305 * The N divisor ratio (note: c->frequency is in kHz, but we
3306 * need it in Hz)
3307 */
3308 - prediv = (c->frequency * _R) / (_ri / 1000);
3309 - div = prediv / _P;
3310 + prediv = (c->frequency * _R_VAL) / (_ri / 1000);
3311 + div = prediv / _P_VAL;
3312 reg1[1] |= (div >> 9) & 0x03;
3313 reg1[2] = div >> 1;
3314 reg1[3] = (div << 7);
3315 - priv->frequency = ((div * _P) * (_ri / 1000)) / _R;
3316 + priv->frequency = ((div * _P_VAL) * (_ri / 1000)) / _R_VAL;
3317
3318 // Finally, calculate and store the value for A
3319 - reg1[3] |= (prediv - (div*_P)) & 0x7f;
3320 + reg1[3] |= (prediv - (div*_P_VAL)) & 0x7f;
3321
3322 -#undef _R
3323 -#undef _P
3324 +#undef _R_VAL
3325 +#undef _P_VAL
3326 #undef _ri
3327
3328 if (fe->ops.i2c_gate_ctrl)
3329 diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile
3330 index 92773b2e6225..bfe0afc209b8 100644
3331 --- a/drivers/media/i2c/Makefile
3332 +++ b/drivers/media/i2c/Makefile
3333 @@ -29,7 +29,7 @@ obj-$(CONFIG_VIDEO_ADV7393) += adv7393.o
3334 obj-$(CONFIG_VIDEO_ADV7604) += adv7604.o
3335 obj-$(CONFIG_VIDEO_ADV7842) += adv7842.o
3336 obj-$(CONFIG_VIDEO_AD9389B) += ad9389b.o
3337 -obj-$(CONFIG_VIDEO_ADV7511) += adv7511.o
3338 +obj-$(CONFIG_VIDEO_ADV7511) += adv7511-v4l2.o
3339 obj-$(CONFIG_VIDEO_VPX3220) += vpx3220.o
3340 obj-$(CONFIG_VIDEO_VS6624) += vs6624.o
3341 obj-$(CONFIG_VIDEO_BT819) += bt819.o
3342 diff --git a/drivers/media/i2c/adv7511-v4l2.c b/drivers/media/i2c/adv7511-v4l2.c
3343 new file mode 100644
3344 index 000000000000..b87c9e7ff146
3345 --- /dev/null
3346 +++ b/drivers/media/i2c/adv7511-v4l2.c
3347 @@ -0,0 +1,2008 @@
3348 +/*
3349 + * Analog Devices ADV7511 HDMI Transmitter Device Driver
3350 + *
3351 + * Copyright 2013 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
3352 + *
3353 + * This program is free software; you may redistribute it and/or modify
3354 + * it under the terms of the GNU General Public License as published by
3355 + * the Free Software Foundation; version 2 of the License.
3356 + *
3357 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
3358 + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
3359 + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
3360 + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
3361 + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
3362 + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
3363 + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
3364 + * SOFTWARE.
3365 + */
3366 +
3367 +/*
3368 + * This file is named adv7511-v4l2.c so it doesn't conflict with the Analog
3369 + * Device ADV7511 (config fragment CONFIG_DRM_I2C_ADV7511).
3370 + */
3371 +
3372 +
3373 +#include <linux/kernel.h>
3374 +#include <linux/module.h>
3375 +#include <linux/slab.h>
3376 +#include <linux/i2c.h>
3377 +#include <linux/delay.h>
3378 +#include <linux/videodev2.h>
3379 +#include <linux/gpio.h>
3380 +#include <linux/workqueue.h>
3381 +#include <linux/hdmi.h>
3382 +#include <linux/v4l2-dv-timings.h>
3383 +#include <media/v4l2-device.h>
3384 +#include <media/v4l2-common.h>
3385 +#include <media/v4l2-ctrls.h>
3386 +#include <media/v4l2-dv-timings.h>
3387 +#include <media/i2c/adv7511.h>
3388 +#include <media/cec.h>
3389 +
3390 +static int debug;
3391 +module_param(debug, int, 0644);
3392 +MODULE_PARM_DESC(debug, "debug level (0-2)");
3393 +
3394 +MODULE_DESCRIPTION("Analog Devices ADV7511 HDMI Transmitter Device Driver");
3395 +MODULE_AUTHOR("Hans Verkuil");
3396 +MODULE_LICENSE("GPL v2");
3397 +
3398 +#define MASK_ADV7511_EDID_RDY_INT 0x04
3399 +#define MASK_ADV7511_MSEN_INT 0x40
3400 +#define MASK_ADV7511_HPD_INT 0x80
3401 +
3402 +#define MASK_ADV7511_HPD_DETECT 0x40
3403 +#define MASK_ADV7511_MSEN_DETECT 0x20
3404 +#define MASK_ADV7511_EDID_RDY 0x10
3405 +
3406 +#define EDID_MAX_RETRIES (8)
3407 +#define EDID_DELAY 250
3408 +#define EDID_MAX_SEGM 8
3409 +
3410 +#define ADV7511_MAX_WIDTH 1920
3411 +#define ADV7511_MAX_HEIGHT 1200
3412 +#define ADV7511_MIN_PIXELCLOCK 20000000
3413 +#define ADV7511_MAX_PIXELCLOCK 225000000
3414 +
3415 +#define ADV7511_MAX_ADDRS (3)
3416 +
3417 +/*
3418 +**********************************************************************
3419 +*
3420 +* Arrays with configuration parameters for the ADV7511
3421 +*
3422 +**********************************************************************
3423 +*/
3424 +
3425 +struct i2c_reg_value {
3426 + unsigned char reg;
3427 + unsigned char value;
3428 +};
3429 +
3430 +struct adv7511_state_edid {
3431 + /* total number of blocks */
3432 + u32 blocks;
3433 + /* Number of segments read */
3434 + u32 segments;
3435 + u8 data[EDID_MAX_SEGM * 256];
3436 + /* Number of EDID read retries left */
3437 + unsigned read_retries;
3438 + bool complete;
3439 +};
3440 +
3441 +struct adv7511_state {
3442 + struct adv7511_platform_data pdata;
3443 + struct v4l2_subdev sd;
3444 + struct media_pad pad;
3445 + struct v4l2_ctrl_handler hdl;
3446 + int chip_revision;
3447 + u8 i2c_edid_addr;
3448 + u8 i2c_pktmem_addr;
3449 + u8 i2c_cec_addr;
3450 +
3451 + struct i2c_client *i2c_cec;
3452 + struct cec_adapter *cec_adap;
3453 + u8 cec_addr[ADV7511_MAX_ADDRS];
3454 + u8 cec_valid_addrs;
3455 + bool cec_enabled_adap;
3456 +
3457 + /* Is the adv7511 powered on? */
3458 + bool power_on;
3459 + /* Did we receive hotplug and rx-sense signals? */
3460 + bool have_monitor;
3461 + bool enabled_irq;
3462 + /* timings from s_dv_timings */
3463 + struct v4l2_dv_timings dv_timings;
3464 + u32 fmt_code;
3465 + u32 colorspace;
3466 + u32 ycbcr_enc;
3467 + u32 quantization;
3468 + u32 xfer_func;
3469 + u32 content_type;
3470 + /* controls */
3471 + struct v4l2_ctrl *hdmi_mode_ctrl;
3472 + struct v4l2_ctrl *hotplug_ctrl;
3473 + struct v4l2_ctrl *rx_sense_ctrl;
3474 + struct v4l2_ctrl *have_edid0_ctrl;
3475 + struct v4l2_ctrl *rgb_quantization_range_ctrl;
3476 + struct v4l2_ctrl *content_type_ctrl;
3477 + struct i2c_client *i2c_edid;
3478 + struct i2c_client *i2c_pktmem;
3479 + struct adv7511_state_edid edid;
3480 + /* Running counter of the number of detected EDIDs (for debugging) */
3481 + unsigned edid_detect_counter;
3482 + struct workqueue_struct *work_queue;
3483 + struct delayed_work edid_handler; /* work entry */
3484 +};
3485 +
3486 +static void adv7511_check_monitor_present_status(struct v4l2_subdev *sd);
3487 +static bool adv7511_check_edid_status(struct v4l2_subdev *sd);
3488 +static void adv7511_setup(struct v4l2_subdev *sd);
3489 +static int adv7511_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq);
3490 +static int adv7511_s_clock_freq(struct v4l2_subdev *sd, u32 freq);
3491 +
3492 +
3493 +static const struct v4l2_dv_timings_cap adv7511_timings_cap = {
3494 + .type = V4L2_DV_BT_656_1120,
3495 + /* keep this initialization for compatibility with GCC < 4.4.6 */
3496 + .reserved = { 0 },
3497 + V4L2_INIT_BT_TIMINGS(640, ADV7511_MAX_WIDTH, 350, ADV7511_MAX_HEIGHT,
3498 + ADV7511_MIN_PIXELCLOCK, ADV7511_MAX_PIXELCLOCK,
3499 + V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
3500 + V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
3501 + V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
3502 + V4L2_DV_BT_CAP_CUSTOM)
3503 +};
3504 +
3505 +static inline struct adv7511_state *get_adv7511_state(struct v4l2_subdev *sd)
3506 +{
3507 + return container_of(sd, struct adv7511_state, sd);
3508 +}
3509 +
3510 +static inline struct v4l2_subdev *to_sd(struct v4l2_ctrl *ctrl)
3511 +{
3512 + return &container_of(ctrl->handler, struct adv7511_state, hdl)->sd;
3513 +}
3514 +
3515 +/* ------------------------ I2C ----------------------------------------------- */
3516 +
3517 +static s32 adv_smbus_read_byte_data_check(struct i2c_client *client,
3518 + u8 command, bool check)
3519 +{
3520 + union i2c_smbus_data data;
3521 +
3522 + if (!i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3523 + I2C_SMBUS_READ, command,
3524 + I2C_SMBUS_BYTE_DATA, &data))
3525 + return data.byte;
3526 + if (check)
3527 + v4l_err(client, "error reading %02x, %02x\n",
3528 + client->addr, command);
3529 + return -1;
3530 +}
3531 +
3532 +static s32 adv_smbus_read_byte_data(struct i2c_client *client, u8 command)
3533 +{
3534 + int i;
3535 + for (i = 0; i < 3; i++) {
3536 + int ret = adv_smbus_read_byte_data_check(client, command, true);
3537 + if (ret >= 0) {
3538 + if (i)
3539 + v4l_err(client, "read ok after %d retries\n", i);
3540 + return ret;
3541 + }
3542 + }
3543 + v4l_err(client, "read failed\n");
3544 + return -1;
3545 +}
3546 +
3547 +static int adv7511_rd(struct v4l2_subdev *sd, u8 reg)
3548 +{
3549 + struct i2c_client *client = v4l2_get_subdevdata(sd);
3550 +
3551 + return adv_smbus_read_byte_data(client, reg);
3552 +}
3553 +
3554 +static int adv7511_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
3555 +{
3556 + struct i2c_client *client = v4l2_get_subdevdata(sd);
3557 + int ret;
3558 + int i;
3559 +
3560 + for (i = 0; i < 3; i++) {
3561 + ret = i2c_smbus_write_byte_data(client, reg, val);
3562 + if (ret == 0)
3563 + return 0;
3564 + }
3565 + v4l2_err(sd, "%s: i2c write error\n", __func__);
3566 + return ret;
3567 +}
3568 +
3569 +/* To set specific bits in the register, a clear-mask is given (to be AND-ed),
3570 + and then the value-mask (to be OR-ed). */
3571 +static inline void adv7511_wr_and_or(struct v4l2_subdev *sd, u8 reg, u8 clr_mask, u8 val_mask)
3572 +{
3573 + adv7511_wr(sd, reg, (adv7511_rd(sd, reg) & clr_mask) | val_mask);
3574 +}
3575 +
3576 +static int adv_smbus_read_i2c_block_data(struct i2c_client *client,
3577 + u8 command, unsigned length, u8 *values)
3578 +{
3579 + union i2c_smbus_data data;
3580 + int ret;
3581 +
3582 + if (length > I2C_SMBUS_BLOCK_MAX)
3583 + length = I2C_SMBUS_BLOCK_MAX;
3584 + data.block[0] = length;
3585 +
3586 + ret = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3587 + I2C_SMBUS_READ, command,
3588 + I2C_SMBUS_I2C_BLOCK_DATA, &data);
3589 + memcpy(values, data.block + 1, length);
3590 + return ret;
3591 +}
3592 +
3593 +static void adv7511_edid_rd(struct v4l2_subdev *sd, uint16_t len, uint8_t *buf)
3594 +{
3595 + struct adv7511_state *state = get_adv7511_state(sd);
3596 + int i;
3597 + int err = 0;
3598 +
3599 + v4l2_dbg(1, debug, sd, "%s:\n", __func__);
3600 +
3601 + for (i = 0; !err && i < len; i += I2C_SMBUS_BLOCK_MAX)
3602 + err = adv_smbus_read_i2c_block_data(state->i2c_edid, i,
3603 + I2C_SMBUS_BLOCK_MAX, buf + i);
3604 + if (err)
3605 + v4l2_err(sd, "%s: i2c read error\n", __func__);
3606 +}
3607 +
3608 +static inline int adv7511_cec_read(struct v4l2_subdev *sd, u8 reg)
3609 +{
3610 + struct adv7511_state *state = get_adv7511_state(sd);
3611 +
3612 + return i2c_smbus_read_byte_data(state->i2c_cec, reg);
3613 +}
3614 +
3615 +static int adv7511_cec_write(struct v4l2_subdev *sd, u8 reg, u8 val)
3616 +{
3617 + struct adv7511_state *state = get_adv7511_state(sd);
3618 + int ret;
3619 + int i;
3620 +
3621 + for (i = 0; i < 3; i++) {
3622 + ret = i2c_smbus_write_byte_data(state->i2c_cec, reg, val);
3623 + if (ret == 0)
3624 + return 0;
3625 + }
3626 + v4l2_err(sd, "%s: I2C Write Problem\n", __func__);
3627 + return ret;
3628 +}
3629 +
3630 +static inline int adv7511_cec_write_and_or(struct v4l2_subdev *sd, u8 reg, u8 mask,
3631 + u8 val)
3632 +{
3633 + return adv7511_cec_write(sd, reg, (adv7511_cec_read(sd, reg) & mask) | val);
3634 +}
3635 +
3636 +static int adv7511_pktmem_rd(struct v4l2_subdev *sd, u8 reg)
3637 +{
3638 + struct adv7511_state *state = get_adv7511_state(sd);
3639 +
3640 + return adv_smbus_read_byte_data(state->i2c_pktmem, reg);
3641 +}
3642 +
3643 +static int adv7511_pktmem_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
3644 +{
3645 + struct adv7511_state *state = get_adv7511_state(sd);
3646 + int ret;
3647 + int i;
3648 +
3649 + for (i = 0; i < 3; i++) {
3650 + ret = i2c_smbus_write_byte_data(state->i2c_pktmem, reg, val);
3651 + if (ret == 0)
3652 + return 0;
3653 + }
3654 + v4l2_err(sd, "%s: i2c write error\n", __func__);
3655 + return ret;
3656 +}
3657 +
3658 +/* To set specific bits in the register, a clear-mask is given (to be AND-ed),
3659 + and then the value-mask (to be OR-ed). */
3660 +static inline void adv7511_pktmem_wr_and_or(struct v4l2_subdev *sd, u8 reg, u8 clr_mask, u8 val_mask)
3661 +{
3662 + adv7511_pktmem_wr(sd, reg, (adv7511_pktmem_rd(sd, reg) & clr_mask) | val_mask);
3663 +}
3664 +
3665 +static inline bool adv7511_have_hotplug(struct v4l2_subdev *sd)
3666 +{
3667 + return adv7511_rd(sd, 0x42) & MASK_ADV7511_HPD_DETECT;
3668 +}
3669 +
3670 +static inline bool adv7511_have_rx_sense(struct v4l2_subdev *sd)
3671 +{
3672 + return adv7511_rd(sd, 0x42) & MASK_ADV7511_MSEN_DETECT;
3673 +}
3674 +
3675 +static void adv7511_csc_conversion_mode(struct v4l2_subdev *sd, u8 mode)
3676 +{
3677 + adv7511_wr_and_or(sd, 0x18, 0x9f, (mode & 0x3)<<5);
3678 +}
3679 +
3680 +static void adv7511_csc_coeff(struct v4l2_subdev *sd,
3681 + u16 A1, u16 A2, u16 A3, u16 A4,
3682 + u16 B1, u16 B2, u16 B3, u16 B4,
3683 + u16 C1, u16 C2, u16 C3, u16 C4)
3684 +{
3685 + /* A */
3686 + adv7511_wr_and_or(sd, 0x18, 0xe0, A1>>8);
3687 + adv7511_wr(sd, 0x19, A1);
3688 + adv7511_wr_and_or(sd, 0x1A, 0xe0, A2>>8);
3689 + adv7511_wr(sd, 0x1B, A2);
3690 + adv7511_wr_and_or(sd, 0x1c, 0xe0, A3>>8);
3691 + adv7511_wr(sd, 0x1d, A3);
3692 + adv7511_wr_and_or(sd, 0x1e, 0xe0, A4>>8);
3693 + adv7511_wr(sd, 0x1f, A4);
3694 +
3695 + /* B */
3696 + adv7511_wr_and_or(sd, 0x20, 0xe0, B1>>8);
3697 + adv7511_wr(sd, 0x21, B1);
3698 + adv7511_wr_and_or(sd, 0x22, 0xe0, B2>>8);
3699 + adv7511_wr(sd, 0x23, B2);
3700 + adv7511_wr_and_or(sd, 0x24, 0xe0, B3>>8);
3701 + adv7511_wr(sd, 0x25, B3);
3702 + adv7511_wr_and_or(sd, 0x26, 0xe0, B4>>8);
3703 + adv7511_wr(sd, 0x27, B4);
3704 +
3705 + /* C */
3706 + adv7511_wr_and_or(sd, 0x28, 0xe0, C1>>8);
3707 + adv7511_wr(sd, 0x29, C1);
3708 + adv7511_wr_and_or(sd, 0x2A, 0xe0, C2>>8);
3709 + adv7511_wr(sd, 0x2B, C2);
3710 + adv7511_wr_and_or(sd, 0x2C, 0xe0, C3>>8);
3711 + adv7511_wr(sd, 0x2D, C3);
3712 + adv7511_wr_and_or(sd, 0x2E, 0xe0, C4>>8);
3713 + adv7511_wr(sd, 0x2F, C4);
3714 +}
3715 +
3716 +static void adv7511_csc_rgb_full2limit(struct v4l2_subdev *sd, bool enable)
3717 +{
3718 + if (enable) {
3719 + u8 csc_mode = 0;
3720 + adv7511_csc_conversion_mode(sd, csc_mode);
3721 + adv7511_csc_coeff(sd,
3722 + 4096-564, 0, 0, 256,
3723 + 0, 4096-564, 0, 256,
3724 + 0, 0, 4096-564, 256);
3725 + /* enable CSC */
3726 + adv7511_wr_and_or(sd, 0x18, 0x7f, 0x80);
3727 + /* AVI infoframe: Limited range RGB (16-235) */
3728 + adv7511_wr_and_or(sd, 0x57, 0xf3, 0x04);
3729 + } else {
3730 + /* disable CSC */
3731 + adv7511_wr_and_or(sd, 0x18, 0x7f, 0x0);
3732 + /* AVI infoframe: Full range RGB (0-255) */
3733 + adv7511_wr_and_or(sd, 0x57, 0xf3, 0x08);
3734 + }
3735 +}
3736 +
3737 +static void adv7511_set_rgb_quantization_mode(struct v4l2_subdev *sd, struct v4l2_ctrl *ctrl)
3738 +{
3739 + struct adv7511_state *state = get_adv7511_state(sd);
3740 +
3741 + /* Only makes sense for RGB formats */
3742 + if (state->fmt_code != MEDIA_BUS_FMT_RGB888_1X24) {
3743 + /* so just keep quantization */
3744 + adv7511_csc_rgb_full2limit(sd, false);
3745 + return;
3746 + }
3747 +
3748 + switch (ctrl->val) {
3749 + case V4L2_DV_RGB_RANGE_AUTO:
3750 + /* automatic */
3751 + if (state->dv_timings.bt.flags & V4L2_DV_FL_IS_CE_VIDEO) {
3752 + /* CE format, RGB limited range (16-235) */
3753 + adv7511_csc_rgb_full2limit(sd, true);
3754 + } else {
3755 + /* not CE format, RGB full range (0-255) */
3756 + adv7511_csc_rgb_full2limit(sd, false);
3757 + }
3758 + break;
3759 + case V4L2_DV_RGB_RANGE_LIMITED:
3760 + /* RGB limited range (16-235) */
3761 + adv7511_csc_rgb_full2limit(sd, true);
3762 + break;
3763 + case V4L2_DV_RGB_RANGE_FULL:
3764 + /* RGB full range (0-255) */
3765 + adv7511_csc_rgb_full2limit(sd, false);
3766 + break;
3767 + }
3768 +}
3769 +
3770 +/* ------------------------------ CTRL OPS ------------------------------ */
3771 +
3772 +static int adv7511_s_ctrl(struct v4l2_ctrl *ctrl)
3773 +{
3774 + struct v4l2_subdev *sd = to_sd(ctrl);
3775 + struct adv7511_state *state = get_adv7511_state(sd);
3776 +
3777 + v4l2_dbg(1, debug, sd, "%s: ctrl id: %d, ctrl->val %d\n", __func__, ctrl->id, ctrl->val);
3778 +
3779 + if (state->hdmi_mode_ctrl == ctrl) {
3780 + /* Set HDMI or DVI-D */
3781 + adv7511_wr_and_or(sd, 0xaf, 0xfd, ctrl->val == V4L2_DV_TX_MODE_HDMI ? 0x02 : 0x00);
3782 + return 0;
3783 + }
3784 + if (state->rgb_quantization_range_ctrl == ctrl) {
3785 + adv7511_set_rgb_quantization_mode(sd, ctrl);
3786 + return 0;
3787 + }
3788 + if (state->content_type_ctrl == ctrl) {
3789 + u8 itc, cn;
3790 +
3791 + state->content_type = ctrl->val;
3792 + itc = state->content_type != V4L2_DV_IT_CONTENT_TYPE_NO_ITC;
3793 + cn = itc ? state->content_type : V4L2_DV_IT_CONTENT_TYPE_GRAPHICS;
3794 + adv7511_wr_and_or(sd, 0x57, 0x7f, itc << 7);
3795 + adv7511_wr_and_or(sd, 0x59, 0xcf, cn << 4);
3796 + return 0;
3797 + }
3798 +
3799 + return -EINVAL;
3800 +}
3801 +
3802 +static const struct v4l2_ctrl_ops adv7511_ctrl_ops = {
3803 + .s_ctrl = adv7511_s_ctrl,
3804 +};
3805 +
3806 +/* ---------------------------- CORE OPS ------------------------------------------- */
3807 +
3808 +#ifdef CONFIG_VIDEO_ADV_DEBUG
3809 +static void adv7511_inv_register(struct v4l2_subdev *sd)
3810 +{
3811 + struct adv7511_state *state = get_adv7511_state(sd);
3812 +
3813 + v4l2_info(sd, "0x000-0x0ff: Main Map\n");
3814 + if (state->i2c_cec)
3815 + v4l2_info(sd, "0x100-0x1ff: CEC Map\n");
3816 +}
3817 +
3818 +static int adv7511_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
3819 +{
3820 + struct adv7511_state *state = get_adv7511_state(sd);
3821 +
3822 + reg->size = 1;
3823 + switch (reg->reg >> 8) {
3824 + case 0:
3825 + reg->val = adv7511_rd(sd, reg->reg & 0xff);
3826 + break;
3827 + case 1:
3828 + if (state->i2c_cec) {
3829 + reg->val = adv7511_cec_read(sd, reg->reg & 0xff);
3830 + break;
3831 + }
3832 + /* fall through */
3833 + default:
3834 + v4l2_info(sd, "Register %03llx not supported\n", reg->reg);
3835 + adv7511_inv_register(sd);
3836 + break;
3837 + }
3838 + return 0;
3839 +}
3840 +
3841 +static int adv7511_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg)
3842 +{
3843 + struct adv7511_state *state = get_adv7511_state(sd);
3844 +
3845 + switch (reg->reg >> 8) {
3846 + case 0:
3847 + adv7511_wr(sd, reg->reg & 0xff, reg->val & 0xff);
3848 + break;
3849 + case 1:
3850 + if (state->i2c_cec) {
3851 + adv7511_cec_write(sd, reg->reg & 0xff, reg->val & 0xff);
3852 + break;
3853 + }
3854 + /* fall through */
3855 + default:
3856 + v4l2_info(sd, "Register %03llx not supported\n", reg->reg);
3857 + adv7511_inv_register(sd);
3858 + break;
3859 + }
3860 + return 0;
3861 +}
3862 +#endif
3863 +
3864 +struct adv7511_cfg_read_infoframe {
3865 + const char *desc;
3866 + u8 present_reg;
3867 + u8 present_mask;
3868 + u8 header[3];
3869 + u16 payload_addr;
3870 +};
3871 +
3872 +static u8 hdmi_infoframe_checksum(u8 *ptr, size_t size)
3873 +{
3874 + u8 csum = 0;
3875 + size_t i;
3876 +
3877 + /* compute checksum */
3878 + for (i = 0; i < size; i++)
3879 + csum += ptr[i];
3880 +
3881 + return 256 - csum;
3882 +}
3883 +
3884 +static void log_infoframe(struct v4l2_subdev *sd, const struct adv7511_cfg_read_infoframe *cri)
3885 +{
3886 + struct i2c_client *client = v4l2_get_subdevdata(sd);
3887 + struct device *dev = &client->dev;
3888 + union hdmi_infoframe frame;
3889 + u8 buffer[32];
3890 + u8 len;
3891 + int i;
3892 +
3893 + if (!(adv7511_rd(sd, cri->present_reg) & cri->present_mask)) {
3894 + v4l2_info(sd, "%s infoframe not transmitted\n", cri->desc);
3895 + return;
3896 + }
3897 +
3898 + memcpy(buffer, cri->header, sizeof(cri->header));
3899 +
3900 + len = buffer[2];
3901 +
3902 + if (len + 4 > sizeof(buffer)) {
3903 + v4l2_err(sd, "%s: invalid %s infoframe length %d\n", __func__, cri->desc, len);
3904 + return;
3905 + }
3906 +
3907 + if (cri->payload_addr >= 0x100) {
3908 + for (i = 0; i < len; i++)
3909 + buffer[i + 4] = adv7511_pktmem_rd(sd, cri->payload_addr + i - 0x100);
3910 + } else {
3911 + for (i = 0; i < len; i++)
3912 + buffer[i + 4] = adv7511_rd(sd, cri->payload_addr + i);
3913 + }
3914 + buffer[3] = 0;
3915 + buffer[3] = hdmi_infoframe_checksum(buffer, len + 4);
3916 +
3917 + if (hdmi_infoframe_unpack(&frame, buffer) < 0) {
3918 + v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__, cri->desc);
3919 + return;
3920 + }
3921 +
3922 + hdmi_infoframe_log(KERN_INFO, dev, &frame);
3923 +}
3924 +
3925 +static void adv7511_log_infoframes(struct v4l2_subdev *sd)
3926 +{
3927 + static const struct adv7511_cfg_read_infoframe cri[] = {
3928 + { "AVI", 0x44, 0x10, { 0x82, 2, 13 }, 0x55 },
3929 + { "Audio", 0x44, 0x08, { 0x84, 1, 10 }, 0x73 },
3930 + { "SDP", 0x40, 0x40, { 0x83, 1, 25 }, 0x103 },
3931 + };
3932 + int i;
3933 +
3934 + for (i = 0; i < ARRAY_SIZE(cri); i++)
3935 + log_infoframe(sd, &cri[i]);
3936 +}
3937 +
3938 +static int adv7511_log_status(struct v4l2_subdev *sd)
3939 +{
3940 + struct adv7511_state *state = get_adv7511_state(sd);
3941 + struct adv7511_state_edid *edid = &state->edid;
3942 + int i;
3943 +
3944 + static const char * const states[] = {
3945 + "in reset",
3946 + "reading EDID",
3947 + "idle",
3948 + "initializing HDCP",
3949 + "HDCP enabled",
3950 + "initializing HDCP repeater",
3951 + "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"
3952 + };
3953 + static const char * const errors[] = {
3954 + "no error",
3955 + "bad receiver BKSV",
3956 + "Ri mismatch",
3957 + "Pj mismatch",
3958 + "i2c error",
3959 + "timed out",
3960 + "max repeater cascade exceeded",
3961 + "hash check failed",
3962 + "too many devices",
3963 + "9", "A", "B", "C", "D", "E", "F"
3964 + };
3965 +
3966 + v4l2_info(sd, "power %s\n", state->power_on ? "on" : "off");
3967 + v4l2_info(sd, "%s hotplug, %s Rx Sense, %s EDID (%d block(s))\n",
3968 + (adv7511_rd(sd, 0x42) & MASK_ADV7511_HPD_DETECT) ? "detected" : "no",
3969 + (adv7511_rd(sd, 0x42) & MASK_ADV7511_MSEN_DETECT) ? "detected" : "no",
3970 + edid->segments ? "found" : "no",
3971 + edid->blocks);
3972 + v4l2_info(sd, "%s output %s\n",
3973 + (adv7511_rd(sd, 0xaf) & 0x02) ?
3974 + "HDMI" : "DVI-D",
3975 + (adv7511_rd(sd, 0xa1) & 0x3c) ?
3976 + "disabled" : "enabled");
3977 + v4l2_info(sd, "state: %s, error: %s, detect count: %u, msk/irq: %02x/%02x\n",
3978 + states[adv7511_rd(sd, 0xc8) & 0xf],
3979 + errors[adv7511_rd(sd, 0xc8) >> 4], state->edid_detect_counter,
3980 + adv7511_rd(sd, 0x94), adv7511_rd(sd, 0x96));
3981 + v4l2_info(sd, "RGB quantization: %s range\n", adv7511_rd(sd, 0x18) & 0x80 ? "limited" : "full");
3982 + if (adv7511_rd(sd, 0xaf) & 0x02) {
3983 + /* HDMI only */
3984 + u8 manual_cts = adv7511_rd(sd, 0x0a) & 0x80;
3985 + u32 N = (adv7511_rd(sd, 0x01) & 0xf) << 16 |
3986 + adv7511_rd(sd, 0x02) << 8 |
3987 + adv7511_rd(sd, 0x03);
3988 + u8 vic_detect = adv7511_rd(sd, 0x3e) >> 2;
3989 + u8 vic_sent = adv7511_rd(sd, 0x3d) & 0x3f;
3990 + u32 CTS;
3991 +
3992 + if (manual_cts)
3993 + CTS = (adv7511_rd(sd, 0x07) & 0xf) << 16 |
3994 + adv7511_rd(sd, 0x08) << 8 |
3995 + adv7511_rd(sd, 0x09);
3996 + else
3997 + CTS = (adv7511_rd(sd, 0x04) & 0xf) << 16 |
3998 + adv7511_rd(sd, 0x05) << 8 |
3999 + adv7511_rd(sd, 0x06);
4000 + v4l2_info(sd, "CTS %s mode: N %d, CTS %d\n",
4001 + manual_cts ? "manual" : "automatic", N, CTS);
4002 + v4l2_info(sd, "VIC: detected %d, sent %d\n",
4003 + vic_detect, vic_sent);
4004 + adv7511_log_infoframes(sd);
4005 + }
4006 + if (state->dv_timings.type == V4L2_DV_BT_656_1120)
4007 + v4l2_print_dv_timings(sd->name, "timings: ",
4008 + &state->dv_timings, false);
4009 + else
4010 + v4l2_info(sd, "no timings set\n");
4011 + v4l2_info(sd, "i2c edid addr: 0x%x\n", state->i2c_edid_addr);
4012 +
4013 + if (state->i2c_cec == NULL)
4014 + return 0;
4015 +
4016 + v4l2_info(sd, "i2c cec addr: 0x%x\n", state->i2c_cec_addr);
4017 +
4018 + v4l2_info(sd, "CEC: %s\n", state->cec_enabled_adap ?
4019 + "enabled" : "disabled");
4020 + if (state->cec_enabled_adap) {
4021 + for (i = 0; i < ADV7511_MAX_ADDRS; i++) {
4022 + bool is_valid = state->cec_valid_addrs & (1 << i);
4023 +
4024 + if (is_valid)
4025 + v4l2_info(sd, "CEC Logical Address: 0x%x\n",
4026 + state->cec_addr[i]);
4027 + }
4028 + }
4029 + v4l2_info(sd, "i2c pktmem addr: 0x%x\n", state->i2c_pktmem_addr);
4030 + return 0;
4031 +}
4032 +
4033 +/* Power up/down adv7511 */
4034 +static int adv7511_s_power(struct v4l2_subdev *sd, int on)
4035 +{
4036 + struct adv7511_state *state = get_adv7511_state(sd);
4037 + const int retries = 20;
4038 + int i;
4039 +
4040 + v4l2_dbg(1, debug, sd, "%s: power %s\n", __func__, on ? "on" : "off");
4041 +
4042 + state->power_on = on;
4043 +
4044 + if (!on) {
4045 + /* Power down */
4046 + adv7511_wr_and_or(sd, 0x41, 0xbf, 0x40);
4047 + return true;
4048 + }
4049 +
4050 + /* Power up */
4051 + /* The adv7511 does not always come up immediately.
4052 + Retry multiple times. */
4053 + for (i = 0; i < retries; i++) {
4054 + adv7511_wr_and_or(sd, 0x41, 0xbf, 0x0);
4055 + if ((adv7511_rd(sd, 0x41) & 0x40) == 0)
4056 + break;
4057 + adv7511_wr_and_or(sd, 0x41, 0xbf, 0x40);
4058 + msleep(10);
4059 + }
4060 + if (i == retries) {
4061 + v4l2_dbg(1, debug, sd, "%s: failed to powerup the adv7511!\n", __func__);
4062 + adv7511_s_power(sd, 0);
4063 + return false;
4064 + }
4065 + if (i > 1)
4066 + v4l2_dbg(1, debug, sd, "%s: needed %d retries to powerup the adv7511\n", __func__, i);
4067 +
4068 + /* Reserved registers that must be set */
4069 + adv7511_wr(sd, 0x98, 0x03);
4070 + adv7511_wr_and_or(sd, 0x9a, 0xfe, 0x70);
4071 + adv7511_wr(sd, 0x9c, 0x30);
4072 + adv7511_wr_and_or(sd, 0x9d, 0xfc, 0x01);
4073 + adv7511_wr(sd, 0xa2, 0xa4);
4074 + adv7511_wr(sd, 0xa3, 0xa4);
4075 + adv7511_wr(sd, 0xe0, 0xd0);
4076 + adv7511_wr(sd, 0xf9, 0x00);
4077 +
4078 + adv7511_wr(sd, 0x43, state->i2c_edid_addr);
4079 + adv7511_wr(sd, 0x45, state->i2c_pktmem_addr);
4080 +
4081 + /* Set number of attempts to read the EDID */
4082 + adv7511_wr(sd, 0xc9, 0xf);
4083 + return true;
4084 +}
4085 +
4086 +#if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
4087 +static int adv7511_cec_adap_enable(struct cec_adapter *adap, bool enable)
4088 +{
4089 + struct adv7511_state *state = adap->priv;
4090 + struct v4l2_subdev *sd = &state->sd;
4091 +
4092 + if (state->i2c_cec == NULL)
4093 + return -EIO;
4094 +
4095 + if (!state->cec_enabled_adap && enable) {
4096 + /* power up cec section */
4097 + adv7511_cec_write_and_or(sd, 0x4e, 0xfc, 0x01);
4098 + /* legacy mode and clear all rx buffers */
4099 + adv7511_cec_write(sd, 0x4a, 0x07);
4100 + adv7511_cec_write(sd, 0x4a, 0);
4101 + adv7511_cec_write_and_or(sd, 0x11, 0xfe, 0); /* initially disable tx */
4102 + /* enabled irqs: */
4103 + /* tx: ready */
4104 + /* tx: arbitration lost */
4105 + /* tx: retry timeout */
4106 + /* rx: ready 1 */
4107 + if (state->enabled_irq)
4108 + adv7511_wr_and_or(sd, 0x95, 0xc0, 0x39);
4109 + } else if (state->cec_enabled_adap && !enable) {
4110 + if (state->enabled_irq)
4111 + adv7511_wr_and_or(sd, 0x95, 0xc0, 0x00);
4112 + /* disable address mask 1-3 */
4113 + adv7511_cec_write_and_or(sd, 0x4b, 0x8f, 0x00);
4114 + /* power down cec section */
4115 + adv7511_cec_write_and_or(sd, 0x4e, 0xfc, 0x00);
4116 + state->cec_valid_addrs = 0;
4117 + }
4118 + state->cec_enabled_adap = enable;
4119 + return 0;
4120 +}
4121 +
4122 +static int adv7511_cec_adap_log_addr(struct cec_adapter *adap, u8 addr)
4123 +{
4124 + struct adv7511_state *state = adap->priv;
4125 + struct v4l2_subdev *sd = &state->sd;
4126 + unsigned int i, free_idx = ADV7511_MAX_ADDRS;
4127 +
4128 + if (!state->cec_enabled_adap)
4129 + return addr == CEC_LOG_ADDR_INVALID ? 0 : -EIO;
4130 +
4131 + if (addr == CEC_LOG_ADDR_INVALID) {
4132 + adv7511_cec_write_and_or(sd, 0x4b, 0x8f, 0);
4133 + state->cec_valid_addrs = 0;
4134 + return 0;
4135 + }
4136 +
4137 + for (i = 0; i < ADV7511_MAX_ADDRS; i++) {
4138 + bool is_valid = state->cec_valid_addrs & (1 << i);
4139 +
4140 + if (free_idx == ADV7511_MAX_ADDRS && !is_valid)
4141 + free_idx = i;
4142 + if (is_valid && state->cec_addr[i] == addr)
4143 + return 0;
4144 + }
4145 + if (i == ADV7511_MAX_ADDRS) {
4146 + i = free_idx;
4147 + if (i == ADV7511_MAX_ADDRS)
4148 + return -ENXIO;
4149 + }
4150 + state->cec_addr[i] = addr;
4151 + state->cec_valid_addrs |= 1 << i;
4152 +
4153 + switch (i) {
4154 + case 0:
4155 + /* enable address mask 0 */
4156 + adv7511_cec_write_and_or(sd, 0x4b, 0xef, 0x10);
4157 + /* set address for mask 0 */
4158 + adv7511_cec_write_and_or(sd, 0x4c, 0xf0, addr);
4159 + break;
4160 + case 1:
4161 + /* enable address mask 1 */
4162 + adv7511_cec_write_and_or(sd, 0x4b, 0xdf, 0x20);
4163 + /* set address for mask 1 */
4164 + adv7511_cec_write_and_or(sd, 0x4c, 0x0f, addr << 4);
4165 + break;
4166 + case 2:
4167 + /* enable address mask 2 */
4168 + adv7511_cec_write_and_or(sd, 0x4b, 0xbf, 0x40);
4169 + /* set address for mask 1 */
4170 + adv7511_cec_write_and_or(sd, 0x4d, 0xf0, addr);
4171 + break;
4172 + }
4173 + return 0;
4174 +}
4175 +
4176 +static int adv7511_cec_adap_transmit(struct cec_adapter *adap, u8 attempts,
4177 + u32 signal_free_time, struct cec_msg *msg)
4178 +{
4179 + struct adv7511_state *state = adap->priv;
4180 + struct v4l2_subdev *sd = &state->sd;
4181 + u8 len = msg->len;
4182 + unsigned int i;
4183 +
4184 + v4l2_dbg(1, debug, sd, "%s: len %d\n", __func__, len);
4185 +
4186 + if (len > 16) {
4187 + v4l2_err(sd, "%s: len exceeded 16 (%d)\n", __func__, len);
4188 + return -EINVAL;
4189 + }
4190 +
4191 + /*
4192 + * The number of retries is the number of attempts - 1, but retry
4193 + * at least once. It's not clear if a value of 0 is allowed, so
4194 + * let's do at least one retry.
4195 + */
4196 + adv7511_cec_write_and_or(sd, 0x12, ~0x70, max(1, attempts - 1) << 4);
4197 +
4198 + /* blocking, clear cec tx irq status */
4199 + adv7511_wr_and_or(sd, 0x97, 0xc7, 0x38);
4200 +
4201 + /* write data */
4202 + for (i = 0; i < len; i++)
4203 + adv7511_cec_write(sd, i, msg->msg[i]);
4204 +
4205 + /* set length (data + header) */
4206 + adv7511_cec_write(sd, 0x10, len);
4207 + /* start transmit, enable tx */
4208 + adv7511_cec_write(sd, 0x11, 0x01);
4209 + return 0;
4210 +}
4211 +
4212 +static void adv_cec_tx_raw_status(struct v4l2_subdev *sd, u8 tx_raw_status)
4213 +{
4214 + struct adv7511_state *state = get_adv7511_state(sd);
4215 +
4216 + if ((adv7511_cec_read(sd, 0x11) & 0x01) == 0) {
4217 + v4l2_dbg(1, debug, sd, "%s: tx raw: tx disabled\n", __func__);
4218 + return;
4219 + }
4220 +
4221 + if (tx_raw_status & 0x10) {
4222 + v4l2_dbg(1, debug, sd,
4223 + "%s: tx raw: arbitration lost\n", __func__);
4224 + cec_transmit_done(state->cec_adap, CEC_TX_STATUS_ARB_LOST,
4225 + 1, 0, 0, 0);
4226 + return;
4227 + }
4228 + if (tx_raw_status & 0x08) {
4229 + u8 status;
4230 + u8 nack_cnt;
4231 + u8 low_drive_cnt;
4232 +
4233 + v4l2_dbg(1, debug, sd, "%s: tx raw: retry failed\n", __func__);
4234 + /*
4235 + * We set this status bit since this hardware performs
4236 + * retransmissions.
4237 + */
4238 + status = CEC_TX_STATUS_MAX_RETRIES;
4239 + nack_cnt = adv7511_cec_read(sd, 0x14) & 0xf;
4240 + if (nack_cnt)
4241 + status |= CEC_TX_STATUS_NACK;
4242 + low_drive_cnt = adv7511_cec_read(sd, 0x14) >> 4;
4243 + if (low_drive_cnt)
4244 + status |= CEC_TX_STATUS_LOW_DRIVE;
4245 + cec_transmit_done(state->cec_adap, status,
4246 + 0, nack_cnt, low_drive_cnt, 0);
4247 + return;
4248 + }
4249 + if (tx_raw_status & 0x20) {
4250 + v4l2_dbg(1, debug, sd, "%s: tx raw: ready ok\n", __func__);
4251 + cec_transmit_done(state->cec_adap, CEC_TX_STATUS_OK, 0, 0, 0, 0);
4252 + return;
4253 + }
4254 +}
4255 +
4256 +static const struct cec_adap_ops adv7511_cec_adap_ops = {
4257 + .adap_enable = adv7511_cec_adap_enable,
4258 + .adap_log_addr = adv7511_cec_adap_log_addr,
4259 + .adap_transmit = adv7511_cec_adap_transmit,
4260 +};
4261 +#endif
4262 +
4263 +/* Enable interrupts */
4264 +static void adv7511_set_isr(struct v4l2_subdev *sd, bool enable)
4265 +{
4266 + struct adv7511_state *state = get_adv7511_state(sd);
4267 + u8 irqs = MASK_ADV7511_HPD_INT | MASK_ADV7511_MSEN_INT;
4268 + u8 irqs_rd;
4269 + int retries = 100;
4270 +
4271 + v4l2_dbg(2, debug, sd, "%s: %s\n", __func__, enable ? "enable" : "disable");
4272 +
4273 + if (state->enabled_irq == enable)
4274 + return;
4275 + state->enabled_irq = enable;
4276 +
4277 + /* The datasheet says that the EDID ready interrupt should be
4278 + disabled if there is no hotplug. */
4279 + if (!enable)
4280 + irqs = 0;
4281 + else if (adv7511_have_hotplug(sd))
4282 + irqs |= MASK_ADV7511_EDID_RDY_INT;
4283 +
4284 + adv7511_wr_and_or(sd, 0x95, 0xc0,
4285 + (state->cec_enabled_adap && enable) ? 0x39 : 0x00);
4286 +
4287 + /*
4288 + * This i2c write can fail (approx. 1 in 1000 writes). But it
4289 + * is essential that this register is correct, so retry it
4290 + * multiple times.
4291 + *
4292 + * Note that the i2c write does not report an error, but the readback
4293 + * clearly shows the wrong value.
4294 + */
4295 + do {
4296 + adv7511_wr(sd, 0x94, irqs);
4297 + irqs_rd = adv7511_rd(sd, 0x94);
4298 + } while (retries-- && irqs_rd != irqs);
4299 +
4300 + if (irqs_rd == irqs)
4301 + return;
4302 + v4l2_err(sd, "Could not set interrupts: hw failure?\n");
4303 +}
4304 +
4305 +/* Interrupt handler */
4306 +static int adv7511_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
4307 +{
4308 + u8 irq_status;
4309 + u8 cec_irq;
4310 +
4311 + /* disable interrupts to prevent a race condition */
4312 + adv7511_set_isr(sd, false);
4313 + irq_status = adv7511_rd(sd, 0x96);
4314 + cec_irq = adv7511_rd(sd, 0x97);
4315 + /* clear detected interrupts */
4316 + adv7511_wr(sd, 0x96, irq_status);
4317 + adv7511_wr(sd, 0x97, cec_irq);
4318 +
4319 + v4l2_dbg(1, debug, sd, "%s: irq 0x%x, cec-irq 0x%x\n", __func__,
4320 + irq_status, cec_irq);
4321 +
4322 + if (irq_status & (MASK_ADV7511_HPD_INT | MASK_ADV7511_MSEN_INT))
4323 + adv7511_check_monitor_present_status(sd);
4324 + if (irq_status & MASK_ADV7511_EDID_RDY_INT)
4325 + adv7511_check_edid_status(sd);
4326 +
4327 +#if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
4328 + if (cec_irq & 0x38)
4329 + adv_cec_tx_raw_status(sd, cec_irq);
4330 +
4331 + if (cec_irq & 1) {
4332 + struct adv7511_state *state = get_adv7511_state(sd);
4333 + struct cec_msg msg;
4334 +
4335 + msg.len = adv7511_cec_read(sd, 0x25) & 0x1f;
4336 +
4337 + v4l2_dbg(1, debug, sd, "%s: cec msg len %d\n", __func__,
4338 + msg.len);
4339 +
4340 + if (msg.len > 16)
4341 + msg.len = 16;
4342 +
4343 + if (msg.len) {
4344 + u8 i;
4345 +
4346 + for (i = 0; i < msg.len; i++)
4347 + msg.msg[i] = adv7511_cec_read(sd, i + 0x15);
4348 +
4349 + adv7511_cec_write(sd, 0x4a, 1); /* toggle to re-enable rx 1 */
4350 + adv7511_cec_write(sd, 0x4a, 0);
4351 + cec_received_msg(state->cec_adap, &msg);
4352 + }
4353 + }
4354 +#endif
4355 +
4356 + /* enable interrupts */
4357 + adv7511_set_isr(sd, true);
4358 +
4359 + if (handled)
4360 + *handled = true;
4361 + return 0;
4362 +}
4363 +
4364 +static const struct v4l2_subdev_core_ops adv7511_core_ops = {
4365 + .log_status = adv7511_log_status,
4366 +#ifdef CONFIG_VIDEO_ADV_DEBUG
4367 + .g_register = adv7511_g_register,
4368 + .s_register = adv7511_s_register,
4369 +#endif
4370 + .s_power = adv7511_s_power,
4371 + .interrupt_service_routine = adv7511_isr,
4372 +};
4373 +
4374 +/* ------------------------------ VIDEO OPS ------------------------------ */
4375 +
4376 +/* Enable/disable adv7511 output */
4377 +static int adv7511_s_stream(struct v4l2_subdev *sd, int enable)
4378 +{
4379 + struct adv7511_state *state = get_adv7511_state(sd);
4380 +
4381 + v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
4382 + adv7511_wr_and_or(sd, 0xa1, ~0x3c, (enable ? 0 : 0x3c));
4383 + if (enable) {
4384 + adv7511_check_monitor_present_status(sd);
4385 + } else {
4386 + adv7511_s_power(sd, 0);
4387 + state->have_monitor = false;
4388 + }
4389 + return 0;
4390 +}
4391 +
4392 +static int adv7511_s_dv_timings(struct v4l2_subdev *sd,
4393 + struct v4l2_dv_timings *timings)
4394 +{
4395 + struct adv7511_state *state = get_adv7511_state(sd);
4396 + struct v4l2_bt_timings *bt = &timings->bt;
4397 + u32 fps;
4398 +
4399 + v4l2_dbg(1, debug, sd, "%s:\n", __func__);
4400 +
4401 + /* quick sanity check */
4402 + if (!v4l2_valid_dv_timings(timings, &adv7511_timings_cap, NULL, NULL))
4403 + return -EINVAL;
4404 +
4405 + /* Fill the optional fields .standards and .flags in struct v4l2_dv_timings
4406 + if the format is one of the CEA or DMT timings. */
4407 + v4l2_find_dv_timings_cap(timings, &adv7511_timings_cap, 0, NULL, NULL);
4408 +
4409 + /* save timings */
4410 + state->dv_timings = *timings;
4411 +
4412 + /* set h/vsync polarities */
4413 + adv7511_wr_and_or(sd, 0x17, 0x9f,
4414 + ((bt->polarities & V4L2_DV_VSYNC_POS_POL) ? 0 : 0x40) |
4415 + ((bt->polarities & V4L2_DV_HSYNC_POS_POL) ? 0 : 0x20));
4416 +
4417 + fps = (u32)bt->pixelclock / (V4L2_DV_BT_FRAME_WIDTH(bt) * V4L2_DV_BT_FRAME_HEIGHT(bt));
4418 + switch (fps) {
4419 + case 24:
4420 + adv7511_wr_and_or(sd, 0xfb, 0xf9, 1 << 1);
4421 + break;
4422 + case 25:
4423 + adv7511_wr_and_or(sd, 0xfb, 0xf9, 2 << 1);
4424 + break;
4425 + case 30:
4426 + adv7511_wr_and_or(sd, 0xfb, 0xf9, 3 << 1);
4427 + break;
4428 + default:
4429 + adv7511_wr_and_or(sd, 0xfb, 0xf9, 0);
4430 + break;
4431 + }
4432 +
4433 + /* update quantization range based on new dv_timings */
4434 + adv7511_set_rgb_quantization_mode(sd, state->rgb_quantization_range_ctrl);
4435 +
4436 + return 0;
4437 +}
4438 +
4439 +static int adv7511_g_dv_timings(struct v4l2_subdev *sd,
4440 + struct v4l2_dv_timings *timings)
4441 +{
4442 + struct adv7511_state *state = get_adv7511_state(sd);
4443 +
4444 + v4l2_dbg(1, debug, sd, "%s:\n", __func__);
4445 +
4446 + if (!timings)
4447 + return -EINVAL;
4448 +
4449 + *timings = state->dv_timings;
4450 +
4451 + return 0;
4452 +}
4453 +
4454 +static int adv7511_enum_dv_timings(struct v4l2_subdev *sd,
4455 + struct v4l2_enum_dv_timings *timings)
4456 +{
4457 + if (timings->pad != 0)
4458 + return -EINVAL;
4459 +
4460 + return v4l2_enum_dv_timings_cap(timings, &adv7511_timings_cap, NULL, NULL);
4461 +}
4462 +
4463 +static int adv7511_dv_timings_cap(struct v4l2_subdev *sd,
4464 + struct v4l2_dv_timings_cap *cap)
4465 +{
4466 + if (cap->pad != 0)
4467 + return -EINVAL;
4468 +
4469 + *cap = adv7511_timings_cap;
4470 + return 0;
4471 +}
4472 +
4473 +static const struct v4l2_subdev_video_ops adv7511_video_ops = {
4474 + .s_stream = adv7511_s_stream,
4475 + .s_dv_timings = adv7511_s_dv_timings,
4476 + .g_dv_timings = adv7511_g_dv_timings,
4477 +};
4478 +
4479 +/* ------------------------------ AUDIO OPS ------------------------------ */
4480 +static int adv7511_s_audio_stream(struct v4l2_subdev *sd, int enable)
4481 +{
4482 + v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
4483 +
4484 + if (enable)
4485 + adv7511_wr_and_or(sd, 0x4b, 0x3f, 0x80);
4486 + else
4487 + adv7511_wr_and_or(sd, 0x4b, 0x3f, 0x40);
4488 +
4489 + return 0;
4490 +}
4491 +
4492 +static int adv7511_s_clock_freq(struct v4l2_subdev *sd, u32 freq)
4493 +{
4494 + u32 N;
4495 +
4496 + switch (freq) {
4497 + case 32000: N = 4096; break;
4498 + case 44100: N = 6272; break;
4499 + case 48000: N = 6144; break;
4500 + case 88200: N = 12544; break;
4501 + case 96000: N = 12288; break;
4502 + case 176400: N = 25088; break;
4503 + case 192000: N = 24576; break;
4504 + default:
4505 + return -EINVAL;
4506 + }
4507 +
4508 + /* Set N (used with CTS to regenerate the audio clock) */
4509 + adv7511_wr(sd, 0x01, (N >> 16) & 0xf);
4510 + adv7511_wr(sd, 0x02, (N >> 8) & 0xff);
4511 + adv7511_wr(sd, 0x03, N & 0xff);
4512 +
4513 + return 0;
4514 +}
4515 +
4516 +static int adv7511_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq)
4517 +{
4518 + u32 i2s_sf;
4519 +
4520 + switch (freq) {
4521 + case 32000: i2s_sf = 0x30; break;
4522 + case 44100: i2s_sf = 0x00; break;
4523 + case 48000: i2s_sf = 0x20; break;
4524 + case 88200: i2s_sf = 0x80; break;
4525 + case 96000: i2s_sf = 0xa0; break;
4526 + case 176400: i2s_sf = 0xc0; break;
4527 + case 192000: i2s_sf = 0xe0; break;
4528 + default:
4529 + return -EINVAL;
4530 + }
4531 +
4532 + /* Set sampling frequency for I2S audio to 48 kHz */
4533 + adv7511_wr_and_or(sd, 0x15, 0xf, i2s_sf);
4534 +
4535 + return 0;
4536 +}
4537 +
4538 +static int adv7511_s_routing(struct v4l2_subdev *sd, u32 input, u32 output, u32 config)
4539 +{
4540 + /* Only 2 channels in use for application */
4541 + adv7511_wr_and_or(sd, 0x73, 0xf8, 0x1);
4542 + /* Speaker mapping */
4543 + adv7511_wr(sd, 0x76, 0x00);
4544 +
4545 + /* 16 bit audio word length */
4546 + adv7511_wr_and_or(sd, 0x14, 0xf0, 0x02);
4547 +
4548 + return 0;
4549 +}
4550 +
4551 +static const struct v4l2_subdev_audio_ops adv7511_audio_ops = {
4552 + .s_stream = adv7511_s_audio_stream,
4553 + .s_clock_freq = adv7511_s_clock_freq,
4554 + .s_i2s_clock_freq = adv7511_s_i2s_clock_freq,
4555 + .s_routing = adv7511_s_routing,
4556 +};
4557 +
4558 +/* ---------------------------- PAD OPS ------------------------------------- */
4559 +
4560 +static int adv7511_get_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid)
4561 +{
4562 + struct adv7511_state *state = get_adv7511_state(sd);
4563 +
4564 + memset(edid->reserved, 0, sizeof(edid->reserved));
4565 +
4566 + if (edid->pad != 0)
4567 + return -EINVAL;
4568 +
4569 + if (edid->start_block == 0 && edid->blocks == 0) {
4570 + edid->blocks = state->edid.segments * 2;
4571 + return 0;
4572 + }
4573 +
4574 + if (state->edid.segments == 0)
4575 + return -ENODATA;
4576 +
4577 + if (edid->start_block >= state->edid.segments * 2)
4578 + return -EINVAL;
4579 +
4580 + if (edid->start_block + edid->blocks > state->edid.segments * 2)
4581 + edid->blocks = state->edid.segments * 2 - edid->start_block;
4582 +
4583 + memcpy(edid->edid, &state->edid.data[edid->start_block * 128],
4584 + 128 * edid->blocks);
4585 +
4586 + return 0;
4587 +}
4588 +
4589 +static int adv7511_enum_mbus_code(struct v4l2_subdev *sd,
4590 + struct v4l2_subdev_pad_config *cfg,
4591 + struct v4l2_subdev_mbus_code_enum *code)
4592 +{
4593 + if (code->pad != 0)
4594 + return -EINVAL;
4595 +
4596 + switch (code->index) {
4597 + case 0:
4598 + code->code = MEDIA_BUS_FMT_RGB888_1X24;
4599 + break;
4600 + case 1:
4601 + code->code = MEDIA_BUS_FMT_YUYV8_1X16;
4602 + break;
4603 + case 2:
4604 + code->code = MEDIA_BUS_FMT_UYVY8_1X16;
4605 + break;
4606 + default:
4607 + return -EINVAL;
4608 + }
4609 + return 0;
4610 +}
4611 +
4612 +static void adv7511_fill_format(struct adv7511_state *state,
4613 + struct v4l2_mbus_framefmt *format)
4614 +{
4615 + format->width = state->dv_timings.bt.width;
4616 + format->height = state->dv_timings.bt.height;
4617 + format->field = V4L2_FIELD_NONE;
4618 +}
4619 +
4620 +static int adv7511_get_fmt(struct v4l2_subdev *sd,
4621 + struct v4l2_subdev_pad_config *cfg,
4622 + struct v4l2_subdev_format *format)
4623 +{
4624 + struct adv7511_state *state = get_adv7511_state(sd);
4625 +
4626 + if (format->pad != 0)
4627 + return -EINVAL;
4628 +
4629 + memset(&format->format, 0, sizeof(format->format));
4630 + adv7511_fill_format(state, &format->format);
4631 +
4632 + if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
4633 + struct v4l2_mbus_framefmt *fmt;
4634 +
4635 + fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
4636 + format->format.code = fmt->code;
4637 + format->format.colorspace = fmt->colorspace;
4638 + format->format.ycbcr_enc = fmt->ycbcr_enc;
4639 + format->format.quantization = fmt->quantization;
4640 + format->format.xfer_func = fmt->xfer_func;
4641 + } else {
4642 + format->format.code = state->fmt_code;
4643 + format->format.colorspace = state->colorspace;
4644 + format->format.ycbcr_enc = state->ycbcr_enc;
4645 + format->format.quantization = state->quantization;
4646 + format->format.xfer_func = state->xfer_func;
4647 + }
4648 +
4649 + return 0;
4650 +}
4651 +
4652 +static int adv7511_set_fmt(struct v4l2_subdev *sd,
4653 + struct v4l2_subdev_pad_config *cfg,
4654 + struct v4l2_subdev_format *format)
4655 +{
4656 + struct adv7511_state *state = get_adv7511_state(sd);
4657 + /*
4658 + * Bitfield namings come the CEA-861-F standard, table 8 "Auxiliary
4659 + * Video Information (AVI) InfoFrame Format"
4660 + *
4661 + * c = Colorimetry
4662 + * ec = Extended Colorimetry
4663 + * y = RGB or YCbCr
4664 + * q = RGB Quantization Range
4665 + * yq = YCC Quantization Range
4666 + */
4667 + u8 c = HDMI_COLORIMETRY_NONE;
4668 + u8 ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
4669 + u8 y = HDMI_COLORSPACE_RGB;
4670 + u8 q = HDMI_QUANTIZATION_RANGE_DEFAULT;
4671 + u8 yq = HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
4672 + u8 itc = state->content_type != V4L2_DV_IT_CONTENT_TYPE_NO_ITC;
4673 + u8 cn = itc ? state->content_type : V4L2_DV_IT_CONTENT_TYPE_GRAPHICS;
4674 +
4675 + if (format->pad != 0)
4676 + return -EINVAL;
4677 + switch (format->format.code) {
4678 + case MEDIA_BUS_FMT_UYVY8_1X16:
4679 + case MEDIA_BUS_FMT_YUYV8_1X16:
4680 + case MEDIA_BUS_FMT_RGB888_1X24:
4681 + break;
4682 + default:
4683 + return -EINVAL;
4684 + }
4685 +
4686 + adv7511_fill_format(state, &format->format);
4687 + if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
4688 + struct v4l2_mbus_framefmt *fmt;
4689 +
4690 + fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
4691 + fmt->code = format->format.code;
4692 + fmt->colorspace = format->format.colorspace;
4693 + fmt->ycbcr_enc = format->format.ycbcr_enc;
4694 + fmt->quantization = format->format.quantization;
4695 + fmt->xfer_func = format->format.xfer_func;
4696 + return 0;
4697 + }
4698 +
4699 + switch (format->format.code) {
4700 + case MEDIA_BUS_FMT_UYVY8_1X16:
4701 + adv7511_wr_and_or(sd, 0x15, 0xf0, 0x01);
4702 + adv7511_wr_and_or(sd, 0x16, 0x03, 0xb8);
4703 + y = HDMI_COLORSPACE_YUV422;
4704 + break;
4705 + case MEDIA_BUS_FMT_YUYV8_1X16:
4706 + adv7511_wr_and_or(sd, 0x15, 0xf0, 0x01);
4707 + adv7511_wr_and_or(sd, 0x16, 0x03, 0xbc);
4708 + y = HDMI_COLORSPACE_YUV422;
4709 + break;
4710 + case MEDIA_BUS_FMT_RGB888_1X24:
4711 + default:
4712 + adv7511_wr_and_or(sd, 0x15, 0xf0, 0x00);
4713 + adv7511_wr_and_or(sd, 0x16, 0x03, 0x00);
4714 + break;
4715 + }
4716 + state->fmt_code = format->format.code;
4717 + state->colorspace = format->format.colorspace;
4718 + state->ycbcr_enc = format->format.ycbcr_enc;
4719 + state->quantization = format->format.quantization;
4720 + state->xfer_func = format->format.xfer_func;
4721 +
4722 + switch (format->format.colorspace) {
4723 + case V4L2_COLORSPACE_ADOBERGB:
4724 + c = HDMI_COLORIMETRY_EXTENDED;
4725 + ec = y ? HDMI_EXTENDED_COLORIMETRY_ADOBE_YCC_601 :
4726 + HDMI_EXTENDED_COLORIMETRY_ADOBE_RGB;
4727 + break;
4728 + case V4L2_COLORSPACE_SMPTE170M:
4729 + c = y ? HDMI_COLORIMETRY_ITU_601 : HDMI_COLORIMETRY_NONE;
4730 + if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_XV601) {
4731 + c = HDMI_COLORIMETRY_EXTENDED;
4732 + ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
4733 + }
4734 + break;
4735 + case V4L2_COLORSPACE_REC709:
4736 + c = y ? HDMI_COLORIMETRY_ITU_709 : HDMI_COLORIMETRY_NONE;
4737 + if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_XV709) {
4738 + c = HDMI_COLORIMETRY_EXTENDED;
4739 + ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_709;
4740 + }
4741 + break;
4742 + case V4L2_COLORSPACE_SRGB:
4743 + c = y ? HDMI_COLORIMETRY_EXTENDED : HDMI_COLORIMETRY_NONE;
4744 + ec = y ? HDMI_EXTENDED_COLORIMETRY_S_YCC_601 :
4745 + HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
4746 + break;
4747 + case V4L2_COLORSPACE_BT2020:
4748 + c = HDMI_COLORIMETRY_EXTENDED;
4749 + if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_BT2020_CONST_LUM)
4750 + ec = 5; /* Not yet available in hdmi.h */
4751 + else
4752 + ec = 6; /* Not yet available in hdmi.h */
4753 + break;
4754 + default:
4755 + break;
4756 + }
4757 +
4758 + /*
4759 + * CEA-861-F says that for RGB formats the YCC range must match the
4760 + * RGB range, although sources should ignore the YCC range.
4761 + *
4762 + * The RGB quantization range shouldn't be non-zero if the EDID doesn't
4763 + * have the Q bit set in the Video Capabilities Data Block, however this
4764 + * isn't checked at the moment. The assumption is that the application
4765 + * knows the EDID and can detect this.
4766 + *
4767 + * The same is true for the YCC quantization range: non-standard YCC
4768 + * quantization ranges should only be sent if the EDID has the YQ bit
4769 + * set in the Video Capabilities Data Block.
4770 + */
4771 + switch (format->format.quantization) {
4772 + case V4L2_QUANTIZATION_FULL_RANGE:
4773 + q = y ? HDMI_QUANTIZATION_RANGE_DEFAULT :
4774 + HDMI_QUANTIZATION_RANGE_FULL;
4775 + yq = q ? q - 1 : HDMI_YCC_QUANTIZATION_RANGE_FULL;
4776 + break;
4777 + case V4L2_QUANTIZATION_LIM_RANGE:
4778 + q = y ? HDMI_QUANTIZATION_RANGE_DEFAULT :
4779 + HDMI_QUANTIZATION_RANGE_LIMITED;
4780 + yq = q ? q - 1 : HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
4781 + break;
4782 + }
4783 +
4784 + adv7511_wr_and_or(sd, 0x4a, 0xbf, 0);
4785 + adv7511_wr_and_or(sd, 0x55, 0x9f, y << 5);
4786 + adv7511_wr_and_or(sd, 0x56, 0x3f, c << 6);
4787 + adv7511_wr_and_or(sd, 0x57, 0x83, (ec << 4) | (q << 2) | (itc << 7));
4788 + adv7511_wr_and_or(sd, 0x59, 0x0f, (yq << 6) | (cn << 4));
4789 + adv7511_wr_and_or(sd, 0x4a, 0xff, 1);
4790 + adv7511_set_rgb_quantization_mode(sd, state->rgb_quantization_range_ctrl);
4791 +
4792 + return 0;
4793 +}
4794 +
4795 +static const struct v4l2_subdev_pad_ops adv7511_pad_ops = {
4796 + .get_edid = adv7511_get_edid,
4797 + .enum_mbus_code = adv7511_enum_mbus_code,
4798 + .get_fmt = adv7511_get_fmt,
4799 + .set_fmt = adv7511_set_fmt,
4800 + .enum_dv_timings = adv7511_enum_dv_timings,
4801 + .dv_timings_cap = adv7511_dv_timings_cap,
4802 +};
4803 +
4804 +/* --------------------- SUBDEV OPS --------------------------------------- */
4805 +
4806 +static const struct v4l2_subdev_ops adv7511_ops = {
4807 + .core = &adv7511_core_ops,
4808 + .pad = &adv7511_pad_ops,
4809 + .video = &adv7511_video_ops,
4810 + .audio = &adv7511_audio_ops,
4811 +};
4812 +
4813 +/* ----------------------------------------------------------------------- */
4814 +static void adv7511_dbg_dump_edid(int lvl, int debug, struct v4l2_subdev *sd, int segment, u8 *buf)
4815 +{
4816 + if (debug >= lvl) {
4817 + int i, j;
4818 + v4l2_dbg(lvl, debug, sd, "edid segment %d\n", segment);
4819 + for (i = 0; i < 256; i += 16) {
4820 + u8 b[128];
4821 + u8 *bp = b;
4822 + if (i == 128)
4823 + v4l2_dbg(lvl, debug, sd, "\n");
4824 + for (j = i; j < i + 16; j++) {
4825 + sprintf(bp, "0x%02x, ", buf[j]);
4826 + bp += 6;
4827 + }
4828 + bp[0] = '\0';
4829 + v4l2_dbg(lvl, debug, sd, "%s\n", b);
4830 + }
4831 + }
4832 +}
4833 +
4834 +static void adv7511_notify_no_edid(struct v4l2_subdev *sd)
4835 +{
4836 + struct adv7511_state *state = get_adv7511_state(sd);
4837 + struct adv7511_edid_detect ed;
4838 +
4839 + /* We failed to read the EDID, so send an event for this. */
4840 + ed.present = false;
4841 + ed.segment = adv7511_rd(sd, 0xc4);
4842 + ed.phys_addr = CEC_PHYS_ADDR_INVALID;
4843 + cec_s_phys_addr(state->cec_adap, ed.phys_addr, false);
4844 + v4l2_subdev_notify(sd, ADV7511_EDID_DETECT, (void *)&ed);
4845 + v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, 0x0);
4846 +}
4847 +
4848 +static void adv7511_edid_handler(struct work_struct *work)
4849 +{
4850 + struct delayed_work *dwork = to_delayed_work(work);
4851 + struct adv7511_state *state = container_of(dwork, struct adv7511_state, edid_handler);
4852 + struct v4l2_subdev *sd = &state->sd;
4853 +
4854 + v4l2_dbg(1, debug, sd, "%s:\n", __func__);
4855 +
4856 + if (adv7511_check_edid_status(sd)) {
4857 + /* Return if we received the EDID. */
4858 + return;
4859 + }
4860 +
4861 + if (adv7511_have_hotplug(sd)) {
4862 + /* We must retry reading the EDID several times, it is possible
4863 + * that initially the EDID couldn't be read due to i2c errors
4864 + * (DVI connectors are particularly prone to this problem). */
4865 + if (state->edid.read_retries) {
4866 + state->edid.read_retries--;
4867 + v4l2_dbg(1, debug, sd, "%s: edid read failed\n", __func__);
4868 + state->have_monitor = false;
4869 + adv7511_s_power(sd, false);
4870 + adv7511_s_power(sd, true);
4871 + queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
4872 + return;
4873 + }
4874 + }
4875 +
4876 + /* We failed to read the EDID, so send an event for this. */
4877 + adv7511_notify_no_edid(sd);
4878 + v4l2_dbg(1, debug, sd, "%s: no edid found\n", __func__);
4879 +}
4880 +
4881 +static void adv7511_audio_setup(struct v4l2_subdev *sd)
4882 +{
4883 + v4l2_dbg(1, debug, sd, "%s\n", __func__);
4884 +
4885 + adv7511_s_i2s_clock_freq(sd, 48000);
4886 + adv7511_s_clock_freq(sd, 48000);
4887 + adv7511_s_routing(sd, 0, 0, 0);
4888 +}
4889 +
4890 +/* Configure hdmi transmitter. */
4891 +static void adv7511_setup(struct v4l2_subdev *sd)
4892 +{
4893 + struct adv7511_state *state = get_adv7511_state(sd);
4894 + v4l2_dbg(1, debug, sd, "%s\n", __func__);
4895 +
4896 + /* Input format: RGB 4:4:4 */
4897 + adv7511_wr_and_or(sd, 0x15, 0xf0, 0x0);
4898 + /* Output format: RGB 4:4:4 */
4899 + adv7511_wr_and_or(sd, 0x16, 0x7f, 0x0);
4900 + /* 1st order interpolation 4:2:2 -> 4:4:4 up conversion, Aspect ratio: 16:9 */
4901 + adv7511_wr_and_or(sd, 0x17, 0xf9, 0x06);
4902 + /* Disable pixel repetition */
4903 + adv7511_wr_and_or(sd, 0x3b, 0x9f, 0x0);
4904 + /* Disable CSC */
4905 + adv7511_wr_and_or(sd, 0x18, 0x7f, 0x0);
4906 + /* Output format: RGB 4:4:4, Active Format Information is valid,
4907 + * underscanned */
4908 + adv7511_wr_and_or(sd, 0x55, 0x9c, 0x12);
4909 + /* AVI Info frame packet enable, Audio Info frame disable */
4910 + adv7511_wr_and_or(sd, 0x44, 0xe7, 0x10);
4911 + /* Colorimetry, Active format aspect ratio: same as picure. */
4912 + adv7511_wr(sd, 0x56, 0xa8);
4913 + /* No encryption */
4914 + adv7511_wr_and_or(sd, 0xaf, 0xed, 0x0);
4915 +
4916 + /* Positive clk edge capture for input video clock */
4917 + adv7511_wr_and_or(sd, 0xba, 0x1f, 0x60);
4918 +
4919 + adv7511_audio_setup(sd);
4920 +
4921 + v4l2_ctrl_handler_setup(&state->hdl);
4922 +}
4923 +
4924 +static void adv7511_notify_monitor_detect(struct v4l2_subdev *sd)
4925 +{
4926 + struct adv7511_monitor_detect mdt;
4927 + struct adv7511_state *state = get_adv7511_state(sd);
4928 +
4929 + mdt.present = state->have_monitor;
4930 + v4l2_subdev_notify(sd, ADV7511_MONITOR_DETECT, (void *)&mdt);
4931 +}
4932 +
4933 +static void adv7511_check_monitor_present_status(struct v4l2_subdev *sd)
4934 +{
4935 + struct adv7511_state *state = get_adv7511_state(sd);
4936 + /* read hotplug and rx-sense state */
4937 + u8 status = adv7511_rd(sd, 0x42);
4938 +
4939 + v4l2_dbg(1, debug, sd, "%s: status: 0x%x%s%s\n",
4940 + __func__,
4941 + status,
4942 + status & MASK_ADV7511_HPD_DETECT ? ", hotplug" : "",
4943 + status & MASK_ADV7511_MSEN_DETECT ? ", rx-sense" : "");
4944 +
4945 + /* update read only ctrls */
4946 + v4l2_ctrl_s_ctrl(state->hotplug_ctrl, adv7511_have_hotplug(sd) ? 0x1 : 0x0);
4947 + v4l2_ctrl_s_ctrl(state->rx_sense_ctrl, adv7511_have_rx_sense(sd) ? 0x1 : 0x0);
4948 +
4949 + if ((status & MASK_ADV7511_HPD_DETECT) && ((status & MASK_ADV7511_MSEN_DETECT) || state->edid.segments)) {
4950 + v4l2_dbg(1, debug, sd, "%s: hotplug and (rx-sense or edid)\n", __func__);
4951 + if (!state->have_monitor) {
4952 + v4l2_dbg(1, debug, sd, "%s: monitor detected\n", __func__);
4953 + state->have_monitor = true;
4954 + adv7511_set_isr(sd, true);
4955 + if (!adv7511_s_power(sd, true)) {
4956 + v4l2_dbg(1, debug, sd, "%s: monitor detected, powerup failed\n", __func__);
4957 + return;
4958 + }
4959 + adv7511_setup(sd);
4960 + adv7511_notify_monitor_detect(sd);
4961 + state->edid.read_retries = EDID_MAX_RETRIES;
4962 + queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
4963 + }
4964 + } else if (status & MASK_ADV7511_HPD_DETECT) {
4965 + v4l2_dbg(1, debug, sd, "%s: hotplug detected\n", __func__);
4966 + state->edid.read_retries = EDID_MAX_RETRIES;
4967 + queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
4968 + } else if (!(status & MASK_ADV7511_HPD_DETECT)) {
4969 + v4l2_dbg(1, debug, sd, "%s: hotplug not detected\n", __func__);
4970 + if (state->have_monitor) {
4971 + v4l2_dbg(1, debug, sd, "%s: monitor not detected\n", __func__);
4972 + state->have_monitor = false;
4973 + adv7511_notify_monitor_detect(sd);
4974 + }
4975 + adv7511_s_power(sd, false);
4976 + memset(&state->edid, 0, sizeof(struct adv7511_state_edid));
4977 + adv7511_notify_no_edid(sd);
4978 + }
4979 +}
4980 +
4981 +static bool edid_block_verify_crc(u8 *edid_block)
4982 +{
4983 + u8 sum = 0;
4984 + int i;
4985 +
4986 + for (i = 0; i < 128; i++)
4987 + sum += edid_block[i];
4988 + return sum == 0;
4989 +}
4990 +
4991 +static bool edid_verify_crc(struct v4l2_subdev *sd, u32 segment)
4992 +{
4993 + struct adv7511_state *state = get_adv7511_state(sd);
4994 + u32 blocks = state->edid.blocks;
4995 + u8 *data = state->edid.data;
4996 +
4997 + if (!edid_block_verify_crc(&data[segment * 256]))
4998 + return false;
4999 + if ((segment + 1) * 2 <= blocks)
5000 + return edid_block_verify_crc(&data[segment * 256 + 128]);
5001 + return true;
5002 +}
5003 +
5004 +static bool edid_verify_header(struct v4l2_subdev *sd, u32 segment)
5005 +{
5006 + static const u8 hdmi_header[] = {
5007 + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
5008 + };
5009 + struct adv7511_state *state = get_adv7511_state(sd);
5010 + u8 *data = state->edid.data;
5011 +
5012 + if (segment != 0)
5013 + return true;
5014 + return !memcmp(data, hdmi_header, sizeof(hdmi_header));
5015 +}
5016 +
5017 +static bool adv7511_check_edid_status(struct v4l2_subdev *sd)
5018 +{
5019 + struct adv7511_state *state = get_adv7511_state(sd);
5020 + u8 edidRdy = adv7511_rd(sd, 0xc5);
5021 +
5022 + v4l2_dbg(1, debug, sd, "%s: edid ready (retries: %d)\n",
5023 + __func__, EDID_MAX_RETRIES - state->edid.read_retries);
5024 +
5025 + if (state->edid.complete)
5026 + return true;
5027 +
5028 + if (edidRdy & MASK_ADV7511_EDID_RDY) {
5029 + int segment = adv7511_rd(sd, 0xc4);
5030 + struct adv7511_edid_detect ed;
5031 +
5032 + if (segment >= EDID_MAX_SEGM) {
5033 + v4l2_err(sd, "edid segment number too big\n");
5034 + return false;
5035 + }
5036 + v4l2_dbg(1, debug, sd, "%s: got segment %d\n", __func__, segment);
5037 + adv7511_edid_rd(sd, 256, &state->edid.data[segment * 256]);
5038 + adv7511_dbg_dump_edid(2, debug, sd, segment, &state->edid.data[segment * 256]);
5039 + if (segment == 0) {
5040 + state->edid.blocks = state->edid.data[0x7e] + 1;
5041 + v4l2_dbg(1, debug, sd, "%s: %d blocks in total\n", __func__, state->edid.blocks);
5042 + }
5043 + if (!edid_verify_crc(sd, segment) ||
5044 + !edid_verify_header(sd, segment)) {
5045 + /* edid crc error, force reread of edid segment */
5046 + v4l2_err(sd, "%s: edid crc or header error\n", __func__);
5047 + state->have_monitor = false;
5048 + adv7511_s_power(sd, false);
5049 + adv7511_s_power(sd, true);
5050 + return false;
5051 + }
5052 + /* one more segment read ok */
5053 + state->edid.segments = segment + 1;
5054 + v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, 0x1);
5055 + if (((state->edid.data[0x7e] >> 1) + 1) > state->edid.segments) {
5056 + /* Request next EDID segment */
5057 + v4l2_dbg(1, debug, sd, "%s: request segment %d\n", __func__, state->edid.segments);
5058 + adv7511_wr(sd, 0xc9, 0xf);
5059 + adv7511_wr(sd, 0xc4, state->edid.segments);
5060 + state->edid.read_retries = EDID_MAX_RETRIES;
5061 + queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
5062 + return false;
5063 + }
5064 +
5065 + v4l2_dbg(1, debug, sd, "%s: edid complete with %d segment(s)\n", __func__, state->edid.segments);
5066 + state->edid.complete = true;
5067 + ed.phys_addr = cec_get_edid_phys_addr(state->edid.data,
5068 + state->edid.segments * 256,
5069 + NULL);
5070 + /* report when we have all segments
5071 + but report only for segment 0
5072 + */
5073 + ed.present = true;
5074 + ed.segment = 0;
5075 + state->edid_detect_counter++;
5076 + cec_s_phys_addr(state->cec_adap, ed.phys_addr, false);
5077 + v4l2_subdev_notify(sd, ADV7511_EDID_DETECT, (void *)&ed);
5078 + return ed.present;
5079 + }
5080 +
5081 + return false;
5082 +}
5083 +
5084 +static int adv7511_registered(struct v4l2_subdev *sd)
5085 +{
5086 + struct adv7511_state *state = get_adv7511_state(sd);
5087 + int err;
5088 +
5089 + err = cec_register_adapter(state->cec_adap);
5090 + if (err)
5091 + cec_delete_adapter(state->cec_adap);
5092 + return err;
5093 +}
5094 +
5095 +static void adv7511_unregistered(struct v4l2_subdev *sd)
5096 +{
5097 + struct adv7511_state *state = get_adv7511_state(sd);
5098 +
5099 + cec_unregister_adapter(state->cec_adap);
5100 +}
5101 +
5102 +static const struct v4l2_subdev_internal_ops adv7511_int_ops = {
5103 + .registered = adv7511_registered,
5104 + .unregistered = adv7511_unregistered,
5105 +};
5106 +
5107 +/* ----------------------------------------------------------------------- */
5108 +/* Setup ADV7511 */
5109 +static void adv7511_init_setup(struct v4l2_subdev *sd)
5110 +{
5111 + struct adv7511_state *state = get_adv7511_state(sd);
5112 + struct adv7511_state_edid *edid = &state->edid;
5113 + u32 cec_clk = state->pdata.cec_clk;
5114 + u8 ratio;
5115 +
5116 + v4l2_dbg(1, debug, sd, "%s\n", __func__);
5117 +
5118 + /* clear all interrupts */
5119 + adv7511_wr(sd, 0x96, 0xff);
5120 + adv7511_wr(sd, 0x97, 0xff);
5121 + /*
5122 + * Stop HPD from resetting a lot of registers.
5123 + * It might leave the chip in a partly un-initialized state,
5124 + * in particular with regards to hotplug bounces.
5125 + */
5126 + adv7511_wr_and_or(sd, 0xd6, 0x3f, 0xc0);
5127 + memset(edid, 0, sizeof(struct adv7511_state_edid));
5128 + state->have_monitor = false;
5129 + adv7511_set_isr(sd, false);
5130 + adv7511_s_stream(sd, false);
5131 + adv7511_s_audio_stream(sd, false);
5132 +
5133 + if (state->i2c_cec == NULL)
5134 + return;
5135 +
5136 + v4l2_dbg(1, debug, sd, "%s: cec_clk %d\n", __func__, cec_clk);
5137 +
5138 + /* cec soft reset */
5139 + adv7511_cec_write(sd, 0x50, 0x01);
5140 + adv7511_cec_write(sd, 0x50, 0x00);
5141 +
5142 + /* legacy mode */
5143 + adv7511_cec_write(sd, 0x4a, 0x00);
5144 +
5145 + if (cec_clk % 750000 != 0)
5146 + v4l2_err(sd, "%s: cec_clk %d, not multiple of 750 Khz\n",
5147 + __func__, cec_clk);
5148 +
5149 + ratio = (cec_clk / 750000) - 1;
5150 + adv7511_cec_write(sd, 0x4e, ratio << 2);
5151 +}
5152 +
5153 +static int adv7511_probe(struct i2c_client *client, const struct i2c_device_id *id)
5154 +{
5155 + struct adv7511_state *state;
5156 + struct adv7511_platform_data *pdata = client->dev.platform_data;
5157 + struct v4l2_ctrl_handler *hdl;
5158 + struct v4l2_subdev *sd;
5159 + u8 chip_id[2];
5160 + int err = -EIO;
5161 +
5162 + /* Check if the adapter supports the needed features */
5163 + if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
5164 + return -EIO;
5165 +
5166 + state = devm_kzalloc(&client->dev, sizeof(struct adv7511_state), GFP_KERNEL);
5167 + if (!state)
5168 + return -ENOMEM;
5169 +
5170 + /* Platform data */
5171 + if (!pdata) {
5172 + v4l_err(client, "No platform data!\n");
5173 + return -ENODEV;
5174 + }
5175 + memcpy(&state->pdata, pdata, sizeof(state->pdata));
5176 + state->fmt_code = MEDIA_BUS_FMT_RGB888_1X24;
5177 + state->colorspace = V4L2_COLORSPACE_SRGB;
5178 +
5179 + sd = &state->sd;
5180 +
5181 + v4l2_dbg(1, debug, sd, "detecting adv7511 client on address 0x%x\n",
5182 + client->addr << 1);
5183 +
5184 + v4l2_i2c_subdev_init(sd, client, &adv7511_ops);
5185 + sd->internal_ops = &adv7511_int_ops;
5186 +
5187 + hdl = &state->hdl;
5188 + v4l2_ctrl_handler_init(hdl, 10);
5189 + /* add in ascending ID order */
5190 + state->hdmi_mode_ctrl = v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
5191 + V4L2_CID_DV_TX_MODE, V4L2_DV_TX_MODE_HDMI,
5192 + 0, V4L2_DV_TX_MODE_DVI_D);
5193 + state->hotplug_ctrl = v4l2_ctrl_new_std(hdl, NULL,
5194 + V4L2_CID_DV_TX_HOTPLUG, 0, 1, 0, 0);
5195 + state->rx_sense_ctrl = v4l2_ctrl_new_std(hdl, NULL,
5196 + V4L2_CID_DV_TX_RXSENSE, 0, 1, 0, 0);
5197 + state->have_edid0_ctrl = v4l2_ctrl_new_std(hdl, NULL,
5198 + V4L2_CID_DV_TX_EDID_PRESENT, 0, 1, 0, 0);
5199 + state->rgb_quantization_range_ctrl =
5200 + v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
5201 + V4L2_CID_DV_TX_RGB_RANGE, V4L2_DV_RGB_RANGE_FULL,
5202 + 0, V4L2_DV_RGB_RANGE_AUTO);
5203 + state->content_type_ctrl =
5204 + v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
5205 + V4L2_CID_DV_TX_IT_CONTENT_TYPE, V4L2_DV_IT_CONTENT_TYPE_NO_ITC,
5206 + 0, V4L2_DV_IT_CONTENT_TYPE_NO_ITC);
5207 + sd->ctrl_handler = hdl;
5208 + if (hdl->error) {
5209 + err = hdl->error;
5210 + goto err_hdl;
5211 + }
5212 + state->pad.flags = MEDIA_PAD_FL_SINK;
5213 + err = media_entity_pads_init(&sd->entity, 1, &state->pad);
5214 + if (err)
5215 + goto err_hdl;
5216 +
5217 + /* EDID and CEC i2c addr */
5218 + state->i2c_edid_addr = state->pdata.i2c_edid << 1;
5219 + state->i2c_cec_addr = state->pdata.i2c_cec << 1;
5220 + state->i2c_pktmem_addr = state->pdata.i2c_pktmem << 1;
5221 +
5222 + state->chip_revision = adv7511_rd(sd, 0x0);
5223 + chip_id[0] = adv7511_rd(sd, 0xf5);
5224 + chip_id[1] = adv7511_rd(sd, 0xf6);
5225 + if (chip_id[0] != 0x75 || chip_id[1] != 0x11) {
5226 + v4l2_err(sd, "chip_id != 0x7511, read 0x%02x%02x\n", chip_id[0],
5227 + chip_id[1]);
5228 + err = -EIO;
5229 + goto err_entity;
5230 + }
5231 +
5232 + state->i2c_edid = i2c_new_dummy(client->adapter,
5233 + state->i2c_edid_addr >> 1);
5234 + if (state->i2c_edid == NULL) {
5235 + v4l2_err(sd, "failed to register edid i2c client\n");
5236 + err = -ENOMEM;
5237 + goto err_entity;
5238 + }
5239 +
5240 + adv7511_wr(sd, 0xe1, state->i2c_cec_addr);
5241 + if (state->pdata.cec_clk < 3000000 ||
5242 + state->pdata.cec_clk > 100000000) {
5243 + v4l2_err(sd, "%s: cec_clk %u outside range, disabling cec\n",
5244 + __func__, state->pdata.cec_clk);
5245 + state->pdata.cec_clk = 0;
5246 + }
5247 +
5248 + if (state->pdata.cec_clk) {
5249 + state->i2c_cec = i2c_new_dummy(client->adapter,
5250 + state->i2c_cec_addr >> 1);
5251 + if (state->i2c_cec == NULL) {
5252 + v4l2_err(sd, "failed to register cec i2c client\n");
5253 + err = -ENOMEM;
5254 + goto err_unreg_edid;
5255 + }
5256 + adv7511_wr(sd, 0xe2, 0x00); /* power up cec section */
5257 + } else {
5258 + adv7511_wr(sd, 0xe2, 0x01); /* power down cec section */
5259 + }
5260 +
5261 + state->i2c_pktmem = i2c_new_dummy(client->adapter, state->i2c_pktmem_addr >> 1);
5262 + if (state->i2c_pktmem == NULL) {
5263 + v4l2_err(sd, "failed to register pktmem i2c client\n");
5264 + err = -ENOMEM;
5265 + goto err_unreg_cec;
5266 + }
5267 +
5268 + state->work_queue = create_singlethread_workqueue(sd->name);
5269 + if (state->work_queue == NULL) {
5270 + v4l2_err(sd, "could not create workqueue\n");
5271 + err = -ENOMEM;
5272 + goto err_unreg_pktmem;
5273 + }
5274 +
5275 + INIT_DELAYED_WORK(&state->edid_handler, adv7511_edid_handler);
5276 +
5277 + adv7511_init_setup(sd);
5278 +
5279 +#if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
5280 + state->cec_adap = cec_allocate_adapter(&adv7511_cec_adap_ops,
5281 + state, dev_name(&client->dev), CEC_CAP_TRANSMIT |
5282 + CEC_CAP_LOG_ADDRS | CEC_CAP_PASSTHROUGH | CEC_CAP_RC,
5283 + ADV7511_MAX_ADDRS, &client->dev);
5284 + err = PTR_ERR_OR_ZERO(state->cec_adap);
5285 + if (err) {
5286 + destroy_workqueue(state->work_queue);
5287 + goto err_unreg_pktmem;
5288 + }
5289 +#endif
5290 +
5291 + adv7511_set_isr(sd, true);
5292 + adv7511_check_monitor_present_status(sd);
5293 +
5294 + v4l2_info(sd, "%s found @ 0x%x (%s)\n", client->name,
5295 + client->addr << 1, client->adapter->name);
5296 + return 0;
5297 +
5298 +err_unreg_pktmem:
5299 + i2c_unregister_device(state->i2c_pktmem);
5300 +err_unreg_cec:
5301 + if (state->i2c_cec)
5302 + i2c_unregister_device(state->i2c_cec);
5303 +err_unreg_edid:
5304 + i2c_unregister_device(state->i2c_edid);
5305 +err_entity:
5306 + media_entity_cleanup(&sd->entity);
5307 +err_hdl:
5308 + v4l2_ctrl_handler_free(&state->hdl);
5309 + return err;
5310 +}
5311 +
5312 +/* ----------------------------------------------------------------------- */
5313 +
5314 +static int adv7511_remove(struct i2c_client *client)
5315 +{
5316 + struct v4l2_subdev *sd = i2c_get_clientdata(client);
5317 + struct adv7511_state *state = get_adv7511_state(sd);
5318 +
5319 + state->chip_revision = -1;
5320 +
5321 + v4l2_dbg(1, debug, sd, "%s removed @ 0x%x (%s)\n", client->name,
5322 + client->addr << 1, client->adapter->name);
5323 +
5324 + adv7511_set_isr(sd, false);
5325 + adv7511_init_setup(sd);
5326 + cancel_delayed_work(&state->edid_handler);
5327 + i2c_unregister_device(state->i2c_edid);
5328 + if (state->i2c_cec)
5329 + i2c_unregister_device(state->i2c_cec);
5330 + i2c_unregister_device(state->i2c_pktmem);
5331 + destroy_workqueue(state->work_queue);
5332 + v4l2_device_unregister_subdev(sd);
5333 + media_entity_cleanup(&sd->entity);
5334 + v4l2_ctrl_handler_free(sd->ctrl_handler);
5335 + return 0;
5336 +}
5337 +
5338 +/* ----------------------------------------------------------------------- */
5339 +
5340 +static struct i2c_device_id adv7511_id[] = {
5341 + { "adv7511", 0 },
5342 + { }
5343 +};
5344 +MODULE_DEVICE_TABLE(i2c, adv7511_id);
5345 +
5346 +static struct i2c_driver adv7511_driver = {
5347 + .driver = {
5348 + .name = "adv7511",
5349 + },
5350 + .probe = adv7511_probe,
5351 + .remove = adv7511_remove,
5352 + .id_table = adv7511_id,
5353 +};
5354 +
5355 +module_i2c_driver(adv7511_driver);
5356 diff --git a/drivers/media/i2c/adv7511.c b/drivers/media/i2c/adv7511.c
5357 deleted file mode 100644
5358 index 5f1c8ee8a50e..000000000000
5359 --- a/drivers/media/i2c/adv7511.c
5360 +++ /dev/null
5361 @@ -1,2003 +0,0 @@
5362 -/*
5363 - * Analog Devices ADV7511 HDMI Transmitter Device Driver
5364 - *
5365 - * Copyright 2013 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
5366 - *
5367 - * This program is free software; you may redistribute it and/or modify
5368 - * it under the terms of the GNU General Public License as published by
5369 - * the Free Software Foundation; version 2 of the License.
5370 - *
5371 - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
5372 - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5373 - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
5374 - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
5375 - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
5376 - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
5377 - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
5378 - * SOFTWARE.
5379 - */
5380 -
5381 -
5382 -#include <linux/kernel.h>
5383 -#include <linux/module.h>
5384 -#include <linux/slab.h>
5385 -#include <linux/i2c.h>
5386 -#include <linux/delay.h>
5387 -#include <linux/videodev2.h>
5388 -#include <linux/gpio.h>
5389 -#include <linux/workqueue.h>
5390 -#include <linux/hdmi.h>
5391 -#include <linux/v4l2-dv-timings.h>
5392 -#include <media/v4l2-device.h>
5393 -#include <media/v4l2-common.h>
5394 -#include <media/v4l2-ctrls.h>
5395 -#include <media/v4l2-dv-timings.h>
5396 -#include <media/i2c/adv7511.h>
5397 -#include <media/cec.h>
5398 -
5399 -static int debug;
5400 -module_param(debug, int, 0644);
5401 -MODULE_PARM_DESC(debug, "debug level (0-2)");
5402 -
5403 -MODULE_DESCRIPTION("Analog Devices ADV7511 HDMI Transmitter Device Driver");
5404 -MODULE_AUTHOR("Hans Verkuil");
5405 -MODULE_LICENSE("GPL v2");
5406 -
5407 -#define MASK_ADV7511_EDID_RDY_INT 0x04
5408 -#define MASK_ADV7511_MSEN_INT 0x40
5409 -#define MASK_ADV7511_HPD_INT 0x80
5410 -
5411 -#define MASK_ADV7511_HPD_DETECT 0x40
5412 -#define MASK_ADV7511_MSEN_DETECT 0x20
5413 -#define MASK_ADV7511_EDID_RDY 0x10
5414 -
5415 -#define EDID_MAX_RETRIES (8)
5416 -#define EDID_DELAY 250
5417 -#define EDID_MAX_SEGM 8
5418 -
5419 -#define ADV7511_MAX_WIDTH 1920
5420 -#define ADV7511_MAX_HEIGHT 1200
5421 -#define ADV7511_MIN_PIXELCLOCK 20000000
5422 -#define ADV7511_MAX_PIXELCLOCK 225000000
5423 -
5424 -#define ADV7511_MAX_ADDRS (3)
5425 -
5426 -/*
5427 -**********************************************************************
5428 -*
5429 -* Arrays with configuration parameters for the ADV7511
5430 -*
5431 -**********************************************************************
5432 -*/
5433 -
5434 -struct i2c_reg_value {
5435 - unsigned char reg;
5436 - unsigned char value;
5437 -};
5438 -
5439 -struct adv7511_state_edid {
5440 - /* total number of blocks */
5441 - u32 blocks;
5442 - /* Number of segments read */
5443 - u32 segments;
5444 - u8 data[EDID_MAX_SEGM * 256];
5445 - /* Number of EDID read retries left */
5446 - unsigned read_retries;
5447 - bool complete;
5448 -};
5449 -
5450 -struct adv7511_state {
5451 - struct adv7511_platform_data pdata;
5452 - struct v4l2_subdev sd;
5453 - struct media_pad pad;
5454 - struct v4l2_ctrl_handler hdl;
5455 - int chip_revision;
5456 - u8 i2c_edid_addr;
5457 - u8 i2c_pktmem_addr;
5458 - u8 i2c_cec_addr;
5459 -
5460 - struct i2c_client *i2c_cec;
5461 - struct cec_adapter *cec_adap;
5462 - u8 cec_addr[ADV7511_MAX_ADDRS];
5463 - u8 cec_valid_addrs;
5464 - bool cec_enabled_adap;
5465 -
5466 - /* Is the adv7511 powered on? */
5467 - bool power_on;
5468 - /* Did we receive hotplug and rx-sense signals? */
5469 - bool have_monitor;
5470 - bool enabled_irq;
5471 - /* timings from s_dv_timings */
5472 - struct v4l2_dv_timings dv_timings;
5473 - u32 fmt_code;
5474 - u32 colorspace;
5475 - u32 ycbcr_enc;
5476 - u32 quantization;
5477 - u32 xfer_func;
5478 - u32 content_type;
5479 - /* controls */
5480 - struct v4l2_ctrl *hdmi_mode_ctrl;
5481 - struct v4l2_ctrl *hotplug_ctrl;
5482 - struct v4l2_ctrl *rx_sense_ctrl;
5483 - struct v4l2_ctrl *have_edid0_ctrl;
5484 - struct v4l2_ctrl *rgb_quantization_range_ctrl;
5485 - struct v4l2_ctrl *content_type_ctrl;
5486 - struct i2c_client *i2c_edid;
5487 - struct i2c_client *i2c_pktmem;
5488 - struct adv7511_state_edid edid;
5489 - /* Running counter of the number of detected EDIDs (for debugging) */
5490 - unsigned edid_detect_counter;
5491 - struct workqueue_struct *work_queue;
5492 - struct delayed_work edid_handler; /* work entry */
5493 -};
5494 -
5495 -static void adv7511_check_monitor_present_status(struct v4l2_subdev *sd);
5496 -static bool adv7511_check_edid_status(struct v4l2_subdev *sd);
5497 -static void adv7511_setup(struct v4l2_subdev *sd);
5498 -static int adv7511_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq);
5499 -static int adv7511_s_clock_freq(struct v4l2_subdev *sd, u32 freq);
5500 -
5501 -
5502 -static const struct v4l2_dv_timings_cap adv7511_timings_cap = {
5503 - .type = V4L2_DV_BT_656_1120,
5504 - /* keep this initialization for compatibility with GCC < 4.4.6 */
5505 - .reserved = { 0 },
5506 - V4L2_INIT_BT_TIMINGS(640, ADV7511_MAX_WIDTH, 350, ADV7511_MAX_HEIGHT,
5507 - ADV7511_MIN_PIXELCLOCK, ADV7511_MAX_PIXELCLOCK,
5508 - V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
5509 - V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
5510 - V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
5511 - V4L2_DV_BT_CAP_CUSTOM)
5512 -};
5513 -
5514 -static inline struct adv7511_state *get_adv7511_state(struct v4l2_subdev *sd)
5515 -{
5516 - return container_of(sd, struct adv7511_state, sd);
5517 -}
5518 -
5519 -static inline struct v4l2_subdev *to_sd(struct v4l2_ctrl *ctrl)
5520 -{
5521 - return &container_of(ctrl->handler, struct adv7511_state, hdl)->sd;
5522 -}
5523 -
5524 -/* ------------------------ I2C ----------------------------------------------- */
5525 -
5526 -static s32 adv_smbus_read_byte_data_check(struct i2c_client *client,
5527 - u8 command, bool check)
5528 -{
5529 - union i2c_smbus_data data;
5530 -
5531 - if (!i2c_smbus_xfer(client->adapter, client->addr, client->flags,
5532 - I2C_SMBUS_READ, command,
5533 - I2C_SMBUS_BYTE_DATA, &data))
5534 - return data.byte;
5535 - if (check)
5536 - v4l_err(client, "error reading %02x, %02x\n",
5537 - client->addr, command);
5538 - return -1;
5539 -}
5540 -
5541 -static s32 adv_smbus_read_byte_data(struct i2c_client *client, u8 command)
5542 -{
5543 - int i;
5544 - for (i = 0; i < 3; i++) {
5545 - int ret = adv_smbus_read_byte_data_check(client, command, true);
5546 - if (ret >= 0) {
5547 - if (i)
5548 - v4l_err(client, "read ok after %d retries\n", i);
5549 - return ret;
5550 - }
5551 - }
5552 - v4l_err(client, "read failed\n");
5553 - return -1;
5554 -}
5555 -
5556 -static int adv7511_rd(struct v4l2_subdev *sd, u8 reg)
5557 -{
5558 - struct i2c_client *client = v4l2_get_subdevdata(sd);
5559 -
5560 - return adv_smbus_read_byte_data(client, reg);
5561 -}
5562 -
5563 -static int adv7511_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
5564 -{
5565 - struct i2c_client *client = v4l2_get_subdevdata(sd);
5566 - int ret;
5567 - int i;
5568 -
5569 - for (i = 0; i < 3; i++) {
5570 - ret = i2c_smbus_write_byte_data(client, reg, val);
5571 - if (ret == 0)
5572 - return 0;
5573 - }
5574 - v4l2_err(sd, "%s: i2c write error\n", __func__);
5575 - return ret;
5576 -}
5577 -
5578 -/* To set specific bits in the register, a clear-mask is given (to be AND-ed),
5579 - and then the value-mask (to be OR-ed). */
5580 -static inline void adv7511_wr_and_or(struct v4l2_subdev *sd, u8 reg, u8 clr_mask, u8 val_mask)
5581 -{
5582 - adv7511_wr(sd, reg, (adv7511_rd(sd, reg) & clr_mask) | val_mask);
5583 -}
5584 -
5585 -static int adv_smbus_read_i2c_block_data(struct i2c_client *client,
5586 - u8 command, unsigned length, u8 *values)
5587 -{
5588 - union i2c_smbus_data data;
5589 - int ret;
5590 -
5591 - if (length > I2C_SMBUS_BLOCK_MAX)
5592 - length = I2C_SMBUS_BLOCK_MAX;
5593 - data.block[0] = length;
5594 -
5595 - ret = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
5596 - I2C_SMBUS_READ, command,
5597 - I2C_SMBUS_I2C_BLOCK_DATA, &data);
5598 - memcpy(values, data.block + 1, length);
5599 - return ret;
5600 -}
5601 -
5602 -static void adv7511_edid_rd(struct v4l2_subdev *sd, uint16_t len, uint8_t *buf)
5603 -{
5604 - struct adv7511_state *state = get_adv7511_state(sd);
5605 - int i;
5606 - int err = 0;
5607 -
5608 - v4l2_dbg(1, debug, sd, "%s:\n", __func__);
5609 -
5610 - for (i = 0; !err && i < len; i += I2C_SMBUS_BLOCK_MAX)
5611 - err = adv_smbus_read_i2c_block_data(state->i2c_edid, i,
5612 - I2C_SMBUS_BLOCK_MAX, buf + i);
5613 - if (err)
5614 - v4l2_err(sd, "%s: i2c read error\n", __func__);
5615 -}
5616 -
5617 -static inline int adv7511_cec_read(struct v4l2_subdev *sd, u8 reg)
5618 -{
5619 - struct adv7511_state *state = get_adv7511_state(sd);
5620 -
5621 - return i2c_smbus_read_byte_data(state->i2c_cec, reg);
5622 -}
5623 -
5624 -static int adv7511_cec_write(struct v4l2_subdev *sd, u8 reg, u8 val)
5625 -{
5626 - struct adv7511_state *state = get_adv7511_state(sd);
5627 - int ret;
5628 - int i;
5629 -
5630 - for (i = 0; i < 3; i++) {
5631 - ret = i2c_smbus_write_byte_data(state->i2c_cec, reg, val);
5632 - if (ret == 0)
5633 - return 0;
5634 - }
5635 - v4l2_err(sd, "%s: I2C Write Problem\n", __func__);
5636 - return ret;
5637 -}
5638 -
5639 -static inline int adv7511_cec_write_and_or(struct v4l2_subdev *sd, u8 reg, u8 mask,
5640 - u8 val)
5641 -{
5642 - return adv7511_cec_write(sd, reg, (adv7511_cec_read(sd, reg) & mask) | val);
5643 -}
5644 -
5645 -static int adv7511_pktmem_rd(struct v4l2_subdev *sd, u8 reg)
5646 -{
5647 - struct adv7511_state *state = get_adv7511_state(sd);
5648 -
5649 - return adv_smbus_read_byte_data(state->i2c_pktmem, reg);
5650 -}
5651 -
5652 -static int adv7511_pktmem_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
5653 -{
5654 - struct adv7511_state *state = get_adv7511_state(sd);
5655 - int ret;
5656 - int i;
5657 -
5658 - for (i = 0; i < 3; i++) {
5659 - ret = i2c_smbus_write_byte_data(state->i2c_pktmem, reg, val);
5660 - if (ret == 0)
5661 - return 0;
5662 - }
5663 - v4l2_err(sd, "%s: i2c write error\n", __func__);
5664 - return ret;
5665 -}
5666 -
5667 -/* To set specific bits in the register, a clear-mask is given (to be AND-ed),
5668 - and then the value-mask (to be OR-ed). */
5669 -static inline void adv7511_pktmem_wr_and_or(struct v4l2_subdev *sd, u8 reg, u8 clr_mask, u8 val_mask)
5670 -{
5671 - adv7511_pktmem_wr(sd, reg, (adv7511_pktmem_rd(sd, reg) & clr_mask) | val_mask);
5672 -}
5673 -
5674 -static inline bool adv7511_have_hotplug(struct v4l2_subdev *sd)
5675 -{
5676 - return adv7511_rd(sd, 0x42) & MASK_ADV7511_HPD_DETECT;
5677 -}
5678 -
5679 -static inline bool adv7511_have_rx_sense(struct v4l2_subdev *sd)
5680 -{
5681 - return adv7511_rd(sd, 0x42) & MASK_ADV7511_MSEN_DETECT;
5682 -}
5683 -
5684 -static void adv7511_csc_conversion_mode(struct v4l2_subdev *sd, u8 mode)
5685 -{
5686 - adv7511_wr_and_or(sd, 0x18, 0x9f, (mode & 0x3)<<5);
5687 -}
5688 -
5689 -static void adv7511_csc_coeff(struct v4l2_subdev *sd,
5690 - u16 A1, u16 A2, u16 A3, u16 A4,
5691 - u16 B1, u16 B2, u16 B3, u16 B4,
5692 - u16 C1, u16 C2, u16 C3, u16 C4)
5693 -{
5694 - /* A */
5695 - adv7511_wr_and_or(sd, 0x18, 0xe0, A1>>8);
5696 - adv7511_wr(sd, 0x19, A1);
5697 - adv7511_wr_and_or(sd, 0x1A, 0xe0, A2>>8);
5698 - adv7511_wr(sd, 0x1B, A2);
5699 - adv7511_wr_and_or(sd, 0x1c, 0xe0, A3>>8);
5700 - adv7511_wr(sd, 0x1d, A3);
5701 - adv7511_wr_and_or(sd, 0x1e, 0xe0, A4>>8);
5702 - adv7511_wr(sd, 0x1f, A4);
5703 -
5704 - /* B */
5705 - adv7511_wr_and_or(sd, 0x20, 0xe0, B1>>8);
5706 - adv7511_wr(sd, 0x21, B1);
5707 - adv7511_wr_and_or(sd, 0x22, 0xe0, B2>>8);
5708 - adv7511_wr(sd, 0x23, B2);
5709 - adv7511_wr_and_or(sd, 0x24, 0xe0, B3>>8);
5710 - adv7511_wr(sd, 0x25, B3);
5711 - adv7511_wr_and_or(sd, 0x26, 0xe0, B4>>8);
5712 - adv7511_wr(sd, 0x27, B4);
5713 -
5714 - /* C */
5715 - adv7511_wr_and_or(sd, 0x28, 0xe0, C1>>8);
5716 - adv7511_wr(sd, 0x29, C1);
5717 - adv7511_wr_and_or(sd, 0x2A, 0xe0, C2>>8);
5718 - adv7511_wr(sd, 0x2B, C2);
5719 - adv7511_wr_and_or(sd, 0x2C, 0xe0, C3>>8);
5720 - adv7511_wr(sd, 0x2D, C3);
5721 - adv7511_wr_and_or(sd, 0x2E, 0xe0, C4>>8);
5722 - adv7511_wr(sd, 0x2F, C4);
5723 -}
5724 -
5725 -static void adv7511_csc_rgb_full2limit(struct v4l2_subdev *sd, bool enable)
5726 -{
5727 - if (enable) {
5728 - u8 csc_mode = 0;
5729 - adv7511_csc_conversion_mode(sd, csc_mode);
5730 - adv7511_csc_coeff(sd,
5731 - 4096-564, 0, 0, 256,
5732 - 0, 4096-564, 0, 256,
5733 - 0, 0, 4096-564, 256);
5734 - /* enable CSC */
5735 - adv7511_wr_and_or(sd, 0x18, 0x7f, 0x80);
5736 - /* AVI infoframe: Limited range RGB (16-235) */
5737 - adv7511_wr_and_or(sd, 0x57, 0xf3, 0x04);
5738 - } else {
5739 - /* disable CSC */
5740 - adv7511_wr_and_or(sd, 0x18, 0x7f, 0x0);
5741 - /* AVI infoframe: Full range RGB (0-255) */
5742 - adv7511_wr_and_or(sd, 0x57, 0xf3, 0x08);
5743 - }
5744 -}
5745 -
5746 -static void adv7511_set_rgb_quantization_mode(struct v4l2_subdev *sd, struct v4l2_ctrl *ctrl)
5747 -{
5748 - struct adv7511_state *state = get_adv7511_state(sd);
5749 -
5750 - /* Only makes sense for RGB formats */
5751 - if (state->fmt_code != MEDIA_BUS_FMT_RGB888_1X24) {
5752 - /* so just keep quantization */
5753 - adv7511_csc_rgb_full2limit(sd, false);
5754 - return;
5755 - }
5756 -
5757 - switch (ctrl->val) {
5758 - case V4L2_DV_RGB_RANGE_AUTO:
5759 - /* automatic */
5760 - if (state->dv_timings.bt.flags & V4L2_DV_FL_IS_CE_VIDEO) {
5761 - /* CE format, RGB limited range (16-235) */
5762 - adv7511_csc_rgb_full2limit(sd, true);
5763 - } else {
5764 - /* not CE format, RGB full range (0-255) */
5765 - adv7511_csc_rgb_full2limit(sd, false);
5766 - }
5767 - break;
5768 - case V4L2_DV_RGB_RANGE_LIMITED:
5769 - /* RGB limited range (16-235) */
5770 - adv7511_csc_rgb_full2limit(sd, true);
5771 - break;
5772 - case V4L2_DV_RGB_RANGE_FULL:
5773 - /* RGB full range (0-255) */
5774 - adv7511_csc_rgb_full2limit(sd, false);
5775 - break;
5776 - }
5777 -}
5778 -
5779 -/* ------------------------------ CTRL OPS ------------------------------ */
5780 -
5781 -static int adv7511_s_ctrl(struct v4l2_ctrl *ctrl)
5782 -{
5783 - struct v4l2_subdev *sd = to_sd(ctrl);
5784 - struct adv7511_state *state = get_adv7511_state(sd);
5785 -
5786 - v4l2_dbg(1, debug, sd, "%s: ctrl id: %d, ctrl->val %d\n", __func__, ctrl->id, ctrl->val);
5787 -
5788 - if (state->hdmi_mode_ctrl == ctrl) {
5789 - /* Set HDMI or DVI-D */
5790 - adv7511_wr_and_or(sd, 0xaf, 0xfd, ctrl->val == V4L2_DV_TX_MODE_HDMI ? 0x02 : 0x00);
5791 - return 0;
5792 - }
5793 - if (state->rgb_quantization_range_ctrl == ctrl) {
5794 - adv7511_set_rgb_quantization_mode(sd, ctrl);
5795 - return 0;
5796 - }
5797 - if (state->content_type_ctrl == ctrl) {
5798 - u8 itc, cn;
5799 -
5800 - state->content_type = ctrl->val;
5801 - itc = state->content_type != V4L2_DV_IT_CONTENT_TYPE_NO_ITC;
5802 - cn = itc ? state->content_type : V4L2_DV_IT_CONTENT_TYPE_GRAPHICS;
5803 - adv7511_wr_and_or(sd, 0x57, 0x7f, itc << 7);
5804 - adv7511_wr_and_or(sd, 0x59, 0xcf, cn << 4);
5805 - return 0;
5806 - }
5807 -
5808 - return -EINVAL;
5809 -}
5810 -
5811 -static const struct v4l2_ctrl_ops adv7511_ctrl_ops = {
5812 - .s_ctrl = adv7511_s_ctrl,
5813 -};
5814 -
5815 -/* ---------------------------- CORE OPS ------------------------------------------- */
5816 -
5817 -#ifdef CONFIG_VIDEO_ADV_DEBUG
5818 -static void adv7511_inv_register(struct v4l2_subdev *sd)
5819 -{
5820 - struct adv7511_state *state = get_adv7511_state(sd);
5821 -
5822 - v4l2_info(sd, "0x000-0x0ff: Main Map\n");
5823 - if (state->i2c_cec)
5824 - v4l2_info(sd, "0x100-0x1ff: CEC Map\n");
5825 -}
5826 -
5827 -static int adv7511_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
5828 -{
5829 - struct adv7511_state *state = get_adv7511_state(sd);
5830 -
5831 - reg->size = 1;
5832 - switch (reg->reg >> 8) {
5833 - case 0:
5834 - reg->val = adv7511_rd(sd, reg->reg & 0xff);
5835 - break;
5836 - case 1:
5837 - if (state->i2c_cec) {
5838 - reg->val = adv7511_cec_read(sd, reg->reg & 0xff);
5839 - break;
5840 - }
5841 - /* fall through */
5842 - default:
5843 - v4l2_info(sd, "Register %03llx not supported\n", reg->reg);
5844 - adv7511_inv_register(sd);
5845 - break;
5846 - }
5847 - return 0;
5848 -}
5849 -
5850 -static int adv7511_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg)
5851 -{
5852 - struct adv7511_state *state = get_adv7511_state(sd);
5853 -
5854 - switch (reg->reg >> 8) {
5855 - case 0:
5856 - adv7511_wr(sd, reg->reg & 0xff, reg->val & 0xff);
5857 - break;
5858 - case 1:
5859 - if (state->i2c_cec) {
5860 - adv7511_cec_write(sd, reg->reg & 0xff, reg->val & 0xff);
5861 - break;
5862 - }
5863 - /* fall through */
5864 - default:
5865 - v4l2_info(sd, "Register %03llx not supported\n", reg->reg);
5866 - adv7511_inv_register(sd);
5867 - break;
5868 - }
5869 - return 0;
5870 -}
5871 -#endif
5872 -
5873 -struct adv7511_cfg_read_infoframe {
5874 - const char *desc;
5875 - u8 present_reg;
5876 - u8 present_mask;
5877 - u8 header[3];
5878 - u16 payload_addr;
5879 -};
5880 -
5881 -static u8 hdmi_infoframe_checksum(u8 *ptr, size_t size)
5882 -{
5883 - u8 csum = 0;
5884 - size_t i;
5885 -
5886 - /* compute checksum */
5887 - for (i = 0; i < size; i++)
5888 - csum += ptr[i];
5889 -
5890 - return 256 - csum;
5891 -}
5892 -
5893 -static void log_infoframe(struct v4l2_subdev *sd, const struct adv7511_cfg_read_infoframe *cri)
5894 -{
5895 - struct i2c_client *client = v4l2_get_subdevdata(sd);
5896 - struct device *dev = &client->dev;
5897 - union hdmi_infoframe frame;
5898 - u8 buffer[32];
5899 - u8 len;
5900 - int i;
5901 -
5902 - if (!(adv7511_rd(sd, cri->present_reg) & cri->present_mask)) {
5903 - v4l2_info(sd, "%s infoframe not transmitted\n", cri->desc);
5904 - return;
5905 - }
5906 -
5907 - memcpy(buffer, cri->header, sizeof(cri->header));
5908 -
5909 - len = buffer[2];
5910 -
5911 - if (len + 4 > sizeof(buffer)) {
5912 - v4l2_err(sd, "%s: invalid %s infoframe length %d\n", __func__, cri->desc, len);
5913 - return;
5914 - }
5915 -
5916 - if (cri->payload_addr >= 0x100) {
5917 - for (i = 0; i < len; i++)
5918 - buffer[i + 4] = adv7511_pktmem_rd(sd, cri->payload_addr + i - 0x100);
5919 - } else {
5920 - for (i = 0; i < len; i++)
5921 - buffer[i + 4] = adv7511_rd(sd, cri->payload_addr + i);
5922 - }
5923 - buffer[3] = 0;
5924 - buffer[3] = hdmi_infoframe_checksum(buffer, len + 4);
5925 -
5926 - if (hdmi_infoframe_unpack(&frame, buffer) < 0) {
5927 - v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__, cri->desc);
5928 - return;
5929 - }
5930 -
5931 - hdmi_infoframe_log(KERN_INFO, dev, &frame);
5932 -}
5933 -
5934 -static void adv7511_log_infoframes(struct v4l2_subdev *sd)
5935 -{
5936 - static const struct adv7511_cfg_read_infoframe cri[] = {
5937 - { "AVI", 0x44, 0x10, { 0x82, 2, 13 }, 0x55 },
5938 - { "Audio", 0x44, 0x08, { 0x84, 1, 10 }, 0x73 },
5939 - { "SDP", 0x40, 0x40, { 0x83, 1, 25 }, 0x103 },
5940 - };
5941 - int i;
5942 -
5943 - for (i = 0; i < ARRAY_SIZE(cri); i++)
5944 - log_infoframe(sd, &cri[i]);
5945 -}
5946 -
5947 -static int adv7511_log_status(struct v4l2_subdev *sd)
5948 -{
5949 - struct adv7511_state *state = get_adv7511_state(sd);
5950 - struct adv7511_state_edid *edid = &state->edid;
5951 - int i;
5952 -
5953 - static const char * const states[] = {
5954 - "in reset",
5955 - "reading EDID",
5956 - "idle",
5957 - "initializing HDCP",
5958 - "HDCP enabled",
5959 - "initializing HDCP repeater",
5960 - "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"
5961 - };
5962 - static const char * const errors[] = {
5963 - "no error",
5964 - "bad receiver BKSV",
5965 - "Ri mismatch",
5966 - "Pj mismatch",
5967 - "i2c error",
5968 - "timed out",
5969 - "max repeater cascade exceeded",
5970 - "hash check failed",
5971 - "too many devices",
5972 - "9", "A", "B", "C", "D", "E", "F"
5973 - };
5974 -
5975 - v4l2_info(sd, "power %s\n", state->power_on ? "on" : "off");
5976 - v4l2_info(sd, "%s hotplug, %s Rx Sense, %s EDID (%d block(s))\n",
5977 - (adv7511_rd(sd, 0x42) & MASK_ADV7511_HPD_DETECT) ? "detected" : "no",
5978 - (adv7511_rd(sd, 0x42) & MASK_ADV7511_MSEN_DETECT) ? "detected" : "no",
5979 - edid->segments ? "found" : "no",
5980 - edid->blocks);
5981 - v4l2_info(sd, "%s output %s\n",
5982 - (adv7511_rd(sd, 0xaf) & 0x02) ?
5983 - "HDMI" : "DVI-D",
5984 - (adv7511_rd(sd, 0xa1) & 0x3c) ?
5985 - "disabled" : "enabled");
5986 - v4l2_info(sd, "state: %s, error: %s, detect count: %u, msk/irq: %02x/%02x\n",
5987 - states[adv7511_rd(sd, 0xc8) & 0xf],
5988 - errors[adv7511_rd(sd, 0xc8) >> 4], state->edid_detect_counter,
5989 - adv7511_rd(sd, 0x94), adv7511_rd(sd, 0x96));
5990 - v4l2_info(sd, "RGB quantization: %s range\n", adv7511_rd(sd, 0x18) & 0x80 ? "limited" : "full");
5991 - if (adv7511_rd(sd, 0xaf) & 0x02) {
5992 - /* HDMI only */
5993 - u8 manual_cts = adv7511_rd(sd, 0x0a) & 0x80;
5994 - u32 N = (adv7511_rd(sd, 0x01) & 0xf) << 16 |
5995 - adv7511_rd(sd, 0x02) << 8 |
5996 - adv7511_rd(sd, 0x03);
5997 - u8 vic_detect = adv7511_rd(sd, 0x3e) >> 2;
5998 - u8 vic_sent = adv7511_rd(sd, 0x3d) & 0x3f;
5999 - u32 CTS;
6000 -
6001 - if (manual_cts)
6002 - CTS = (adv7511_rd(sd, 0x07) & 0xf) << 16 |
6003 - adv7511_rd(sd, 0x08) << 8 |
6004 - adv7511_rd(sd, 0x09);
6005 - else
6006 - CTS = (adv7511_rd(sd, 0x04) & 0xf) << 16 |
6007 - adv7511_rd(sd, 0x05) << 8 |
6008 - adv7511_rd(sd, 0x06);
6009 - v4l2_info(sd, "CTS %s mode: N %d, CTS %d\n",
6010 - manual_cts ? "manual" : "automatic", N, CTS);
6011 - v4l2_info(sd, "VIC: detected %d, sent %d\n",
6012 - vic_detect, vic_sent);
6013 - adv7511_log_infoframes(sd);
6014 - }
6015 - if (state->dv_timings.type == V4L2_DV_BT_656_1120)
6016 - v4l2_print_dv_timings(sd->name, "timings: ",
6017 - &state->dv_timings, false);
6018 - else
6019 - v4l2_info(sd, "no timings set\n");
6020 - v4l2_info(sd, "i2c edid addr: 0x%x\n", state->i2c_edid_addr);
6021 -
6022 - if (state->i2c_cec == NULL)
6023 - return 0;
6024 -
6025 - v4l2_info(sd, "i2c cec addr: 0x%x\n", state->i2c_cec_addr);
6026 -
6027 - v4l2_info(sd, "CEC: %s\n", state->cec_enabled_adap ?
6028 - "enabled" : "disabled");
6029 - if (state->cec_enabled_adap) {
6030 - for (i = 0; i < ADV7511_MAX_ADDRS; i++) {
6031 - bool is_valid = state->cec_valid_addrs & (1 << i);
6032 -
6033 - if (is_valid)
6034 - v4l2_info(sd, "CEC Logical Address: 0x%x\n",
6035 - state->cec_addr[i]);
6036 - }
6037 - }
6038 - v4l2_info(sd, "i2c pktmem addr: 0x%x\n", state->i2c_pktmem_addr);
6039 - return 0;
6040 -}
6041 -
6042 -/* Power up/down adv7511 */
6043 -static int adv7511_s_power(struct v4l2_subdev *sd, int on)
6044 -{
6045 - struct adv7511_state *state = get_adv7511_state(sd);
6046 - const int retries = 20;
6047 - int i;
6048 -
6049 - v4l2_dbg(1, debug, sd, "%s: power %s\n", __func__, on ? "on" : "off");
6050 -
6051 - state->power_on = on;
6052 -
6053 - if (!on) {
6054 - /* Power down */
6055 - adv7511_wr_and_or(sd, 0x41, 0xbf, 0x40);
6056 - return true;
6057 - }
6058 -
6059 - /* Power up */
6060 - /* The adv7511 does not always come up immediately.
6061 - Retry multiple times. */
6062 - for (i = 0; i < retries; i++) {
6063 - adv7511_wr_and_or(sd, 0x41, 0xbf, 0x0);
6064 - if ((adv7511_rd(sd, 0x41) & 0x40) == 0)
6065 - break;
6066 - adv7511_wr_and_or(sd, 0x41, 0xbf, 0x40);
6067 - msleep(10);
6068 - }
6069 - if (i == retries) {
6070 - v4l2_dbg(1, debug, sd, "%s: failed to powerup the adv7511!\n", __func__);
6071 - adv7511_s_power(sd, 0);
6072 - return false;
6073 - }
6074 - if (i > 1)
6075 - v4l2_dbg(1, debug, sd, "%s: needed %d retries to powerup the adv7511\n", __func__, i);
6076 -
6077 - /* Reserved registers that must be set */
6078 - adv7511_wr(sd, 0x98, 0x03);
6079 - adv7511_wr_and_or(sd, 0x9a, 0xfe, 0x70);
6080 - adv7511_wr(sd, 0x9c, 0x30);
6081 - adv7511_wr_and_or(sd, 0x9d, 0xfc, 0x01);
6082 - adv7511_wr(sd, 0xa2, 0xa4);
6083 - adv7511_wr(sd, 0xa3, 0xa4);
6084 - adv7511_wr(sd, 0xe0, 0xd0);
6085 - adv7511_wr(sd, 0xf9, 0x00);
6086 -
6087 - adv7511_wr(sd, 0x43, state->i2c_edid_addr);
6088 - adv7511_wr(sd, 0x45, state->i2c_pktmem_addr);
6089 -
6090 - /* Set number of attempts to read the EDID */
6091 - adv7511_wr(sd, 0xc9, 0xf);
6092 - return true;
6093 -}
6094 -
6095 -#if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
6096 -static int adv7511_cec_adap_enable(struct cec_adapter *adap, bool enable)
6097 -{
6098 - struct adv7511_state *state = adap->priv;
6099 - struct v4l2_subdev *sd = &state->sd;
6100 -
6101 - if (state->i2c_cec == NULL)
6102 - return -EIO;
6103 -
6104 - if (!state->cec_enabled_adap && enable) {
6105 - /* power up cec section */
6106 - adv7511_cec_write_and_or(sd, 0x4e, 0xfc, 0x01);
6107 - /* legacy mode and clear all rx buffers */
6108 - adv7511_cec_write(sd, 0x4a, 0x07);
6109 - adv7511_cec_write(sd, 0x4a, 0);
6110 - adv7511_cec_write_and_or(sd, 0x11, 0xfe, 0); /* initially disable tx */
6111 - /* enabled irqs: */
6112 - /* tx: ready */
6113 - /* tx: arbitration lost */
6114 - /* tx: retry timeout */
6115 - /* rx: ready 1 */
6116 - if (state->enabled_irq)
6117 - adv7511_wr_and_or(sd, 0x95, 0xc0, 0x39);
6118 - } else if (state->cec_enabled_adap && !enable) {
6119 - if (state->enabled_irq)
6120 - adv7511_wr_and_or(sd, 0x95, 0xc0, 0x00);
6121 - /* disable address mask 1-3 */
6122 - adv7511_cec_write_and_or(sd, 0x4b, 0x8f, 0x00);
6123 - /* power down cec section */
6124 - adv7511_cec_write_and_or(sd, 0x4e, 0xfc, 0x00);
6125 - state->cec_valid_addrs = 0;
6126 - }
6127 - state->cec_enabled_adap = enable;
6128 - return 0;
6129 -}
6130 -
6131 -static int adv7511_cec_adap_log_addr(struct cec_adapter *adap, u8 addr)
6132 -{
6133 - struct adv7511_state *state = adap->priv;
6134 - struct v4l2_subdev *sd = &state->sd;
6135 - unsigned int i, free_idx = ADV7511_MAX_ADDRS;
6136 -
6137 - if (!state->cec_enabled_adap)
6138 - return addr == CEC_LOG_ADDR_INVALID ? 0 : -EIO;
6139 -
6140 - if (addr == CEC_LOG_ADDR_INVALID) {
6141 - adv7511_cec_write_and_or(sd, 0x4b, 0x8f, 0);
6142 - state->cec_valid_addrs = 0;
6143 - return 0;
6144 - }
6145 -
6146 - for (i = 0; i < ADV7511_MAX_ADDRS; i++) {
6147 - bool is_valid = state->cec_valid_addrs & (1 << i);
6148 -
6149 - if (free_idx == ADV7511_MAX_ADDRS && !is_valid)
6150 - free_idx = i;
6151 - if (is_valid && state->cec_addr[i] == addr)
6152 - return 0;
6153 - }
6154 - if (i == ADV7511_MAX_ADDRS) {
6155 - i = free_idx;
6156 - if (i == ADV7511_MAX_ADDRS)
6157 - return -ENXIO;
6158 - }
6159 - state->cec_addr[i] = addr;
6160 - state->cec_valid_addrs |= 1 << i;
6161 -
6162 - switch (i) {
6163 - case 0:
6164 - /* enable address mask 0 */
6165 - adv7511_cec_write_and_or(sd, 0x4b, 0xef, 0x10);
6166 - /* set address for mask 0 */
6167 - adv7511_cec_write_and_or(sd, 0x4c, 0xf0, addr);
6168 - break;
6169 - case 1:
6170 - /* enable address mask 1 */
6171 - adv7511_cec_write_and_or(sd, 0x4b, 0xdf, 0x20);
6172 - /* set address for mask 1 */
6173 - adv7511_cec_write_and_or(sd, 0x4c, 0x0f, addr << 4);
6174 - break;
6175 - case 2:
6176 - /* enable address mask 2 */
6177 - adv7511_cec_write_and_or(sd, 0x4b, 0xbf, 0x40);
6178 - /* set address for mask 1 */
6179 - adv7511_cec_write_and_or(sd, 0x4d, 0xf0, addr);
6180 - break;
6181 - }
6182 - return 0;
6183 -}
6184 -
6185 -static int adv7511_cec_adap_transmit(struct cec_adapter *adap, u8 attempts,
6186 - u32 signal_free_time, struct cec_msg *msg)
6187 -{
6188 - struct adv7511_state *state = adap->priv;
6189 - struct v4l2_subdev *sd = &state->sd;
6190 - u8 len = msg->len;
6191 - unsigned int i;
6192 -
6193 - v4l2_dbg(1, debug, sd, "%s: len %d\n", __func__, len);
6194 -
6195 - if (len > 16) {
6196 - v4l2_err(sd, "%s: len exceeded 16 (%d)\n", __func__, len);
6197 - return -EINVAL;
6198 - }
6199 -
6200 - /*
6201 - * The number of retries is the number of attempts - 1, but retry
6202 - * at least once. It's not clear if a value of 0 is allowed, so
6203 - * let's do at least one retry.
6204 - */
6205 - adv7511_cec_write_and_or(sd, 0x12, ~0x70, max(1, attempts - 1) << 4);
6206 -
6207 - /* blocking, clear cec tx irq status */
6208 - adv7511_wr_and_or(sd, 0x97, 0xc7, 0x38);
6209 -
6210 - /* write data */
6211 - for (i = 0; i < len; i++)
6212 - adv7511_cec_write(sd, i, msg->msg[i]);
6213 -
6214 - /* set length (data + header) */
6215 - adv7511_cec_write(sd, 0x10, len);
6216 - /* start transmit, enable tx */
6217 - adv7511_cec_write(sd, 0x11, 0x01);
6218 - return 0;
6219 -}
6220 -
6221 -static void adv_cec_tx_raw_status(struct v4l2_subdev *sd, u8 tx_raw_status)
6222 -{
6223 - struct adv7511_state *state = get_adv7511_state(sd);
6224 -
6225 - if ((adv7511_cec_read(sd, 0x11) & 0x01) == 0) {
6226 - v4l2_dbg(1, debug, sd, "%s: tx raw: tx disabled\n", __func__);
6227 - return;
6228 - }
6229 -
6230 - if (tx_raw_status & 0x10) {
6231 - v4l2_dbg(1, debug, sd,
6232 - "%s: tx raw: arbitration lost\n", __func__);
6233 - cec_transmit_done(state->cec_adap, CEC_TX_STATUS_ARB_LOST,
6234 - 1, 0, 0, 0);
6235 - return;
6236 - }
6237 - if (tx_raw_status & 0x08) {
6238 - u8 status;
6239 - u8 nack_cnt;
6240 - u8 low_drive_cnt;
6241 -
6242 - v4l2_dbg(1, debug, sd, "%s: tx raw: retry failed\n", __func__);
6243 - /*
6244 - * We set this status bit since this hardware performs
6245 - * retransmissions.
6246 - */
6247 - status = CEC_TX_STATUS_MAX_RETRIES;
6248 - nack_cnt = adv7511_cec_read(sd, 0x14) & 0xf;
6249 - if (nack_cnt)
6250 - status |= CEC_TX_STATUS_NACK;
6251 - low_drive_cnt = adv7511_cec_read(sd, 0x14) >> 4;
6252 - if (low_drive_cnt)
6253 - status |= CEC_TX_STATUS_LOW_DRIVE;
6254 - cec_transmit_done(state->cec_adap, status,
6255 - 0, nack_cnt, low_drive_cnt, 0);
6256 - return;
6257 - }
6258 - if (tx_raw_status & 0x20) {
6259 - v4l2_dbg(1, debug, sd, "%s: tx raw: ready ok\n", __func__);
6260 - cec_transmit_done(state->cec_adap, CEC_TX_STATUS_OK, 0, 0, 0, 0);
6261 - return;
6262 - }
6263 -}
6264 -
6265 -static const struct cec_adap_ops adv7511_cec_adap_ops = {
6266 - .adap_enable = adv7511_cec_adap_enable,
6267 - .adap_log_addr = adv7511_cec_adap_log_addr,
6268 - .adap_transmit = adv7511_cec_adap_transmit,
6269 -};
6270 -#endif
6271 -
6272 -/* Enable interrupts */
6273 -static void adv7511_set_isr(struct v4l2_subdev *sd, bool enable)
6274 -{
6275 - struct adv7511_state *state = get_adv7511_state(sd);
6276 - u8 irqs = MASK_ADV7511_HPD_INT | MASK_ADV7511_MSEN_INT;
6277 - u8 irqs_rd;
6278 - int retries = 100;
6279 -
6280 - v4l2_dbg(2, debug, sd, "%s: %s\n", __func__, enable ? "enable" : "disable");
6281 -
6282 - if (state->enabled_irq == enable)
6283 - return;
6284 - state->enabled_irq = enable;
6285 -
6286 - /* The datasheet says that the EDID ready interrupt should be
6287 - disabled if there is no hotplug. */
6288 - if (!enable)
6289 - irqs = 0;
6290 - else if (adv7511_have_hotplug(sd))
6291 - irqs |= MASK_ADV7511_EDID_RDY_INT;
6292 -
6293 - adv7511_wr_and_or(sd, 0x95, 0xc0,
6294 - (state->cec_enabled_adap && enable) ? 0x39 : 0x00);
6295 -
6296 - /*
6297 - * This i2c write can fail (approx. 1 in 1000 writes). But it
6298 - * is essential that this register is correct, so retry it
6299 - * multiple times.
6300 - *
6301 - * Note that the i2c write does not report an error, but the readback
6302 - * clearly shows the wrong value.
6303 - */
6304 - do {
6305 - adv7511_wr(sd, 0x94, irqs);
6306 - irqs_rd = adv7511_rd(sd, 0x94);
6307 - } while (retries-- && irqs_rd != irqs);
6308 -
6309 - if (irqs_rd == irqs)
6310 - return;
6311 - v4l2_err(sd, "Could not set interrupts: hw failure?\n");
6312 -}
6313 -
6314 -/* Interrupt handler */
6315 -static int adv7511_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
6316 -{
6317 - u8 irq_status;
6318 - u8 cec_irq;
6319 -
6320 - /* disable interrupts to prevent a race condition */
6321 - adv7511_set_isr(sd, false);
6322 - irq_status = adv7511_rd(sd, 0x96);
6323 - cec_irq = adv7511_rd(sd, 0x97);
6324 - /* clear detected interrupts */
6325 - adv7511_wr(sd, 0x96, irq_status);
6326 - adv7511_wr(sd, 0x97, cec_irq);
6327 -
6328 - v4l2_dbg(1, debug, sd, "%s: irq 0x%x, cec-irq 0x%x\n", __func__,
6329 - irq_status, cec_irq);
6330 -
6331 - if (irq_status & (MASK_ADV7511_HPD_INT | MASK_ADV7511_MSEN_INT))
6332 - adv7511_check_monitor_present_status(sd);
6333 - if (irq_status & MASK_ADV7511_EDID_RDY_INT)
6334 - adv7511_check_edid_status(sd);
6335 -
6336 -#if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
6337 - if (cec_irq & 0x38)
6338 - adv_cec_tx_raw_status(sd, cec_irq);
6339 -
6340 - if (cec_irq & 1) {
6341 - struct adv7511_state *state = get_adv7511_state(sd);
6342 - struct cec_msg msg;
6343 -
6344 - msg.len = adv7511_cec_read(sd, 0x25) & 0x1f;
6345 -
6346 - v4l2_dbg(1, debug, sd, "%s: cec msg len %d\n", __func__,
6347 - msg.len);
6348 -
6349 - if (msg.len > 16)
6350 - msg.len = 16;
6351 -
6352 - if (msg.len) {
6353 - u8 i;
6354 -
6355 - for (i = 0; i < msg.len; i++)
6356 - msg.msg[i] = adv7511_cec_read(sd, i + 0x15);
6357 -
6358 - adv7511_cec_write(sd, 0x4a, 1); /* toggle to re-enable rx 1 */
6359 - adv7511_cec_write(sd, 0x4a, 0);
6360 - cec_received_msg(state->cec_adap, &msg);
6361 - }
6362 - }
6363 -#endif
6364 -
6365 - /* enable interrupts */
6366 - adv7511_set_isr(sd, true);
6367 -
6368 - if (handled)
6369 - *handled = true;
6370 - return 0;
6371 -}
6372 -
6373 -static const struct v4l2_subdev_core_ops adv7511_core_ops = {
6374 - .log_status = adv7511_log_status,
6375 -#ifdef CONFIG_VIDEO_ADV_DEBUG
6376 - .g_register = adv7511_g_register,
6377 - .s_register = adv7511_s_register,
6378 -#endif
6379 - .s_power = adv7511_s_power,
6380 - .interrupt_service_routine = adv7511_isr,
6381 -};
6382 -
6383 -/* ------------------------------ VIDEO OPS ------------------------------ */
6384 -
6385 -/* Enable/disable adv7511 output */
6386 -static int adv7511_s_stream(struct v4l2_subdev *sd, int enable)
6387 -{
6388 - struct adv7511_state *state = get_adv7511_state(sd);
6389 -
6390 - v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
6391 - adv7511_wr_and_or(sd, 0xa1, ~0x3c, (enable ? 0 : 0x3c));
6392 - if (enable) {
6393 - adv7511_check_monitor_present_status(sd);
6394 - } else {
6395 - adv7511_s_power(sd, 0);
6396 - state->have_monitor = false;
6397 - }
6398 - return 0;
6399 -}
6400 -
6401 -static int adv7511_s_dv_timings(struct v4l2_subdev *sd,
6402 - struct v4l2_dv_timings *timings)
6403 -{
6404 - struct adv7511_state *state = get_adv7511_state(sd);
6405 - struct v4l2_bt_timings *bt = &timings->bt;
6406 - u32 fps;
6407 -
6408 - v4l2_dbg(1, debug, sd, "%s:\n", __func__);
6409 -
6410 - /* quick sanity check */
6411 - if (!v4l2_valid_dv_timings(timings, &adv7511_timings_cap, NULL, NULL))
6412 - return -EINVAL;
6413 -
6414 - /* Fill the optional fields .standards and .flags in struct v4l2_dv_timings
6415 - if the format is one of the CEA or DMT timings. */
6416 - v4l2_find_dv_timings_cap(timings, &adv7511_timings_cap, 0, NULL, NULL);
6417 -
6418 - /* save timings */
6419 - state->dv_timings = *timings;
6420 -
6421 - /* set h/vsync polarities */
6422 - adv7511_wr_and_or(sd, 0x17, 0x9f,
6423 - ((bt->polarities & V4L2_DV_VSYNC_POS_POL) ? 0 : 0x40) |
6424 - ((bt->polarities & V4L2_DV_HSYNC_POS_POL) ? 0 : 0x20));
6425 -
6426 - fps = (u32)bt->pixelclock / (V4L2_DV_BT_FRAME_WIDTH(bt) * V4L2_DV_BT_FRAME_HEIGHT(bt));
6427 - switch (fps) {
6428 - case 24:
6429 - adv7511_wr_and_or(sd, 0xfb, 0xf9, 1 << 1);
6430 - break;
6431 - case 25:
6432 - adv7511_wr_and_or(sd, 0xfb, 0xf9, 2 << 1);
6433 - break;
6434 - case 30:
6435 - adv7511_wr_and_or(sd, 0xfb, 0xf9, 3 << 1);
6436 - break;
6437 - default:
6438 - adv7511_wr_and_or(sd, 0xfb, 0xf9, 0);
6439 - break;
6440 - }
6441 -
6442 - /* update quantization range based on new dv_timings */
6443 - adv7511_set_rgb_quantization_mode(sd, state->rgb_quantization_range_ctrl);
6444 -
6445 - return 0;
6446 -}
6447 -
6448 -static int adv7511_g_dv_timings(struct v4l2_subdev *sd,
6449 - struct v4l2_dv_timings *timings)
6450 -{
6451 - struct adv7511_state *state = get_adv7511_state(sd);
6452 -
6453 - v4l2_dbg(1, debug, sd, "%s:\n", __func__);
6454 -
6455 - if (!timings)
6456 - return -EINVAL;
6457 -
6458 - *timings = state->dv_timings;
6459 -
6460 - return 0;
6461 -}
6462 -
6463 -static int adv7511_enum_dv_timings(struct v4l2_subdev *sd,
6464 - struct v4l2_enum_dv_timings *timings)
6465 -{
6466 - if (timings->pad != 0)
6467 - return -EINVAL;
6468 -
6469 - return v4l2_enum_dv_timings_cap(timings, &adv7511_timings_cap, NULL, NULL);
6470 -}
6471 -
6472 -static int adv7511_dv_timings_cap(struct v4l2_subdev *sd,
6473 - struct v4l2_dv_timings_cap *cap)
6474 -{
6475 - if (cap->pad != 0)
6476 - return -EINVAL;
6477 -
6478 - *cap = adv7511_timings_cap;
6479 - return 0;
6480 -}
6481 -
6482 -static const struct v4l2_subdev_video_ops adv7511_video_ops = {
6483 - .s_stream = adv7511_s_stream,
6484 - .s_dv_timings = adv7511_s_dv_timings,
6485 - .g_dv_timings = adv7511_g_dv_timings,
6486 -};
6487 -
6488 -/* ------------------------------ AUDIO OPS ------------------------------ */
6489 -static int adv7511_s_audio_stream(struct v4l2_subdev *sd, int enable)
6490 -{
6491 - v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
6492 -
6493 - if (enable)
6494 - adv7511_wr_and_or(sd, 0x4b, 0x3f, 0x80);
6495 - else
6496 - adv7511_wr_and_or(sd, 0x4b, 0x3f, 0x40);
6497 -
6498 - return 0;
6499 -}
6500 -
6501 -static int adv7511_s_clock_freq(struct v4l2_subdev *sd, u32 freq)
6502 -{
6503 - u32 N;
6504 -
6505 - switch (freq) {
6506 - case 32000: N = 4096; break;
6507 - case 44100: N = 6272; break;
6508 - case 48000: N = 6144; break;
6509 - case 88200: N = 12544; break;
6510 - case 96000: N = 12288; break;
6511 - case 176400: N = 25088; break;
6512 - case 192000: N = 24576; break;
6513 - default:
6514 - return -EINVAL;
6515 - }
6516 -
6517 - /* Set N (used with CTS to regenerate the audio clock) */
6518 - adv7511_wr(sd, 0x01, (N >> 16) & 0xf);
6519 - adv7511_wr(sd, 0x02, (N >> 8) & 0xff);
6520 - adv7511_wr(sd, 0x03, N & 0xff);
6521 -
6522 - return 0;
6523 -}
6524 -
6525 -static int adv7511_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq)
6526 -{
6527 - u32 i2s_sf;
6528 -
6529 - switch (freq) {
6530 - case 32000: i2s_sf = 0x30; break;
6531 - case 44100: i2s_sf = 0x00; break;
6532 - case 48000: i2s_sf = 0x20; break;
6533 - case 88200: i2s_sf = 0x80; break;
6534 - case 96000: i2s_sf = 0xa0; break;
6535 - case 176400: i2s_sf = 0xc0; break;
6536 - case 192000: i2s_sf = 0xe0; break;
6537 - default:
6538 - return -EINVAL;
6539 - }
6540 -
6541 - /* Set sampling frequency for I2S audio to 48 kHz */
6542 - adv7511_wr_and_or(sd, 0x15, 0xf, i2s_sf);
6543 -
6544 - return 0;
6545 -}
6546 -
6547 -static int adv7511_s_routing(struct v4l2_subdev *sd, u32 input, u32 output, u32 config)
6548 -{
6549 - /* Only 2 channels in use for application */
6550 - adv7511_wr_and_or(sd, 0x73, 0xf8, 0x1);
6551 - /* Speaker mapping */
6552 - adv7511_wr(sd, 0x76, 0x00);
6553 -
6554 - /* 16 bit audio word length */
6555 - adv7511_wr_and_or(sd, 0x14, 0xf0, 0x02);
6556 -
6557 - return 0;
6558 -}
6559 -
6560 -static const struct v4l2_subdev_audio_ops adv7511_audio_ops = {
6561 - .s_stream = adv7511_s_audio_stream,
6562 - .s_clock_freq = adv7511_s_clock_freq,
6563 - .s_i2s_clock_freq = adv7511_s_i2s_clock_freq,
6564 - .s_routing = adv7511_s_routing,
6565 -};
6566 -
6567 -/* ---------------------------- PAD OPS ------------------------------------- */
6568 -
6569 -static int adv7511_get_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid)
6570 -{
6571 - struct adv7511_state *state = get_adv7511_state(sd);
6572 -
6573 - memset(edid->reserved, 0, sizeof(edid->reserved));
6574 -
6575 - if (edid->pad != 0)
6576 - return -EINVAL;
6577 -
6578 - if (edid->start_block == 0 && edid->blocks == 0) {
6579 - edid->blocks = state->edid.segments * 2;
6580 - return 0;
6581 - }
6582 -
6583 - if (state->edid.segments == 0)
6584 - return -ENODATA;
6585 -
6586 - if (edid->start_block >= state->edid.segments * 2)
6587 - return -EINVAL;
6588 -
6589 - if (edid->start_block + edid->blocks > state->edid.segments * 2)
6590 - edid->blocks = state->edid.segments * 2 - edid->start_block;
6591 -
6592 - memcpy(edid->edid, &state->edid.data[edid->start_block * 128],
6593 - 128 * edid->blocks);
6594 -
6595 - return 0;
6596 -}
6597 -
6598 -static int adv7511_enum_mbus_code(struct v4l2_subdev *sd,
6599 - struct v4l2_subdev_pad_config *cfg,
6600 - struct v4l2_subdev_mbus_code_enum *code)
6601 -{
6602 - if (code->pad != 0)
6603 - return -EINVAL;
6604 -
6605 - switch (code->index) {
6606 - case 0:
6607 - code->code = MEDIA_BUS_FMT_RGB888_1X24;
6608 - break;
6609 - case 1:
6610 - code->code = MEDIA_BUS_FMT_YUYV8_1X16;
6611 - break;
6612 - case 2:
6613 - code->code = MEDIA_BUS_FMT_UYVY8_1X16;
6614 - break;
6615 - default:
6616 - return -EINVAL;
6617 - }
6618 - return 0;
6619 -}
6620 -
6621 -static void adv7511_fill_format(struct adv7511_state *state,
6622 - struct v4l2_mbus_framefmt *format)
6623 -{
6624 - format->width = state->dv_timings.bt.width;
6625 - format->height = state->dv_timings.bt.height;
6626 - format->field = V4L2_FIELD_NONE;
6627 -}
6628 -
6629 -static int adv7511_get_fmt(struct v4l2_subdev *sd,
6630 - struct v4l2_subdev_pad_config *cfg,
6631 - struct v4l2_subdev_format *format)
6632 -{
6633 - struct adv7511_state *state = get_adv7511_state(sd);
6634 -
6635 - if (format->pad != 0)
6636 - return -EINVAL;
6637 -
6638 - memset(&format->format, 0, sizeof(format->format));
6639 - adv7511_fill_format(state, &format->format);
6640 -
6641 - if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
6642 - struct v4l2_mbus_framefmt *fmt;
6643 -
6644 - fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
6645 - format->format.code = fmt->code;
6646 - format->format.colorspace = fmt->colorspace;
6647 - format->format.ycbcr_enc = fmt->ycbcr_enc;
6648 - format->format.quantization = fmt->quantization;
6649 - format->format.xfer_func = fmt->xfer_func;
6650 - } else {
6651 - format->format.code = state->fmt_code;
6652 - format->format.colorspace = state->colorspace;
6653 - format->format.ycbcr_enc = state->ycbcr_enc;
6654 - format->format.quantization = state->quantization;
6655 - format->format.xfer_func = state->xfer_func;
6656 - }
6657 -
6658 - return 0;
6659 -}
6660 -
6661 -static int adv7511_set_fmt(struct v4l2_subdev *sd,
6662 - struct v4l2_subdev_pad_config *cfg,
6663 - struct v4l2_subdev_format *format)
6664 -{
6665 - struct adv7511_state *state = get_adv7511_state(sd);
6666 - /*
6667 - * Bitfield namings come the CEA-861-F standard, table 8 "Auxiliary
6668 - * Video Information (AVI) InfoFrame Format"
6669 - *
6670 - * c = Colorimetry
6671 - * ec = Extended Colorimetry
6672 - * y = RGB or YCbCr
6673 - * q = RGB Quantization Range
6674 - * yq = YCC Quantization Range
6675 - */
6676 - u8 c = HDMI_COLORIMETRY_NONE;
6677 - u8 ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
6678 - u8 y = HDMI_COLORSPACE_RGB;
6679 - u8 q = HDMI_QUANTIZATION_RANGE_DEFAULT;
6680 - u8 yq = HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
6681 - u8 itc = state->content_type != V4L2_DV_IT_CONTENT_TYPE_NO_ITC;
6682 - u8 cn = itc ? state->content_type : V4L2_DV_IT_CONTENT_TYPE_GRAPHICS;
6683 -
6684 - if (format->pad != 0)
6685 - return -EINVAL;
6686 - switch (format->format.code) {
6687 - case MEDIA_BUS_FMT_UYVY8_1X16:
6688 - case MEDIA_BUS_FMT_YUYV8_1X16:
6689 - case MEDIA_BUS_FMT_RGB888_1X24:
6690 - break;
6691 - default:
6692 - return -EINVAL;
6693 - }
6694 -
6695 - adv7511_fill_format(state, &format->format);
6696 - if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
6697 - struct v4l2_mbus_framefmt *fmt;
6698 -
6699 - fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
6700 - fmt->code = format->format.code;
6701 - fmt->colorspace = format->format.colorspace;
6702 - fmt->ycbcr_enc = format->format.ycbcr_enc;
6703 - fmt->quantization = format->format.quantization;
6704 - fmt->xfer_func = format->format.xfer_func;
6705 - return 0;
6706 - }
6707 -
6708 - switch (format->format.code) {
6709 - case MEDIA_BUS_FMT_UYVY8_1X16:
6710 - adv7511_wr_and_or(sd, 0x15, 0xf0, 0x01);
6711 - adv7511_wr_and_or(sd, 0x16, 0x03, 0xb8);
6712 - y = HDMI_COLORSPACE_YUV422;
6713 - break;
6714 - case MEDIA_BUS_FMT_YUYV8_1X16:
6715 - adv7511_wr_and_or(sd, 0x15, 0xf0, 0x01);
6716 - adv7511_wr_and_or(sd, 0x16, 0x03, 0xbc);
6717 - y = HDMI_COLORSPACE_YUV422;
6718 - break;
6719 - case MEDIA_BUS_FMT_RGB888_1X24:
6720 - default:
6721 - adv7511_wr_and_or(sd, 0x15, 0xf0, 0x00);
6722 - adv7511_wr_and_or(sd, 0x16, 0x03, 0x00);
6723 - break;
6724 - }
6725 - state->fmt_code = format->format.code;
6726 - state->colorspace = format->format.colorspace;
6727 - state->ycbcr_enc = format->format.ycbcr_enc;
6728 - state->quantization = format->format.quantization;
6729 - state->xfer_func = format->format.xfer_func;
6730 -
6731 - switch (format->format.colorspace) {
6732 - case V4L2_COLORSPACE_ADOBERGB:
6733 - c = HDMI_COLORIMETRY_EXTENDED;
6734 - ec = y ? HDMI_EXTENDED_COLORIMETRY_ADOBE_YCC_601 :
6735 - HDMI_EXTENDED_COLORIMETRY_ADOBE_RGB;
6736 - break;
6737 - case V4L2_COLORSPACE_SMPTE170M:
6738 - c = y ? HDMI_COLORIMETRY_ITU_601 : HDMI_COLORIMETRY_NONE;
6739 - if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_XV601) {
6740 - c = HDMI_COLORIMETRY_EXTENDED;
6741 - ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
6742 - }
6743 - break;
6744 - case V4L2_COLORSPACE_REC709:
6745 - c = y ? HDMI_COLORIMETRY_ITU_709 : HDMI_COLORIMETRY_NONE;
6746 - if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_XV709) {
6747 - c = HDMI_COLORIMETRY_EXTENDED;
6748 - ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_709;
6749 - }
6750 - break;
6751 - case V4L2_COLORSPACE_SRGB:
6752 - c = y ? HDMI_COLORIMETRY_EXTENDED : HDMI_COLORIMETRY_NONE;
6753 - ec = y ? HDMI_EXTENDED_COLORIMETRY_S_YCC_601 :
6754 - HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
6755 - break;
6756 - case V4L2_COLORSPACE_BT2020:
6757 - c = HDMI_COLORIMETRY_EXTENDED;
6758 - if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_BT2020_CONST_LUM)
6759 - ec = 5; /* Not yet available in hdmi.h */
6760 - else
6761 - ec = 6; /* Not yet available in hdmi.h */
6762 - break;
6763 - default:
6764 - break;
6765 - }
6766 -
6767 - /*
6768 - * CEA-861-F says that for RGB formats the YCC range must match the
6769 - * RGB range, although sources should ignore the YCC range.
6770 - *
6771 - * The RGB quantization range shouldn't be non-zero if the EDID doesn't
6772 - * have the Q bit set in the Video Capabilities Data Block, however this
6773 - * isn't checked at the moment. The assumption is that the application
6774 - * knows the EDID and can detect this.
6775 - *
6776 - * The same is true for the YCC quantization range: non-standard YCC
6777 - * quantization ranges should only be sent if the EDID has the YQ bit
6778 - * set in the Video Capabilities Data Block.
6779 - */
6780 - switch (format->format.quantization) {
6781 - case V4L2_QUANTIZATION_FULL_RANGE:
6782 - q = y ? HDMI_QUANTIZATION_RANGE_DEFAULT :
6783 - HDMI_QUANTIZATION_RANGE_FULL;
6784 - yq = q ? q - 1 : HDMI_YCC_QUANTIZATION_RANGE_FULL;
6785 - break;
6786 - case V4L2_QUANTIZATION_LIM_RANGE:
6787 - q = y ? HDMI_QUANTIZATION_RANGE_DEFAULT :
6788 - HDMI_QUANTIZATION_RANGE_LIMITED;
6789 - yq = q ? q - 1 : HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
6790 - break;
6791 - }
6792 -
6793 - adv7511_wr_and_or(sd, 0x4a, 0xbf, 0);
6794 - adv7511_wr_and_or(sd, 0x55, 0x9f, y << 5);
6795 - adv7511_wr_and_or(sd, 0x56, 0x3f, c << 6);
6796 - adv7511_wr_and_or(sd, 0x57, 0x83, (ec << 4) | (q << 2) | (itc << 7));
6797 - adv7511_wr_and_or(sd, 0x59, 0x0f, (yq << 6) | (cn << 4));
6798 - adv7511_wr_and_or(sd, 0x4a, 0xff, 1);
6799 - adv7511_set_rgb_quantization_mode(sd, state->rgb_quantization_range_ctrl);
6800 -
6801 - return 0;
6802 -}
6803 -
6804 -static const struct v4l2_subdev_pad_ops adv7511_pad_ops = {
6805 - .get_edid = adv7511_get_edid,
6806 - .enum_mbus_code = adv7511_enum_mbus_code,
6807 - .get_fmt = adv7511_get_fmt,
6808 - .set_fmt = adv7511_set_fmt,
6809 - .enum_dv_timings = adv7511_enum_dv_timings,
6810 - .dv_timings_cap = adv7511_dv_timings_cap,
6811 -};
6812 -
6813 -/* --------------------- SUBDEV OPS --------------------------------------- */
6814 -
6815 -static const struct v4l2_subdev_ops adv7511_ops = {
6816 - .core = &adv7511_core_ops,
6817 - .pad = &adv7511_pad_ops,
6818 - .video = &adv7511_video_ops,
6819 - .audio = &adv7511_audio_ops,
6820 -};
6821 -
6822 -/* ----------------------------------------------------------------------- */
6823 -static void adv7511_dbg_dump_edid(int lvl, int debug, struct v4l2_subdev *sd, int segment, u8 *buf)
6824 -{
6825 - if (debug >= lvl) {
6826 - int i, j;
6827 - v4l2_dbg(lvl, debug, sd, "edid segment %d\n", segment);
6828 - for (i = 0; i < 256; i += 16) {
6829 - u8 b[128];
6830 - u8 *bp = b;
6831 - if (i == 128)
6832 - v4l2_dbg(lvl, debug, sd, "\n");
6833 - for (j = i; j < i + 16; j++) {
6834 - sprintf(bp, "0x%02x, ", buf[j]);
6835 - bp += 6;
6836 - }
6837 - bp[0] = '\0';
6838 - v4l2_dbg(lvl, debug, sd, "%s\n", b);
6839 - }
6840 - }
6841 -}
6842 -
6843 -static void adv7511_notify_no_edid(struct v4l2_subdev *sd)
6844 -{
6845 - struct adv7511_state *state = get_adv7511_state(sd);
6846 - struct adv7511_edid_detect ed;
6847 -
6848 - /* We failed to read the EDID, so send an event for this. */
6849 - ed.present = false;
6850 - ed.segment = adv7511_rd(sd, 0xc4);
6851 - ed.phys_addr = CEC_PHYS_ADDR_INVALID;
6852 - cec_s_phys_addr(state->cec_adap, ed.phys_addr, false);
6853 - v4l2_subdev_notify(sd, ADV7511_EDID_DETECT, (void *)&ed);
6854 - v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, 0x0);
6855 -}
6856 -
6857 -static void adv7511_edid_handler(struct work_struct *work)
6858 -{
6859 - struct delayed_work *dwork = to_delayed_work(work);
6860 - struct adv7511_state *state = container_of(dwork, struct adv7511_state, edid_handler);
6861 - struct v4l2_subdev *sd = &state->sd;
6862 -
6863 - v4l2_dbg(1, debug, sd, "%s:\n", __func__);
6864 -
6865 - if (adv7511_check_edid_status(sd)) {
6866 - /* Return if we received the EDID. */
6867 - return;
6868 - }
6869 -
6870 - if (adv7511_have_hotplug(sd)) {
6871 - /* We must retry reading the EDID several times, it is possible
6872 - * that initially the EDID couldn't be read due to i2c errors
6873 - * (DVI connectors are particularly prone to this problem). */
6874 - if (state->edid.read_retries) {
6875 - state->edid.read_retries--;
6876 - v4l2_dbg(1, debug, sd, "%s: edid read failed\n", __func__);
6877 - state->have_monitor = false;
6878 - adv7511_s_power(sd, false);
6879 - adv7511_s_power(sd, true);
6880 - queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
6881 - return;
6882 - }
6883 - }
6884 -
6885 - /* We failed to read the EDID, so send an event for this. */
6886 - adv7511_notify_no_edid(sd);
6887 - v4l2_dbg(1, debug, sd, "%s: no edid found\n", __func__);
6888 -}
6889 -
6890 -static void adv7511_audio_setup(struct v4l2_subdev *sd)
6891 -{
6892 - v4l2_dbg(1, debug, sd, "%s\n", __func__);
6893 -
6894 - adv7511_s_i2s_clock_freq(sd, 48000);
6895 - adv7511_s_clock_freq(sd, 48000);
6896 - adv7511_s_routing(sd, 0, 0, 0);
6897 -}
6898 -
6899 -/* Configure hdmi transmitter. */
6900 -static void adv7511_setup(struct v4l2_subdev *sd)
6901 -{
6902 - struct adv7511_state *state = get_adv7511_state(sd);
6903 - v4l2_dbg(1, debug, sd, "%s\n", __func__);
6904 -
6905 - /* Input format: RGB 4:4:4 */
6906 - adv7511_wr_and_or(sd, 0x15, 0xf0, 0x0);
6907 - /* Output format: RGB 4:4:4 */
6908 - adv7511_wr_and_or(sd, 0x16, 0x7f, 0x0);
6909 - /* 1st order interpolation 4:2:2 -> 4:4:4 up conversion, Aspect ratio: 16:9 */
6910 - adv7511_wr_and_or(sd, 0x17, 0xf9, 0x06);
6911 - /* Disable pixel repetition */
6912 - adv7511_wr_and_or(sd, 0x3b, 0x9f, 0x0);
6913 - /* Disable CSC */
6914 - adv7511_wr_and_or(sd, 0x18, 0x7f, 0x0);
6915 - /* Output format: RGB 4:4:4, Active Format Information is valid,
6916 - * underscanned */
6917 - adv7511_wr_and_or(sd, 0x55, 0x9c, 0x12);
6918 - /* AVI Info frame packet enable, Audio Info frame disable */
6919 - adv7511_wr_and_or(sd, 0x44, 0xe7, 0x10);
6920 - /* Colorimetry, Active format aspect ratio: same as picure. */
6921 - adv7511_wr(sd, 0x56, 0xa8);
6922 - /* No encryption */
6923 - adv7511_wr_and_or(sd, 0xaf, 0xed, 0x0);
6924 -
6925 - /* Positive clk edge capture for input video clock */
6926 - adv7511_wr_and_or(sd, 0xba, 0x1f, 0x60);
6927 -
6928 - adv7511_audio_setup(sd);
6929 -
6930 - v4l2_ctrl_handler_setup(&state->hdl);
6931 -}
6932 -
6933 -static void adv7511_notify_monitor_detect(struct v4l2_subdev *sd)
6934 -{
6935 - struct adv7511_monitor_detect mdt;
6936 - struct adv7511_state *state = get_adv7511_state(sd);
6937 -
6938 - mdt.present = state->have_monitor;
6939 - v4l2_subdev_notify(sd, ADV7511_MONITOR_DETECT, (void *)&mdt);
6940 -}
6941 -
6942 -static void adv7511_check_monitor_present_status(struct v4l2_subdev *sd)
6943 -{
6944 - struct adv7511_state *state = get_adv7511_state(sd);
6945 - /* read hotplug and rx-sense state */
6946 - u8 status = adv7511_rd(sd, 0x42);
6947 -
6948 - v4l2_dbg(1, debug, sd, "%s: status: 0x%x%s%s\n",
6949 - __func__,
6950 - status,
6951 - status & MASK_ADV7511_HPD_DETECT ? ", hotplug" : "",
6952 - status & MASK_ADV7511_MSEN_DETECT ? ", rx-sense" : "");
6953 -
6954 - /* update read only ctrls */
6955 - v4l2_ctrl_s_ctrl(state->hotplug_ctrl, adv7511_have_hotplug(sd) ? 0x1 : 0x0);
6956 - v4l2_ctrl_s_ctrl(state->rx_sense_ctrl, adv7511_have_rx_sense(sd) ? 0x1 : 0x0);
6957 -
6958 - if ((status & MASK_ADV7511_HPD_DETECT) && ((status & MASK_ADV7511_MSEN_DETECT) || state->edid.segments)) {
6959 - v4l2_dbg(1, debug, sd, "%s: hotplug and (rx-sense or edid)\n", __func__);
6960 - if (!state->have_monitor) {
6961 - v4l2_dbg(1, debug, sd, "%s: monitor detected\n", __func__);
6962 - state->have_monitor = true;
6963 - adv7511_set_isr(sd, true);
6964 - if (!adv7511_s_power(sd, true)) {
6965 - v4l2_dbg(1, debug, sd, "%s: monitor detected, powerup failed\n", __func__);
6966 - return;
6967 - }
6968 - adv7511_setup(sd);
6969 - adv7511_notify_monitor_detect(sd);
6970 - state->edid.read_retries = EDID_MAX_RETRIES;
6971 - queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
6972 - }
6973 - } else if (status & MASK_ADV7511_HPD_DETECT) {
6974 - v4l2_dbg(1, debug, sd, "%s: hotplug detected\n", __func__);
6975 - state->edid.read_retries = EDID_MAX_RETRIES;
6976 - queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
6977 - } else if (!(status & MASK_ADV7511_HPD_DETECT)) {
6978 - v4l2_dbg(1, debug, sd, "%s: hotplug not detected\n", __func__);
6979 - if (state->have_monitor) {
6980 - v4l2_dbg(1, debug, sd, "%s: monitor not detected\n", __func__);
6981 - state->have_monitor = false;
6982 - adv7511_notify_monitor_detect(sd);
6983 - }
6984 - adv7511_s_power(sd, false);
6985 - memset(&state->edid, 0, sizeof(struct adv7511_state_edid));
6986 - adv7511_notify_no_edid(sd);
6987 - }
6988 -}
6989 -
6990 -static bool edid_block_verify_crc(u8 *edid_block)
6991 -{
6992 - u8 sum = 0;
6993 - int i;
6994 -
6995 - for (i = 0; i < 128; i++)
6996 - sum += edid_block[i];
6997 - return sum == 0;
6998 -}
6999 -
7000 -static bool edid_verify_crc(struct v4l2_subdev *sd, u32 segment)
7001 -{
7002 - struct adv7511_state *state = get_adv7511_state(sd);
7003 - u32 blocks = state->edid.blocks;
7004 - u8 *data = state->edid.data;
7005 -
7006 - if (!edid_block_verify_crc(&data[segment * 256]))
7007 - return false;
7008 - if ((segment + 1) * 2 <= blocks)
7009 - return edid_block_verify_crc(&data[segment * 256 + 128]);
7010 - return true;
7011 -}
7012 -
7013 -static bool edid_verify_header(struct v4l2_subdev *sd, u32 segment)
7014 -{
7015 - static const u8 hdmi_header[] = {
7016 - 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
7017 - };
7018 - struct adv7511_state *state = get_adv7511_state(sd);
7019 - u8 *data = state->edid.data;
7020 -
7021 - if (segment != 0)
7022 - return true;
7023 - return !memcmp(data, hdmi_header, sizeof(hdmi_header));
7024 -}
7025 -
7026 -static bool adv7511_check_edid_status(struct v4l2_subdev *sd)
7027 -{
7028 - struct adv7511_state *state = get_adv7511_state(sd);
7029 - u8 edidRdy = adv7511_rd(sd, 0xc5);
7030 -
7031 - v4l2_dbg(1, debug, sd, "%s: edid ready (retries: %d)\n",
7032 - __func__, EDID_MAX_RETRIES - state->edid.read_retries);
7033 -
7034 - if (state->edid.complete)
7035 - return true;
7036 -
7037 - if (edidRdy & MASK_ADV7511_EDID_RDY) {
7038 - int segment = adv7511_rd(sd, 0xc4);
7039 - struct adv7511_edid_detect ed;
7040 -
7041 - if (segment >= EDID_MAX_SEGM) {
7042 - v4l2_err(sd, "edid segment number too big\n");
7043 - return false;
7044 - }
7045 - v4l2_dbg(1, debug, sd, "%s: got segment %d\n", __func__, segment);
7046 - adv7511_edid_rd(sd, 256, &state->edid.data[segment * 256]);
7047 - adv7511_dbg_dump_edid(2, debug, sd, segment, &state->edid.data[segment * 256]);
7048 - if (segment == 0) {
7049 - state->edid.blocks = state->edid.data[0x7e] + 1;
7050 - v4l2_dbg(1, debug, sd, "%s: %d blocks in total\n", __func__, state->edid.blocks);
7051 - }
7052 - if (!edid_verify_crc(sd, segment) ||
7053 - !edid_verify_header(sd, segment)) {
7054 - /* edid crc error, force reread of edid segment */
7055 - v4l2_err(sd, "%s: edid crc or header error\n", __func__);
7056 - state->have_monitor = false;
7057 - adv7511_s_power(sd, false);
7058 - adv7511_s_power(sd, true);
7059 - return false;
7060 - }
7061 - /* one more segment read ok */
7062 - state->edid.segments = segment + 1;
7063 - v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, 0x1);
7064 - if (((state->edid.data[0x7e] >> 1) + 1) > state->edid.segments) {
7065 - /* Request next EDID segment */
7066 - v4l2_dbg(1, debug, sd, "%s: request segment %d\n", __func__, state->edid.segments);
7067 - adv7511_wr(sd, 0xc9, 0xf);
7068 - adv7511_wr(sd, 0xc4, state->edid.segments);
7069 - state->edid.read_retries = EDID_MAX_RETRIES;
7070 - queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
7071 - return false;
7072 - }
7073 -
7074 - v4l2_dbg(1, debug, sd, "%s: edid complete with %d segment(s)\n", __func__, state->edid.segments);
7075 - state->edid.complete = true;
7076 - ed.phys_addr = cec_get_edid_phys_addr(state->edid.data,
7077 - state->edid.segments * 256,
7078 - NULL);
7079 - /* report when we have all segments
7080 - but report only for segment 0
7081 - */
7082 - ed.present = true;
7083 - ed.segment = 0;
7084 - state->edid_detect_counter++;
7085 - cec_s_phys_addr(state->cec_adap, ed.phys_addr, false);
7086 - v4l2_subdev_notify(sd, ADV7511_EDID_DETECT, (void *)&ed);
7087 - return ed.present;
7088 - }
7089 -
7090 - return false;
7091 -}
7092 -
7093 -static int adv7511_registered(struct v4l2_subdev *sd)
7094 -{
7095 - struct adv7511_state *state = get_adv7511_state(sd);
7096 - int err;
7097 -
7098 - err = cec_register_adapter(state->cec_adap);
7099 - if (err)
7100 - cec_delete_adapter(state->cec_adap);
7101 - return err;
7102 -}
7103 -
7104 -static void adv7511_unregistered(struct v4l2_subdev *sd)
7105 -{
7106 - struct adv7511_state *state = get_adv7511_state(sd);
7107 -
7108 - cec_unregister_adapter(state->cec_adap);
7109 -}
7110 -
7111 -static const struct v4l2_subdev_internal_ops adv7511_int_ops = {
7112 - .registered = adv7511_registered,
7113 - .unregistered = adv7511_unregistered,
7114 -};
7115 -
7116 -/* ----------------------------------------------------------------------- */
7117 -/* Setup ADV7511 */
7118 -static void adv7511_init_setup(struct v4l2_subdev *sd)
7119 -{
7120 - struct adv7511_state *state = get_adv7511_state(sd);
7121 - struct adv7511_state_edid *edid = &state->edid;
7122 - u32 cec_clk = state->pdata.cec_clk;
7123 - u8 ratio;
7124 -
7125 - v4l2_dbg(1, debug, sd, "%s\n", __func__);
7126 -
7127 - /* clear all interrupts */
7128 - adv7511_wr(sd, 0x96, 0xff);
7129 - adv7511_wr(sd, 0x97, 0xff);
7130 - /*
7131 - * Stop HPD from resetting a lot of registers.
7132 - * It might leave the chip in a partly un-initialized state,
7133 - * in particular with regards to hotplug bounces.
7134 - */
7135 - adv7511_wr_and_or(sd, 0xd6, 0x3f, 0xc0);
7136 - memset(edid, 0, sizeof(struct adv7511_state_edid));
7137 - state->have_monitor = false;
7138 - adv7511_set_isr(sd, false);
7139 - adv7511_s_stream(sd, false);
7140 - adv7511_s_audio_stream(sd, false);
7141 -
7142 - if (state->i2c_cec == NULL)
7143 - return;
7144 -
7145 - v4l2_dbg(1, debug, sd, "%s: cec_clk %d\n", __func__, cec_clk);
7146 -
7147 - /* cec soft reset */
7148 - adv7511_cec_write(sd, 0x50, 0x01);
7149 - adv7511_cec_write(sd, 0x50, 0x00);
7150 -
7151 - /* legacy mode */
7152 - adv7511_cec_write(sd, 0x4a, 0x00);
7153 -
7154 - if (cec_clk % 750000 != 0)
7155 - v4l2_err(sd, "%s: cec_clk %d, not multiple of 750 Khz\n",
7156 - __func__, cec_clk);
7157 -
7158 - ratio = (cec_clk / 750000) - 1;
7159 - adv7511_cec_write(sd, 0x4e, ratio << 2);
7160 -}
7161 -
7162 -static int adv7511_probe(struct i2c_client *client, const struct i2c_device_id *id)
7163 -{
7164 - struct adv7511_state *state;
7165 - struct adv7511_platform_data *pdata = client->dev.platform_data;
7166 - struct v4l2_ctrl_handler *hdl;
7167 - struct v4l2_subdev *sd;
7168 - u8 chip_id[2];
7169 - int err = -EIO;
7170 -
7171 - /* Check if the adapter supports the needed features */
7172 - if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
7173 - return -EIO;
7174 -
7175 - state = devm_kzalloc(&client->dev, sizeof(struct adv7511_state), GFP_KERNEL);
7176 - if (!state)
7177 - return -ENOMEM;
7178 -
7179 - /* Platform data */
7180 - if (!pdata) {
7181 - v4l_err(client, "No platform data!\n");
7182 - return -ENODEV;
7183 - }
7184 - memcpy(&state->pdata, pdata, sizeof(state->pdata));
7185 - state->fmt_code = MEDIA_BUS_FMT_RGB888_1X24;
7186 - state->colorspace = V4L2_COLORSPACE_SRGB;
7187 -
7188 - sd = &state->sd;
7189 -
7190 - v4l2_dbg(1, debug, sd, "detecting adv7511 client on address 0x%x\n",
7191 - client->addr << 1);
7192 -
7193 - v4l2_i2c_subdev_init(sd, client, &adv7511_ops);
7194 - sd->internal_ops = &adv7511_int_ops;
7195 -
7196 - hdl = &state->hdl;
7197 - v4l2_ctrl_handler_init(hdl, 10);
7198 - /* add in ascending ID order */
7199 - state->hdmi_mode_ctrl = v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
7200 - V4L2_CID_DV_TX_MODE, V4L2_DV_TX_MODE_HDMI,
7201 - 0, V4L2_DV_TX_MODE_DVI_D);
7202 - state->hotplug_ctrl = v4l2_ctrl_new_std(hdl, NULL,
7203 - V4L2_CID_DV_TX_HOTPLUG, 0, 1, 0, 0);
7204 - state->rx_sense_ctrl = v4l2_ctrl_new_std(hdl, NULL,
7205 - V4L2_CID_DV_TX_RXSENSE, 0, 1, 0, 0);
7206 - state->have_edid0_ctrl = v4l2_ctrl_new_std(hdl, NULL,
7207 - V4L2_CID_DV_TX_EDID_PRESENT, 0, 1, 0, 0);
7208 - state->rgb_quantization_range_ctrl =
7209 - v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
7210 - V4L2_CID_DV_TX_RGB_RANGE, V4L2_DV_RGB_RANGE_FULL,
7211 - 0, V4L2_DV_RGB_RANGE_AUTO);
7212 - state->content_type_ctrl =
7213 - v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
7214 - V4L2_CID_DV_TX_IT_CONTENT_TYPE, V4L2_DV_IT_CONTENT_TYPE_NO_ITC,
7215 - 0, V4L2_DV_IT_CONTENT_TYPE_NO_ITC);
7216 - sd->ctrl_handler = hdl;
7217 - if (hdl->error) {
7218 - err = hdl->error;
7219 - goto err_hdl;
7220 - }
7221 - state->pad.flags = MEDIA_PAD_FL_SINK;
7222 - err = media_entity_pads_init(&sd->entity, 1, &state->pad);
7223 - if (err)
7224 - goto err_hdl;
7225 -
7226 - /* EDID and CEC i2c addr */
7227 - state->i2c_edid_addr = state->pdata.i2c_edid << 1;
7228 - state->i2c_cec_addr = state->pdata.i2c_cec << 1;
7229 - state->i2c_pktmem_addr = state->pdata.i2c_pktmem << 1;
7230 -
7231 - state->chip_revision = adv7511_rd(sd, 0x0);
7232 - chip_id[0] = adv7511_rd(sd, 0xf5);
7233 - chip_id[1] = adv7511_rd(sd, 0xf6);
7234 - if (chip_id[0] != 0x75 || chip_id[1] != 0x11) {
7235 - v4l2_err(sd, "chip_id != 0x7511, read 0x%02x%02x\n", chip_id[0],
7236 - chip_id[1]);
7237 - err = -EIO;
7238 - goto err_entity;
7239 - }
7240 -
7241 - state->i2c_edid = i2c_new_dummy(client->adapter,
7242 - state->i2c_edid_addr >> 1);
7243 - if (state->i2c_edid == NULL) {
7244 - v4l2_err(sd, "failed to register edid i2c client\n");
7245 - err = -ENOMEM;
7246 - goto err_entity;
7247 - }
7248 -
7249 - adv7511_wr(sd, 0xe1, state->i2c_cec_addr);
7250 - if (state->pdata.cec_clk < 3000000 ||
7251 - state->pdata.cec_clk > 100000000) {
7252 - v4l2_err(sd, "%s: cec_clk %u outside range, disabling cec\n",
7253 - __func__, state->pdata.cec_clk);
7254 - state->pdata.cec_clk = 0;
7255 - }
7256 -
7257 - if (state->pdata.cec_clk) {
7258 - state->i2c_cec = i2c_new_dummy(client->adapter,
7259 - state->i2c_cec_addr >> 1);
7260 - if (state->i2c_cec == NULL) {
7261 - v4l2_err(sd, "failed to register cec i2c client\n");
7262 - err = -ENOMEM;
7263 - goto err_unreg_edid;
7264 - }
7265 - adv7511_wr(sd, 0xe2, 0x00); /* power up cec section */
7266 - } else {
7267 - adv7511_wr(sd, 0xe2, 0x01); /* power down cec section */
7268 - }
7269 -
7270 - state->i2c_pktmem = i2c_new_dummy(client->adapter, state->i2c_pktmem_addr >> 1);
7271 - if (state->i2c_pktmem == NULL) {
7272 - v4l2_err(sd, "failed to register pktmem i2c client\n");
7273 - err = -ENOMEM;
7274 - goto err_unreg_cec;
7275 - }
7276 -
7277 - state->work_queue = create_singlethread_workqueue(sd->name);
7278 - if (state->work_queue == NULL) {
7279 - v4l2_err(sd, "could not create workqueue\n");
7280 - err = -ENOMEM;
7281 - goto err_unreg_pktmem;
7282 - }
7283 -
7284 - INIT_DELAYED_WORK(&state->edid_handler, adv7511_edid_handler);
7285 -
7286 - adv7511_init_setup(sd);
7287 -
7288 -#if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
7289 - state->cec_adap = cec_allocate_adapter(&adv7511_cec_adap_ops,
7290 - state, dev_name(&client->dev), CEC_CAP_TRANSMIT |
7291 - CEC_CAP_LOG_ADDRS | CEC_CAP_PASSTHROUGH | CEC_CAP_RC,
7292 - ADV7511_MAX_ADDRS, &client->dev);
7293 - err = PTR_ERR_OR_ZERO(state->cec_adap);
7294 - if (err) {
7295 - destroy_workqueue(state->work_queue);
7296 - goto err_unreg_pktmem;
7297 - }
7298 -#endif
7299 -
7300 - adv7511_set_isr(sd, true);
7301 - adv7511_check_monitor_present_status(sd);
7302 -
7303 - v4l2_info(sd, "%s found @ 0x%x (%s)\n", client->name,
7304 - client->addr << 1, client->adapter->name);
7305 - return 0;
7306 -
7307 -err_unreg_pktmem:
7308 - i2c_unregister_device(state->i2c_pktmem);
7309 -err_unreg_cec:
7310 - if (state->i2c_cec)
7311 - i2c_unregister_device(state->i2c_cec);
7312 -err_unreg_edid:
7313 - i2c_unregister_device(state->i2c_edid);
7314 -err_entity:
7315 - media_entity_cleanup(&sd->entity);
7316 -err_hdl:
7317 - v4l2_ctrl_handler_free(&state->hdl);
7318 - return err;
7319 -}
7320 -
7321 -/* ----------------------------------------------------------------------- */
7322 -
7323 -static int adv7511_remove(struct i2c_client *client)
7324 -{
7325 - struct v4l2_subdev *sd = i2c_get_clientdata(client);
7326 - struct adv7511_state *state = get_adv7511_state(sd);
7327 -
7328 - state->chip_revision = -1;
7329 -
7330 - v4l2_dbg(1, debug, sd, "%s removed @ 0x%x (%s)\n", client->name,
7331 - client->addr << 1, client->adapter->name);
7332 -
7333 - adv7511_set_isr(sd, false);
7334 - adv7511_init_setup(sd);
7335 - cancel_delayed_work(&state->edid_handler);
7336 - i2c_unregister_device(state->i2c_edid);
7337 - if (state->i2c_cec)
7338 - i2c_unregister_device(state->i2c_cec);
7339 - i2c_unregister_device(state->i2c_pktmem);
7340 - destroy_workqueue(state->work_queue);
7341 - v4l2_device_unregister_subdev(sd);
7342 - media_entity_cleanup(&sd->entity);
7343 - v4l2_ctrl_handler_free(sd->ctrl_handler);
7344 - return 0;
7345 -}
7346 -
7347 -/* ----------------------------------------------------------------------- */
7348 -
7349 -static struct i2c_device_id adv7511_id[] = {
7350 - { "adv7511", 0 },
7351 - { }
7352 -};
7353 -MODULE_DEVICE_TABLE(i2c, adv7511_id);
7354 -
7355 -static struct i2c_driver adv7511_driver = {
7356 - .driver = {
7357 - .name = "adv7511",
7358 - },
7359 - .probe = adv7511_probe,
7360 - .remove = adv7511_remove,
7361 - .id_table = adv7511_id,
7362 -};
7363 -
7364 -module_i2c_driver(adv7511_driver);
7365 diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c
7366 index 6f46c59415fe..73a2dba475d0 100644
7367 --- a/drivers/media/media-device.c
7368 +++ b/drivers/media/media-device.c
7369 @@ -474,6 +474,7 @@ static long media_device_enum_links32(struct media_device *mdev,
7370 {
7371 struct media_links_enum links;
7372 compat_uptr_t pads_ptr, links_ptr;
7373 + int ret;
7374
7375 memset(&links, 0, sizeof(links));
7376
7377 @@ -485,7 +486,14 @@ static long media_device_enum_links32(struct media_device *mdev,
7378 links.pads = compat_ptr(pads_ptr);
7379 links.links = compat_ptr(links_ptr);
7380
7381 - return media_device_enum_links(mdev, &links);
7382 + ret = media_device_enum_links(mdev, &links);
7383 + if (ret)
7384 + return ret;
7385 +
7386 + if (copy_to_user(ulinks->reserved, links.reserved,
7387 + sizeof(ulinks->reserved)))
7388 + return -EFAULT;
7389 + return 0;
7390 }
7391
7392 #define MEDIA_IOC_ENUM_LINKS32 _IOWR('|', 0x02, struct media_links_enum32)
7393 diff --git a/drivers/media/platform/coda/coda-bit.c b/drivers/media/platform/coda/coda-bit.c
7394 index 717ee9a6a80e..7b4c93619c3d 100644
7395 --- a/drivers/media/platform/coda/coda-bit.c
7396 +++ b/drivers/media/platform/coda/coda-bit.c
7397 @@ -1581,6 +1581,7 @@ static int __coda_start_decoding(struct coda_ctx *ctx)
7398 coda_write(dev, 0, CODA_REG_BIT_BIT_STREAM_PARAM);
7399 return -ETIMEDOUT;
7400 }
7401 + ctx->sequence_offset = ~0U;
7402 ctx->initialized = 1;
7403
7404 /* Update kfifo out pointer from coda bitstream read pointer */
7405 @@ -1966,12 +1967,17 @@ static void coda_finish_decode(struct coda_ctx *ctx)
7406 else if (ctx->display_idx < 0)
7407 ctx->hold = true;
7408 } else if (decoded_idx == -2) {
7409 + if (ctx->display_idx >= 0 &&
7410 + ctx->display_idx < ctx->num_internal_frames)
7411 + ctx->sequence_offset++;
7412 /* no frame was decoded, we still return remaining buffers */
7413 } else if (decoded_idx < 0 || decoded_idx >= ctx->num_internal_frames) {
7414 v4l2_err(&dev->v4l2_dev,
7415 "decoded frame index out of range: %d\n", decoded_idx);
7416 } else {
7417 - val = coda_read(dev, CODA_RET_DEC_PIC_FRAME_NUM) - 1;
7418 + val = coda_read(dev, CODA_RET_DEC_PIC_FRAME_NUM);
7419 + if (ctx->sequence_offset == -1)
7420 + ctx->sequence_offset = val;
7421 val -= ctx->sequence_offset;
7422 spin_lock_irqsave(&ctx->buffer_meta_lock, flags);
7423 if (!list_empty(&ctx->buffer_meta_list)) {
7424 @@ -2101,7 +2107,6 @@ irqreturn_t coda_irq_handler(int irq, void *data)
7425 if (ctx == NULL) {
7426 v4l2_err(&dev->v4l2_dev,
7427 "Instance released before the end of transaction\n");
7428 - mutex_unlock(&dev->coda_mutex);
7429 return IRQ_HANDLED;
7430 }
7431
7432 diff --git a/drivers/media/platform/davinci/vpss.c b/drivers/media/platform/davinci/vpss.c
7433 index fce86f17dffc..c2c68988e38a 100644
7434 --- a/drivers/media/platform/davinci/vpss.c
7435 +++ b/drivers/media/platform/davinci/vpss.c
7436 @@ -523,6 +523,11 @@ static int __init vpss_init(void)
7437 return -EBUSY;
7438
7439 oper_cfg.vpss_regs_base2 = ioremap(VPSS_CLK_CTRL, 4);
7440 + if (unlikely(!oper_cfg.vpss_regs_base2)) {
7441 + release_mem_region(VPSS_CLK_CTRL, 4);
7442 + return -ENOMEM;
7443 + }
7444 +
7445 writel(VPSS_CLK_CTRL_VENCCLKEN |
7446 VPSS_CLK_CTRL_DACCLKEN, oper_cfg.vpss_regs_base2);
7447
7448 diff --git a/drivers/media/platform/marvell-ccic/mcam-core.c b/drivers/media/platform/marvell-ccic/mcam-core.c
7449 index af59bf4dca2d..a74bfb9afc8d 100644
7450 --- a/drivers/media/platform/marvell-ccic/mcam-core.c
7451 +++ b/drivers/media/platform/marvell-ccic/mcam-core.c
7452 @@ -209,7 +209,6 @@ struct mcam_vb_buffer {
7453 struct list_head queue;
7454 struct mcam_dma_desc *dma_desc; /* Descriptor virtual address */
7455 dma_addr_t dma_desc_pa; /* Descriptor physical address */
7456 - int dma_desc_nent; /* Number of mapped descriptors */
7457 };
7458
7459 static inline struct mcam_vb_buffer *vb_to_mvb(struct vb2_v4l2_buffer *vb)
7460 @@ -616,9 +615,11 @@ static void mcam_dma_contig_done(struct mcam_camera *cam, int frame)
7461 static void mcam_sg_next_buffer(struct mcam_camera *cam)
7462 {
7463 struct mcam_vb_buffer *buf;
7464 + struct sg_table *sg_table;
7465
7466 buf = list_first_entry(&cam->buffers, struct mcam_vb_buffer, queue);
7467 list_del_init(&buf->queue);
7468 + sg_table = vb2_dma_sg_plane_desc(&buf->vb_buf.vb2_buf, 0);
7469 /*
7470 * Very Bad Not Good Things happen if you don't clear
7471 * C1_DESC_ENA before making any descriptor changes.
7472 @@ -626,7 +627,7 @@ static void mcam_sg_next_buffer(struct mcam_camera *cam)
7473 mcam_reg_clear_bit(cam, REG_CTRL1, C1_DESC_ENA);
7474 mcam_reg_write(cam, REG_DMA_DESC_Y, buf->dma_desc_pa);
7475 mcam_reg_write(cam, REG_DESC_LEN_Y,
7476 - buf->dma_desc_nent*sizeof(struct mcam_dma_desc));
7477 + sg_table->nents * sizeof(struct mcam_dma_desc));
7478 mcam_reg_write(cam, REG_DESC_LEN_U, 0);
7479 mcam_reg_write(cam, REG_DESC_LEN_V, 0);
7480 mcam_reg_set_bit(cam, REG_CTRL1, C1_DESC_ENA);
7481 diff --git a/drivers/media/radio/radio-raremono.c b/drivers/media/radio/radio-raremono.c
7482 index bfb3a6d051ba..10958bac0ad9 100644
7483 --- a/drivers/media/radio/radio-raremono.c
7484 +++ b/drivers/media/radio/radio-raremono.c
7485 @@ -283,6 +283,14 @@ static int vidioc_g_frequency(struct file *file, void *priv,
7486 return 0;
7487 }
7488
7489 +static void raremono_device_release(struct v4l2_device *v4l2_dev)
7490 +{
7491 + struct raremono_device *radio = to_raremono_dev(v4l2_dev);
7492 +
7493 + kfree(radio->buffer);
7494 + kfree(radio);
7495 +}
7496 +
7497 /* File system interface */
7498 static const struct v4l2_file_operations usb_raremono_fops = {
7499 .owner = THIS_MODULE,
7500 @@ -307,12 +315,14 @@ static int usb_raremono_probe(struct usb_interface *intf,
7501 struct raremono_device *radio;
7502 int retval = 0;
7503
7504 - radio = devm_kzalloc(&intf->dev, sizeof(struct raremono_device), GFP_KERNEL);
7505 - if (radio)
7506 - radio->buffer = devm_kmalloc(&intf->dev, BUFFER_LENGTH, GFP_KERNEL);
7507 -
7508 - if (!radio || !radio->buffer)
7509 + radio = kzalloc(sizeof(*radio), GFP_KERNEL);
7510 + if (!radio)
7511 + return -ENOMEM;
7512 + radio->buffer = kmalloc(BUFFER_LENGTH, GFP_KERNEL);
7513 + if (!radio->buffer) {
7514 + kfree(radio);
7515 return -ENOMEM;
7516 + }
7517
7518 radio->usbdev = interface_to_usbdev(intf);
7519 radio->intf = intf;
7520 @@ -336,7 +346,8 @@ static int usb_raremono_probe(struct usb_interface *intf,
7521 if (retval != 3 ||
7522 (get_unaligned_be16(&radio->buffer[1]) & 0xfff) == 0x0242) {
7523 dev_info(&intf->dev, "this is not Thanko's Raremono.\n");
7524 - return -ENODEV;
7525 + retval = -ENODEV;
7526 + goto free_mem;
7527 }
7528
7529 dev_info(&intf->dev, "Thanko's Raremono connected: (%04X:%04X)\n",
7530 @@ -345,7 +356,7 @@ static int usb_raremono_probe(struct usb_interface *intf,
7531 retval = v4l2_device_register(&intf->dev, &radio->v4l2_dev);
7532 if (retval < 0) {
7533 dev_err(&intf->dev, "couldn't register v4l2_device\n");
7534 - return retval;
7535 + goto free_mem;
7536 }
7537
7538 mutex_init(&radio->lock);
7539 @@ -357,6 +368,7 @@ static int usb_raremono_probe(struct usb_interface *intf,
7540 radio->vdev.ioctl_ops = &usb_raremono_ioctl_ops;
7541 radio->vdev.lock = &radio->lock;
7542 radio->vdev.release = video_device_release_empty;
7543 + radio->v4l2_dev.release = raremono_device_release;
7544
7545 usb_set_intfdata(intf, &radio->v4l2_dev);
7546
7547 @@ -372,6 +384,10 @@ static int usb_raremono_probe(struct usb_interface *intf,
7548 }
7549 dev_err(&intf->dev, "could not register video device\n");
7550 v4l2_device_unregister(&radio->v4l2_dev);
7551 +
7552 +free_mem:
7553 + kfree(radio->buffer);
7554 + kfree(radio);
7555 return retval;
7556 }
7557
7558 diff --git a/drivers/media/radio/wl128x/fmdrv_v4l2.c b/drivers/media/radio/wl128x/fmdrv_v4l2.c
7559 index fb42f0fd0c1f..add26eac1677 100644
7560 --- a/drivers/media/radio/wl128x/fmdrv_v4l2.c
7561 +++ b/drivers/media/radio/wl128x/fmdrv_v4l2.c
7562 @@ -553,6 +553,7 @@ int fm_v4l2_init_video_device(struct fmdev *fmdev, int radio_nr)
7563
7564 /* Register with V4L2 subsystem as RADIO device */
7565 if (video_register_device(&gradio_dev, VFL_TYPE_RADIO, radio_nr)) {
7566 + v4l2_device_unregister(&fmdev->v4l2_dev);
7567 fmerr("Could not register video device\n");
7568 return -ENOMEM;
7569 }
7570 @@ -566,6 +567,8 @@ int fm_v4l2_init_video_device(struct fmdev *fmdev, int radio_nr)
7571 if (ret < 0) {
7572 fmerr("(fmdev): Can't init ctrl handler\n");
7573 v4l2_ctrl_handler_free(&fmdev->ctrl_handler);
7574 + video_unregister_device(fmdev->radio_dev);
7575 + v4l2_device_unregister(&fmdev->v4l2_dev);
7576 return -EBUSY;
7577 }
7578
7579 diff --git a/drivers/media/usb/au0828/au0828-core.c b/drivers/media/usb/au0828/au0828-core.c
7580 index bf53553d2624..38e73ee5c8fb 100644
7581 --- a/drivers/media/usb/au0828/au0828-core.c
7582 +++ b/drivers/media/usb/au0828/au0828-core.c
7583 @@ -630,6 +630,12 @@ static int au0828_usb_probe(struct usb_interface *interface,
7584 /* Setup */
7585 au0828_card_setup(dev);
7586
7587 + /*
7588 + * Store the pointer to the au0828_dev so it can be accessed in
7589 + * au0828_usb_disconnect
7590 + */
7591 + usb_set_intfdata(interface, dev);
7592 +
7593 /* Analog TV */
7594 retval = au0828_analog_register(dev, interface);
7595 if (retval) {
7596 @@ -647,12 +653,6 @@ static int au0828_usb_probe(struct usb_interface *interface,
7597 /* Remote controller */
7598 au0828_rc_register(dev);
7599
7600 - /*
7601 - * Store the pointer to the au0828_dev so it can be accessed in
7602 - * au0828_usb_disconnect
7603 - */
7604 - usb_set_intfdata(interface, dev);
7605 -
7606 pr_info("Registered device AU0828 [%s]\n",
7607 dev->board.name == NULL ? "Unset" : dev->board.name);
7608
7609 diff --git a/drivers/media/usb/cpia2/cpia2_usb.c b/drivers/media/usb/cpia2/cpia2_usb.c
7610 index e9100a235831..21e5454d260a 100644
7611 --- a/drivers/media/usb/cpia2/cpia2_usb.c
7612 +++ b/drivers/media/usb/cpia2/cpia2_usb.c
7613 @@ -909,7 +909,6 @@ static void cpia2_usb_disconnect(struct usb_interface *intf)
7614 cpia2_unregister_camera(cam);
7615 v4l2_device_disconnect(&cam->v4l2_dev);
7616 mutex_unlock(&cam->v4l2_lock);
7617 - v4l2_device_put(&cam->v4l2_dev);
7618
7619 if(cam->buffers) {
7620 DBG("Wakeup waiting processes\n");
7621 @@ -921,6 +920,8 @@ static void cpia2_usb_disconnect(struct usb_interface *intf)
7622 DBG("Releasing interface\n");
7623 usb_driver_release_interface(&cpia2_driver, intf);
7624
7625 + v4l2_device_put(&cam->v4l2_dev);
7626 +
7627 LOG("CPiA2 camera disconnected.\n");
7628 }
7629
7630 diff --git a/drivers/media/usb/dvb-usb/dvb-usb-init.c b/drivers/media/usb/dvb-usb/dvb-usb-init.c
7631 index 84308569e7dc..b3413404f91a 100644
7632 --- a/drivers/media/usb/dvb-usb/dvb-usb-init.c
7633 +++ b/drivers/media/usb/dvb-usb/dvb-usb-init.c
7634 @@ -287,12 +287,15 @@ EXPORT_SYMBOL(dvb_usb_device_init);
7635 void dvb_usb_device_exit(struct usb_interface *intf)
7636 {
7637 struct dvb_usb_device *d = usb_get_intfdata(intf);
7638 - const char *name = "generic DVB-USB module";
7639 + const char *default_name = "generic DVB-USB module";
7640 + char name[40];
7641
7642 usb_set_intfdata(intf, NULL);
7643 if (d != NULL && d->desc != NULL) {
7644 - name = d->desc->name;
7645 + strscpy(name, d->desc->name, sizeof(name));
7646 dvb_usb_exit(d);
7647 + } else {
7648 + strscpy(name, default_name, sizeof(name));
7649 }
7650 info("%s successfully deinitialized and disconnected.", name);
7651
7652 diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
7653 index c56d649fa7da..b3d8b9592f8a 100644
7654 --- a/drivers/media/v4l2-core/v4l2-ctrls.c
7655 +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
7656 @@ -2103,16 +2103,15 @@ struct v4l2_ctrl *v4l2_ctrl_new_custom(struct v4l2_ctrl_handler *hdl,
7657 v4l2_ctrl_fill(cfg->id, &name, &type, &min, &max, &step,
7658 &def, &flags);
7659
7660 - is_menu = (cfg->type == V4L2_CTRL_TYPE_MENU ||
7661 - cfg->type == V4L2_CTRL_TYPE_INTEGER_MENU);
7662 + is_menu = (type == V4L2_CTRL_TYPE_MENU ||
7663 + type == V4L2_CTRL_TYPE_INTEGER_MENU);
7664 if (is_menu)
7665 WARN_ON(step);
7666 else
7667 WARN_ON(cfg->menu_skip_mask);
7668 - if (cfg->type == V4L2_CTRL_TYPE_MENU && qmenu == NULL)
7669 + if (type == V4L2_CTRL_TYPE_MENU && !qmenu) {
7670 qmenu = v4l2_ctrl_get_menu(cfg->id);
7671 - else if (cfg->type == V4L2_CTRL_TYPE_INTEGER_MENU &&
7672 - qmenu_int == NULL) {
7673 + } else if (type == V4L2_CTRL_TYPE_INTEGER_MENU && !qmenu_int) {
7674 handler_set_err(hdl, -EINVAL);
7675 return NULL;
7676 }
7677 diff --git a/drivers/memstick/core/memstick.c b/drivers/memstick/core/memstick.c
7678 index 4d673a626db4..1041eb7a6167 100644
7679 --- a/drivers/memstick/core/memstick.c
7680 +++ b/drivers/memstick/core/memstick.c
7681 @@ -629,13 +629,18 @@ static int __init memstick_init(void)
7682 return -ENOMEM;
7683
7684 rc = bus_register(&memstick_bus_type);
7685 - if (!rc)
7686 - rc = class_register(&memstick_host_class);
7687 + if (rc)
7688 + goto error_destroy_workqueue;
7689
7690 - if (!rc)
7691 - return 0;
7692 + rc = class_register(&memstick_host_class);
7693 + if (rc)
7694 + goto error_bus_unregister;
7695 +
7696 + return 0;
7697
7698 +error_bus_unregister:
7699 bus_unregister(&memstick_bus_type);
7700 +error_destroy_workqueue:
7701 destroy_workqueue(workqueue);
7702
7703 return rc;
7704 diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c
7705 index 41767f7239bb..0556a9749dbe 100644
7706 --- a/drivers/mfd/arizona-core.c
7707 +++ b/drivers/mfd/arizona-core.c
7708 @@ -1038,7 +1038,7 @@ int arizona_dev_init(struct arizona *arizona)
7709 unsigned int reg, val, mask;
7710 int (*apply_patch)(struct arizona *) = NULL;
7711 const struct mfd_cell *subdevs = NULL;
7712 - int n_subdevs, ret, i;
7713 + int n_subdevs = 0, ret, i;
7714
7715 dev_set_drvdata(arizona->dev, arizona);
7716 mutex_init(&arizona->clk_lock);
7717 diff --git a/drivers/mfd/hi655x-pmic.c b/drivers/mfd/hi655x-pmic.c
7718 index 11347a3e6d40..c311b869be38 100644
7719 --- a/drivers/mfd/hi655x-pmic.c
7720 +++ b/drivers/mfd/hi655x-pmic.c
7721 @@ -111,6 +111,8 @@ static int hi655x_pmic_probe(struct platform_device *pdev)
7722
7723 pmic->regmap = devm_regmap_init_mmio_clk(dev, NULL, base,
7724 &hi655x_regmap_config);
7725 + if (IS_ERR(pmic->regmap))
7726 + return PTR_ERR(pmic->regmap);
7727
7728 regmap_read(pmic->regmap, HI655X_BUS_ADDR(HI655X_VER_REG), &pmic->ver);
7729 if ((pmic->ver < PMU_VER_START) || (pmic->ver > PMU_VER_END)) {
7730 diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c
7731 index c57e407020f1..5c8ed2150c8b 100644
7732 --- a/drivers/mfd/mfd-core.c
7733 +++ b/drivers/mfd/mfd-core.c
7734 @@ -179,6 +179,7 @@ static int mfd_add_device(struct device *parent, int id,
7735 for_each_child_of_node(parent->of_node, np) {
7736 if (of_device_is_compatible(np, cell->of_compatible)) {
7737 pdev->dev.of_node = np;
7738 + pdev->dev.fwnode = &np->fwnode;
7739 break;
7740 }
7741 }
7742 diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
7743 index fd01138c411e..5b116ec756b4 100644
7744 --- a/drivers/net/bonding/bond_main.c
7745 +++ b/drivers/net/bonding/bond_main.c
7746 @@ -3788,8 +3788,8 @@ static u32 bond_rr_gen_slave_id(struct bonding *bond)
7747 static int bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *bond_dev)
7748 {
7749 struct bonding *bond = netdev_priv(bond_dev);
7750 - struct iphdr *iph = ip_hdr(skb);
7751 struct slave *slave;
7752 + int slave_cnt;
7753 u32 slave_id;
7754
7755 /* Start with the curr_active_slave that joined the bond as the
7756 @@ -3798,23 +3798,32 @@ static int bond_xmit_roundrobin(struct sk_buff *skb, struct net_device *bond_dev
7757 * send the join/membership reports. The curr_active_slave found
7758 * will send all of this type of traffic.
7759 */
7760 - if (iph->protocol == IPPROTO_IGMP && skb->protocol == htons(ETH_P_IP)) {
7761 - slave = rcu_dereference(bond->curr_active_slave);
7762 - if (slave)
7763 - bond_dev_queue_xmit(bond, skb, slave->dev);
7764 - else
7765 - bond_xmit_slave_id(bond, skb, 0);
7766 - } else {
7767 - int slave_cnt = ACCESS_ONCE(bond->slave_cnt);
7768 + if (skb->protocol == htons(ETH_P_IP)) {
7769 + int noff = skb_network_offset(skb);
7770 + struct iphdr *iph;
7771
7772 - if (likely(slave_cnt)) {
7773 - slave_id = bond_rr_gen_slave_id(bond);
7774 - bond_xmit_slave_id(bond, skb, slave_id % slave_cnt);
7775 - } else {
7776 - bond_tx_drop(bond_dev, skb);
7777 + if (unlikely(!pskb_may_pull(skb, noff + sizeof(*iph))))
7778 + goto non_igmp;
7779 +
7780 + iph = ip_hdr(skb);
7781 + if (iph->protocol == IPPROTO_IGMP) {
7782 + slave = rcu_dereference(bond->curr_active_slave);
7783 + if (slave)
7784 + bond_dev_queue_xmit(bond, skb, slave->dev);
7785 + else
7786 + bond_xmit_slave_id(bond, skb, 0);
7787 + return NETDEV_TX_OK;
7788 }
7789 }
7790
7791 +non_igmp:
7792 + slave_cnt = ACCESS_ONCE(bond->slave_cnt);
7793 + if (likely(slave_cnt)) {
7794 + slave_id = bond_rr_gen_slave_id(bond);
7795 + bond_xmit_slave_id(bond, skb, slave_id % slave_cnt);
7796 + } else {
7797 + bond_tx_drop(bond_dev, skb);
7798 + }
7799 return NETDEV_TX_OK;
7800 }
7801
7802 diff --git a/drivers/net/caif/caif_hsi.c b/drivers/net/caif/caif_hsi.c
7803 index ddabce759456..7f79a6cf5665 100644
7804 --- a/drivers/net/caif/caif_hsi.c
7805 +++ b/drivers/net/caif/caif_hsi.c
7806 @@ -1464,7 +1464,7 @@ static void __exit cfhsi_exit_module(void)
7807 rtnl_lock();
7808 list_for_each_safe(list_node, n, &cfhsi_list) {
7809 cfhsi = list_entry(list_node, struct cfhsi, list);
7810 - unregister_netdev(cfhsi->ndev);
7811 + unregister_netdevice(cfhsi->ndev);
7812 }
7813 rtnl_unlock();
7814 }
7815 diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
7816 index 2edd193c96ab..f157b81551b7 100644
7817 --- a/drivers/net/dsa/mv88e6xxx/chip.c
7818 +++ b/drivers/net/dsa/mv88e6xxx/chip.c
7819 @@ -3846,6 +3846,8 @@ static int mv88e6xxx_probe(struct mdio_device *mdiodev)
7820 mv88e6xxx_mdio_unregister(chip);
7821 return err;
7822 }
7823 + if (chip->reset)
7824 + usleep_range(1000, 2000);
7825
7826 return 0;
7827 }
7828 diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
7829 index 2cd1dcd77559..6167bb0c71ed 100644
7830 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
7831 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
7832 @@ -286,6 +286,9 @@ int bnx2x_tx_int(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata)
7833 hw_cons = le16_to_cpu(*txdata->tx_cons_sb);
7834 sw_cons = txdata->tx_pkt_cons;
7835
7836 + /* Ensure subsequent loads occur after hw_cons */
7837 + smp_rmb();
7838 +
7839 while (sw_cons != hw_cons) {
7840 u16 pkt_cons;
7841
7842 @@ -3860,9 +3863,12 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
7843
7844 if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
7845 if (!(bp->flags & TX_TIMESTAMPING_EN)) {
7846 + bp->eth_stats.ptp_skip_tx_ts++;
7847 BNX2X_ERR("Tx timestamping was not enabled, this packet will not be timestamped\n");
7848 } else if (bp->ptp_tx_skb) {
7849 - BNX2X_ERR("The device supports only a single outstanding packet to timestamp, this packet will not be timestamped\n");
7850 + bp->eth_stats.ptp_skip_tx_ts++;
7851 + dev_err_once(&bp->dev->dev,
7852 + "Device supports only a single outstanding packet to timestamp, this packet won't be timestamped\n");
7853 } else {
7854 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
7855 /* schedule check for Tx timestamp */
7856 diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
7857 index 15a0850e6bde..b1992f464b3d 100644
7858 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
7859 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
7860 @@ -182,7 +182,9 @@ static const struct {
7861 { STATS_OFFSET32(driver_filtered_tx_pkt),
7862 4, false, "driver_filtered_tx_pkt" },
7863 { STATS_OFFSET32(eee_tx_lpi),
7864 - 4, true, "Tx LPI entry count"}
7865 + 4, true, "Tx LPI entry count"},
7866 + { STATS_OFFSET32(ptp_skip_tx_ts),
7867 + 4, false, "ptp_skipped_tx_tstamp" },
7868 };
7869
7870 #define BNX2X_NUM_STATS ARRAY_SIZE(bnx2x_stats_arr)
7871 diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
7872 index eeeb4c5740bf..2ef6012c3dc5 100644
7873 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
7874 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
7875 @@ -15261,11 +15261,24 @@ static void bnx2x_ptp_task(struct work_struct *work)
7876 u32 val_seq;
7877 u64 timestamp, ns;
7878 struct skb_shared_hwtstamps shhwtstamps;
7879 + bool bail = true;
7880 + int i;
7881 +
7882 + /* FW may take a while to complete timestamping; try a bit and if it's
7883 + * still not complete, may indicate an error state - bail out then.
7884 + */
7885 + for (i = 0; i < 10; i++) {
7886 + /* Read Tx timestamp registers */
7887 + val_seq = REG_RD(bp, port ? NIG_REG_P1_TLLH_PTP_BUF_SEQID :
7888 + NIG_REG_P0_TLLH_PTP_BUF_SEQID);
7889 + if (val_seq & 0x10000) {
7890 + bail = false;
7891 + break;
7892 + }
7893 + msleep(1 << i);
7894 + }
7895
7896 - /* Read Tx timestamp registers */
7897 - val_seq = REG_RD(bp, port ? NIG_REG_P1_TLLH_PTP_BUF_SEQID :
7898 - NIG_REG_P0_TLLH_PTP_BUF_SEQID);
7899 - if (val_seq & 0x10000) {
7900 + if (!bail) {
7901 /* There is a valid timestamp value */
7902 timestamp = REG_RD(bp, port ? NIG_REG_P1_TLLH_PTP_BUF_TS_MSB :
7903 NIG_REG_P0_TLLH_PTP_BUF_TS_MSB);
7904 @@ -15280,16 +15293,18 @@ static void bnx2x_ptp_task(struct work_struct *work)
7905 memset(&shhwtstamps, 0, sizeof(shhwtstamps));
7906 shhwtstamps.hwtstamp = ns_to_ktime(ns);
7907 skb_tstamp_tx(bp->ptp_tx_skb, &shhwtstamps);
7908 - dev_kfree_skb_any(bp->ptp_tx_skb);
7909 - bp->ptp_tx_skb = NULL;
7910
7911 DP(BNX2X_MSG_PTP, "Tx timestamp, timestamp cycles = %llu, ns = %llu\n",
7912 timestamp, ns);
7913 } else {
7914 - DP(BNX2X_MSG_PTP, "There is no valid Tx timestamp yet\n");
7915 - /* Reschedule to keep checking for a valid timestamp value */
7916 - schedule_work(&bp->ptp_task);
7917 + DP(BNX2X_MSG_PTP,
7918 + "Tx timestamp is not recorded (register read=%u)\n",
7919 + val_seq);
7920 + bp->eth_stats.ptp_skip_tx_ts++;
7921 }
7922 +
7923 + dev_kfree_skb_any(bp->ptp_tx_skb);
7924 + bp->ptp_tx_skb = NULL;
7925 }
7926
7927 void bnx2x_set_rx_ts(struct bnx2x *bp, struct sk_buff *skb)
7928 diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h
7929 index b2644ed13d06..d55e63692cf3 100644
7930 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h
7931 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h
7932 @@ -207,6 +207,9 @@ struct bnx2x_eth_stats {
7933 u32 driver_filtered_tx_pkt;
7934 /* src: Clear-on-Read register; Will not survive PMF Migration */
7935 u32 eee_tx_lpi;
7936 +
7937 + /* PTP */
7938 + u32 ptp_skip_tx_ts;
7939 };
7940
7941 struct bnx2x_eth_q_stats {
7942 diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
7943 index 3480b3078775..1bb923e3a2bc 100644
7944 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
7945 +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
7946 @@ -3002,39 +3002,42 @@ static void bcmgenet_timeout(struct net_device *dev)
7947 netif_tx_wake_all_queues(dev);
7948 }
7949
7950 -#define MAX_MC_COUNT 16
7951 +#define MAX_MDF_FILTER 17
7952
7953 static inline void bcmgenet_set_mdf_addr(struct bcmgenet_priv *priv,
7954 unsigned char *addr,
7955 - int *i,
7956 - int *mc)
7957 + int *i)
7958 {
7959 - u32 reg;
7960 -
7961 bcmgenet_umac_writel(priv, addr[0] << 8 | addr[1],
7962 UMAC_MDF_ADDR + (*i * 4));
7963 bcmgenet_umac_writel(priv, addr[2] << 24 | addr[3] << 16 |
7964 addr[4] << 8 | addr[5],
7965 UMAC_MDF_ADDR + ((*i + 1) * 4));
7966 - reg = bcmgenet_umac_readl(priv, UMAC_MDF_CTRL);
7967 - reg |= (1 << (MAX_MC_COUNT - *mc));
7968 - bcmgenet_umac_writel(priv, reg, UMAC_MDF_CTRL);
7969 *i += 2;
7970 - (*mc)++;
7971 }
7972
7973 static void bcmgenet_set_rx_mode(struct net_device *dev)
7974 {
7975 struct bcmgenet_priv *priv = netdev_priv(dev);
7976 struct netdev_hw_addr *ha;
7977 - int i, mc;
7978 + int i, nfilter;
7979 u32 reg;
7980
7981 netif_dbg(priv, hw, dev, "%s: %08X\n", __func__, dev->flags);
7982
7983 - /* Promiscuous mode */
7984 + /* Number of filters needed */
7985 + nfilter = netdev_uc_count(dev) + netdev_mc_count(dev) + 2;
7986 +
7987 + /*
7988 + * Turn on promicuous mode for three scenarios
7989 + * 1. IFF_PROMISC flag is set
7990 + * 2. IFF_ALLMULTI flag is set
7991 + * 3. The number of filters needed exceeds the number filters
7992 + * supported by the hardware.
7993 + */
7994 reg = bcmgenet_umac_readl(priv, UMAC_CMD);
7995 - if (dev->flags & IFF_PROMISC) {
7996 + if ((dev->flags & (IFF_PROMISC | IFF_ALLMULTI)) ||
7997 + (nfilter > MAX_MDF_FILTER)) {
7998 reg |= CMD_PROMISC;
7999 bcmgenet_umac_writel(priv, reg, UMAC_CMD);
8000 bcmgenet_umac_writel(priv, 0, UMAC_MDF_CTRL);
8001 @@ -3044,32 +3047,24 @@ static void bcmgenet_set_rx_mode(struct net_device *dev)
8002 bcmgenet_umac_writel(priv, reg, UMAC_CMD);
8003 }
8004
8005 - /* UniMac doesn't support ALLMULTI */
8006 - if (dev->flags & IFF_ALLMULTI) {
8007 - netdev_warn(dev, "ALLMULTI is not supported\n");
8008 - return;
8009 - }
8010 -
8011 /* update MDF filter */
8012 i = 0;
8013 - mc = 0;
8014 /* Broadcast */
8015 - bcmgenet_set_mdf_addr(priv, dev->broadcast, &i, &mc);
8016 + bcmgenet_set_mdf_addr(priv, dev->broadcast, &i);
8017 /* my own address.*/
8018 - bcmgenet_set_mdf_addr(priv, dev->dev_addr, &i, &mc);
8019 - /* Unicast list*/
8020 - if (netdev_uc_count(dev) > (MAX_MC_COUNT - mc))
8021 - return;
8022 + bcmgenet_set_mdf_addr(priv, dev->dev_addr, &i);
8023
8024 - if (!netdev_uc_empty(dev))
8025 - netdev_for_each_uc_addr(ha, dev)
8026 - bcmgenet_set_mdf_addr(priv, ha->addr, &i, &mc);
8027 - /* Multicast */
8028 - if (netdev_mc_empty(dev) || netdev_mc_count(dev) >= (MAX_MC_COUNT - mc))
8029 - return;
8030 + /* Unicast */
8031 + netdev_for_each_uc_addr(ha, dev)
8032 + bcmgenet_set_mdf_addr(priv, ha->addr, &i);
8033
8034 + /* Multicast */
8035 netdev_for_each_mc_addr(ha, dev)
8036 - bcmgenet_set_mdf_addr(priv, ha->addr, &i, &mc);
8037 + bcmgenet_set_mdf_addr(priv, ha->addr, &i);
8038 +
8039 + /* Enable filters */
8040 + reg = GENMASK(MAX_MDF_FILTER - 1, MAX_MDF_FILTER - nfilter);
8041 + bcmgenet_umac_writel(priv, reg, UMAC_MDF_CTRL);
8042 }
8043
8044 /* Set the hardware MAC address. */
8045 diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
8046 index 1eb34109b207..92ea760c4822 100644
8047 --- a/drivers/net/ethernet/freescale/fec_main.c
8048 +++ b/drivers/net/ethernet/freescale/fec_main.c
8049 @@ -1685,10 +1685,10 @@ static void fec_get_mac(struct net_device *ndev)
8050 */
8051 if (!is_valid_ether_addr(iap)) {
8052 /* Report it and use a random ethernet address instead */
8053 - netdev_err(ndev, "Invalid MAC address: %pM\n", iap);
8054 + dev_err(&fep->pdev->dev, "Invalid MAC address: %pM\n", iap);
8055 eth_hw_addr_random(ndev);
8056 - netdev_info(ndev, "Using random MAC address: %pM\n",
8057 - ndev->dev_addr);
8058 + dev_info(&fep->pdev->dev, "Using random MAC address: %pM\n",
8059 + ndev->dev_addr);
8060 return;
8061 }
8062
8063 diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
8064 index a137e060c185..bbc23e88de89 100644
8065 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
8066 +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
8067 @@ -3192,7 +3192,8 @@ static int ixgbe_get_module_info(struct net_device *dev,
8068 page_swap = true;
8069 }
8070
8071 - if (sff8472_rev == IXGBE_SFF_SFF_8472_UNSUP || page_swap) {
8072 + if (sff8472_rev == IXGBE_SFF_SFF_8472_UNSUP || page_swap ||
8073 + !(addr_mode & IXGBE_SFF_DDM_IMPLEMENTED)) {
8074 /* We have a SFP, but it does not support SFF-8472 */
8075 modinfo->type = ETH_MODULE_SFF_8079;
8076 modinfo->eeprom_len = ETH_MODULE_SFF_8079_LEN;
8077 diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h
8078 index cc735ec3e045..25090b4880b3 100644
8079 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h
8080 +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h
8081 @@ -70,6 +70,7 @@
8082 #define IXGBE_SFF_SOFT_RS_SELECT_10G 0x8
8083 #define IXGBE_SFF_SOFT_RS_SELECT_1G 0x0
8084 #define IXGBE_SFF_ADDRESSING_MODE 0x4
8085 +#define IXGBE_SFF_DDM_IMPLEMENTED 0x40
8086 #define IXGBE_SFF_QSFP_DA_ACTIVE_CABLE 0x1
8087 #define IXGBE_SFF_QSFP_DA_PASSIVE_CABLE 0x8
8088 #define IXGBE_SFF_QSFP_CONNECTOR_NOT_SEPARABLE 0x23
8089 diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c
8090 index 4ac023a37936..59dbecd19c93 100644
8091 --- a/drivers/net/ethernet/marvell/sky2.c
8092 +++ b/drivers/net/ethernet/marvell/sky2.c
8093 @@ -4939,6 +4939,13 @@ static const struct dmi_system_id msi_blacklist[] = {
8094 DMI_MATCH(DMI_PRODUCT_NAME, "P-79"),
8095 },
8096 },
8097 + {
8098 + .ident = "ASUS P6T",
8099 + .matches = {
8100 + DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
8101 + DMI_MATCH(DMI_BOARD_NAME, "P6T"),
8102 + },
8103 + },
8104 {}
8105 };
8106
8107 diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
8108 index 7d19029e2564..093e58e94075 100644
8109 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
8110 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
8111 @@ -213,6 +213,12 @@ static void dwmac1000_set_filter(struct mac_device_info *hw,
8112 GMAC_ADDR_LOW(reg));
8113 reg++;
8114 }
8115 +
8116 + while (reg <= perfect_addr_number) {
8117 + writel(0, ioaddr + GMAC_ADDR_HIGH(reg));
8118 + writel(0, ioaddr + GMAC_ADDR_LOW(reg));
8119 + reg++;
8120 + }
8121 }
8122
8123 #ifdef FRAME_FILTER_DEBUG
8124 diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
8125 index 51019b794be5..f46f2bfc2cc0 100644
8126 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
8127 +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
8128 @@ -173,14 +173,20 @@ static void dwmac4_set_filter(struct mac_device_info *hw,
8129 * are required
8130 */
8131 value |= GMAC_PACKET_FILTER_PR;
8132 - } else if (!netdev_uc_empty(dev)) {
8133 - int reg = 1;
8134 + } else {
8135 struct netdev_hw_addr *ha;
8136 + int reg = 1;
8137
8138 netdev_for_each_uc_addr(ha, dev) {
8139 dwmac4_set_umac_addr(hw, ha->addr, reg);
8140 reg++;
8141 }
8142 +
8143 + while (reg <= GMAC_MAX_PERFECT_ADDRESSES) {
8144 + writel(0, ioaddr + GMAC_ADDR_HIGH(reg));
8145 + writel(0, ioaddr + GMAC_ADDR_LOW(reg));
8146 + reg++;
8147 + }
8148 }
8149
8150 writel(value, ioaddr + GMAC_PACKET_FILTER);
8151 diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
8152 index a8afc92cbfca..5f21ddff9e0f 100644
8153 --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
8154 +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
8155 @@ -612,6 +612,10 @@ static void axienet_start_xmit_done(struct net_device *ndev)
8156
8157 ndev->stats.tx_packets += packets;
8158 ndev->stats.tx_bytes += size;
8159 +
8160 + /* Matches barrier in axienet_start_xmit */
8161 + smp_mb();
8162 +
8163 netif_wake_queue(ndev);
8164 }
8165
8166 @@ -666,9 +670,19 @@ static int axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
8167 cur_p = &lp->tx_bd_v[lp->tx_bd_tail];
8168
8169 if (axienet_check_tx_bd_space(lp, num_frag)) {
8170 - if (!netif_queue_stopped(ndev))
8171 - netif_stop_queue(ndev);
8172 - return NETDEV_TX_BUSY;
8173 + if (netif_queue_stopped(ndev))
8174 + return NETDEV_TX_BUSY;
8175 +
8176 + netif_stop_queue(ndev);
8177 +
8178 + /* Matches barrier in axienet_start_xmit_done */
8179 + smp_mb();
8180 +
8181 + /* Space might have just been freed - check again */
8182 + if (axienet_check_tx_bd_space(lp, num_frag))
8183 + return NETDEV_TX_BUSY;
8184 +
8185 + netif_wake_queue(ndev);
8186 }
8187
8188 if (skb->ip_summed == CHECKSUM_PARTIAL) {
8189 diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
8190 index cb206e5526c4..7e1df403a37d 100644
8191 --- a/drivers/net/gtp.c
8192 +++ b/drivers/net/gtp.c
8193 @@ -952,7 +952,7 @@ static int ipv4_pdp_add(struct net_device *dev, struct genl_info *info)
8194
8195 }
8196
8197 - pctx = kmalloc(sizeof(struct pdp_ctx), GFP_KERNEL);
8198 + pctx = kmalloc(sizeof(*pctx), GFP_ATOMIC);
8199 if (pctx == NULL)
8200 return -ENOMEM;
8201
8202 @@ -1358,9 +1358,9 @@ late_initcall(gtp_init);
8203
8204 static void __exit gtp_fini(void)
8205 {
8206 - unregister_pernet_subsys(&gtp_net_ops);
8207 genl_unregister_family(&gtp_genl_family);
8208 rtnl_link_unregister(&gtp_link_ops);
8209 + unregister_pernet_subsys(&gtp_net_ops);
8210
8211 pr_info("GTP module unloaded\n");
8212 }
8213 diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
8214 index 653f0b185a68..d91f020a8491 100644
8215 --- a/drivers/net/macsec.c
8216 +++ b/drivers/net/macsec.c
8217 @@ -867,6 +867,7 @@ static void macsec_reset_skb(struct sk_buff *skb, struct net_device *dev)
8218
8219 static void macsec_finalize_skb(struct sk_buff *skb, u8 icv_len, u8 hdr_len)
8220 {
8221 + skb->ip_summed = CHECKSUM_NONE;
8222 memmove(skb->data + hdr_len, skb->data, 2 * ETH_ALEN);
8223 skb_pull(skb, hdr_len);
8224 pskb_trim_unique(skb, skb->len - icv_len);
8225 @@ -1105,10 +1106,9 @@ static rx_handler_result_t macsec_handle_frame(struct sk_buff **pskb)
8226 }
8227
8228 skb = skb_unshare(skb, GFP_ATOMIC);
8229 - if (!skb) {
8230 - *pskb = NULL;
8231 + *pskb = skb;
8232 + if (!skb)
8233 return RX_HANDLER_CONSUMED;
8234 - }
8235
8236 pulled_sci = pskb_may_pull(skb, macsec_extra_len(true));
8237 if (!pulled_sci) {
8238 diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
8239 index 5048a6df6a8e..5c2c72b1ef8b 100644
8240 --- a/drivers/net/phy/phy_device.c
8241 +++ b/drivers/net/phy/phy_device.c
8242 @@ -673,6 +673,9 @@ int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
8243 {
8244 int rc;
8245
8246 + if (!dev)
8247 + return -EINVAL;
8248 +
8249 rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
8250 if (rc)
8251 return rc;
8252 @@ -965,6 +968,9 @@ struct phy_device *phy_attach(struct net_device *dev, const char *bus_id,
8253 struct device *d;
8254 int rc;
8255
8256 + if (!dev)
8257 + return ERR_PTR(-EINVAL);
8258 +
8259 /* Search the list of PHY devices on the mdio bus for the
8260 * PHY with the requested name
8261 */
8262 diff --git a/drivers/net/usb/asix_devices.c b/drivers/net/usb/asix_devices.c
8263 index 393fd3ed6b94..4b12b6da3fab 100644
8264 --- a/drivers/net/usb/asix_devices.c
8265 +++ b/drivers/net/usb/asix_devices.c
8266 @@ -237,7 +237,7 @@ static void asix_phy_reset(struct usbnet *dev, unsigned int reset_bits)
8267 static int ax88172_bind(struct usbnet *dev, struct usb_interface *intf)
8268 {
8269 int ret = 0;
8270 - u8 buf[ETH_ALEN];
8271 + u8 buf[ETH_ALEN] = {0};
8272 int i;
8273 unsigned long gpio_bits = dev->driver_info->data;
8274
8275 @@ -687,7 +687,7 @@ static int asix_resume(struct usb_interface *intf)
8276 static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
8277 {
8278 int ret, i;
8279 - u8 buf[ETH_ALEN], chipcode = 0;
8280 + u8 buf[ETH_ALEN] = {0}, chipcode = 0;
8281 u32 phyid;
8282 struct asix_common_private *priv;
8283
8284 @@ -1064,7 +1064,7 @@ static const struct net_device_ops ax88178_netdev_ops = {
8285 static int ax88178_bind(struct usbnet *dev, struct usb_interface *intf)
8286 {
8287 int ret;
8288 - u8 buf[ETH_ALEN];
8289 + u8 buf[ETH_ALEN] = {0};
8290
8291 usbnet_get_endpoints(dev,intf);
8292
8293 diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
8294 index 42c9480acdc7..3b6e908d3164 100644
8295 --- a/drivers/net/vrf.c
8296 +++ b/drivers/net/vrf.c
8297 @@ -153,23 +153,29 @@ static int vrf_ip6_local_out(struct net *net, struct sock *sk,
8298 static netdev_tx_t vrf_process_v6_outbound(struct sk_buff *skb,
8299 struct net_device *dev)
8300 {
8301 - const struct ipv6hdr *iph = ipv6_hdr(skb);
8302 + const struct ipv6hdr *iph;
8303 struct net *net = dev_net(skb->dev);
8304 - struct flowi6 fl6 = {
8305 - /* needed to match OIF rule */
8306 - .flowi6_oif = dev->ifindex,
8307 - .flowi6_iif = LOOPBACK_IFINDEX,
8308 - .daddr = iph->daddr,
8309 - .saddr = iph->saddr,
8310 - .flowlabel = ip6_flowinfo(iph),
8311 - .flowi6_mark = skb->mark,
8312 - .flowi6_proto = iph->nexthdr,
8313 - .flowi6_flags = FLOWI_FLAG_SKIP_NH_OIF,
8314 - };
8315 + struct flowi6 fl6;
8316 int ret = NET_XMIT_DROP;
8317 struct dst_entry *dst;
8318 struct dst_entry *dst_null = &net->ipv6.ip6_null_entry->dst;
8319
8320 + if (!pskb_may_pull(skb, ETH_HLEN + sizeof(struct ipv6hdr)))
8321 + goto err;
8322 +
8323 + iph = ipv6_hdr(skb);
8324 +
8325 + memset(&fl6, 0, sizeof(fl6));
8326 + /* needed to match OIF rule */
8327 + fl6.flowi6_oif = dev->ifindex;
8328 + fl6.flowi6_iif = LOOPBACK_IFINDEX;
8329 + fl6.daddr = iph->daddr;
8330 + fl6.saddr = iph->saddr;
8331 + fl6.flowlabel = ip6_flowinfo(iph);
8332 + fl6.flowi6_mark = skb->mark;
8333 + fl6.flowi6_proto = iph->nexthdr;
8334 + fl6.flowi6_flags = FLOWI_FLAG_SKIP_NH_OIF;
8335 +
8336 dst = ip6_route_output(net, NULL, &fl6);
8337 if (dst == dst_null)
8338 goto err;
8339 @@ -257,21 +263,27 @@ static int vrf_ip_local_out(struct net *net, struct sock *sk,
8340 static netdev_tx_t vrf_process_v4_outbound(struct sk_buff *skb,
8341 struct net_device *vrf_dev)
8342 {
8343 - struct iphdr *ip4h = ip_hdr(skb);
8344 + struct iphdr *ip4h;
8345 int ret = NET_XMIT_DROP;
8346 - struct flowi4 fl4 = {
8347 - /* needed to match OIF rule */
8348 - .flowi4_oif = vrf_dev->ifindex,
8349 - .flowi4_iif = LOOPBACK_IFINDEX,
8350 - .flowi4_tos = RT_TOS(ip4h->tos),
8351 - .flowi4_flags = FLOWI_FLAG_ANYSRC | FLOWI_FLAG_SKIP_NH_OIF,
8352 - .flowi4_proto = ip4h->protocol,
8353 - .daddr = ip4h->daddr,
8354 - .saddr = ip4h->saddr,
8355 - };
8356 + struct flowi4 fl4;
8357 struct net *net = dev_net(vrf_dev);
8358 struct rtable *rt;
8359
8360 + if (!pskb_may_pull(skb, ETH_HLEN + sizeof(struct iphdr)))
8361 + goto err;
8362 +
8363 + ip4h = ip_hdr(skb);
8364 +
8365 + memset(&fl4, 0, sizeof(fl4));
8366 + /* needed to match OIF rule */
8367 + fl4.flowi4_oif = vrf_dev->ifindex;
8368 + fl4.flowi4_iif = LOOPBACK_IFINDEX;
8369 + fl4.flowi4_tos = RT_TOS(ip4h->tos);
8370 + fl4.flowi4_flags = FLOWI_FLAG_ANYSRC | FLOWI_FLAG_SKIP_NH_OIF;
8371 + fl4.flowi4_proto = ip4h->protocol;
8372 + fl4.daddr = ip4h->daddr;
8373 + fl4.saddr = ip4h->saddr;
8374 +
8375 rt = ip_route_output_flow(net, &fl4, NULL);
8376 if (IS_ERR(rt))
8377 goto err;
8378 diff --git a/drivers/net/wireless/ath/ath10k/hw.c b/drivers/net/wireless/ath/ath10k/hw.c
8379 index 675e75d66db2..14dc6548701c 100644
8380 --- a/drivers/net/wireless/ath/ath10k/hw.c
8381 +++ b/drivers/net/wireless/ath/ath10k/hw.c
8382 @@ -157,7 +157,7 @@ const struct ath10k_hw_values qca6174_values = {
8383 };
8384
8385 const struct ath10k_hw_values qca99x0_values = {
8386 - .rtc_state_val_on = 5,
8387 + .rtc_state_val_on = 7,
8388 .ce_count = 12,
8389 .msi_assign_ce_max = 12,
8390 .num_target_ce_config_wlan = 10,
8391 diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
8392 index fb632a454fc2..1588fe8110d0 100644
8393 --- a/drivers/net/wireless/ath/ath10k/mac.c
8394 +++ b/drivers/net/wireless/ath/ath10k/mac.c
8395 @@ -1596,6 +1596,10 @@ static int ath10k_mac_setup_prb_tmpl(struct ath10k_vif *arvif)
8396 if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
8397 return 0;
8398
8399 + /* For mesh, probe response and beacon share the same template */
8400 + if (ieee80211_vif_is_mesh(vif))
8401 + return 0;
8402 +
8403 prb = ieee80211_proberesp_get(hw, vif);
8404 if (!prb) {
8405 ath10k_warn(ar, "failed to get probe resp template from mac80211\n");
8406 diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c
8407 index 3fd1cc98fd2f..55609fc4e50e 100644
8408 --- a/drivers/net/wireless/ath/ath6kl/wmi.c
8409 +++ b/drivers/net/wireless/ath/ath6kl/wmi.c
8410 @@ -1178,6 +1178,10 @@ static int ath6kl_wmi_pstream_timeout_event_rx(struct wmi *wmi, u8 *datap,
8411 return -EINVAL;
8412
8413 ev = (struct wmi_pstream_timeout_event *) datap;
8414 + if (ev->traffic_class >= WMM_NUM_AC) {
8415 + ath6kl_err("invalid traffic class: %d\n", ev->traffic_class);
8416 + return -EINVAL;
8417 + }
8418
8419 /*
8420 * When the pstream (fat pipe == AC) timesout, it means there were
8421 @@ -1519,6 +1523,10 @@ static int ath6kl_wmi_cac_event_rx(struct wmi *wmi, u8 *datap, int len,
8422 return -EINVAL;
8423
8424 reply = (struct wmi_cac_event *) datap;
8425 + if (reply->ac >= WMM_NUM_AC) {
8426 + ath6kl_err("invalid AC: %d\n", reply->ac);
8427 + return -EINVAL;
8428 + }
8429
8430 if ((reply->cac_indication == CAC_INDICATION_ADMISSION_RESP) &&
8431 (reply->status_code != IEEE80211_TSPEC_STATUS_ADMISS_ACCEPTED)) {
8432 @@ -2635,7 +2643,7 @@ int ath6kl_wmi_delete_pstream_cmd(struct wmi *wmi, u8 if_idx, u8 traffic_class,
8433 u16 active_tsids = 0;
8434 int ret;
8435
8436 - if (traffic_class > 3) {
8437 + if (traffic_class >= WMM_NUM_AC) {
8438 ath6kl_err("invalid traffic class: %d\n", traffic_class);
8439 return -EINVAL;
8440 }
8441 diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
8442 index 951bac2caf12..e7fca78cdd96 100644
8443 --- a/drivers/net/wireless/ath/ath9k/hw.c
8444 +++ b/drivers/net/wireless/ath/ath9k/hw.c
8445 @@ -250,8 +250,9 @@ void ath9k_hw_get_channel_centers(struct ath_hw *ah,
8446 /* Chip Revisions */
8447 /******************/
8448
8449 -static void ath9k_hw_read_revisions(struct ath_hw *ah)
8450 +static bool ath9k_hw_read_revisions(struct ath_hw *ah)
8451 {
8452 + u32 srev;
8453 u32 val;
8454
8455 if (ah->get_mac_revision)
8456 @@ -267,25 +268,33 @@ static void ath9k_hw_read_revisions(struct ath_hw *ah)
8457 val = REG_READ(ah, AR_SREV);
8458 ah->hw_version.macRev = MS(val, AR_SREV_REVISION2);
8459 }
8460 - return;
8461 + return true;
8462 case AR9300_DEVID_AR9340:
8463 ah->hw_version.macVersion = AR_SREV_VERSION_9340;
8464 - return;
8465 + return true;
8466 case AR9300_DEVID_QCA955X:
8467 ah->hw_version.macVersion = AR_SREV_VERSION_9550;
8468 - return;
8469 + return true;
8470 case AR9300_DEVID_AR953X:
8471 ah->hw_version.macVersion = AR_SREV_VERSION_9531;
8472 - return;
8473 + return true;
8474 case AR9300_DEVID_QCA956X:
8475 ah->hw_version.macVersion = AR_SREV_VERSION_9561;
8476 - return;
8477 + return true;
8478 }
8479
8480 - val = REG_READ(ah, AR_SREV) & AR_SREV_ID;
8481 + srev = REG_READ(ah, AR_SREV);
8482 +
8483 + if (srev == -EIO) {
8484 + ath_err(ath9k_hw_common(ah),
8485 + "Failed to read SREV register");
8486 + return false;
8487 + }
8488 +
8489 + val = srev & AR_SREV_ID;
8490
8491 if (val == 0xFF) {
8492 - val = REG_READ(ah, AR_SREV);
8493 + val = srev;
8494 ah->hw_version.macVersion =
8495 (val & AR_SREV_VERSION2) >> AR_SREV_TYPE2_S;
8496 ah->hw_version.macRev = MS(val, AR_SREV_REVISION2);
8497 @@ -304,6 +313,8 @@ static void ath9k_hw_read_revisions(struct ath_hw *ah)
8498 if (ah->hw_version.macVersion == AR_SREV_VERSION_5416_PCIE)
8499 ah->is_pciexpress = true;
8500 }
8501 +
8502 + return true;
8503 }
8504
8505 /************************************/
8506 @@ -557,7 +568,10 @@ static int __ath9k_hw_init(struct ath_hw *ah)
8507 struct ath_common *common = ath9k_hw_common(ah);
8508 int r = 0;
8509
8510 - ath9k_hw_read_revisions(ah);
8511 + if (!ath9k_hw_read_revisions(ah)) {
8512 + ath_err(common, "Could not read hardware revisions");
8513 + return -EOPNOTSUPP;
8514 + }
8515
8516 switch (ah->hw_version.macVersion) {
8517 case AR_SREV_VERSION_5416_PCI:
8518 diff --git a/drivers/net/wireless/ath/dfs_pattern_detector.c b/drivers/net/wireless/ath/dfs_pattern_detector.c
8519 index 4100ffd42a43..78146607f16e 100644
8520 --- a/drivers/net/wireless/ath/dfs_pattern_detector.c
8521 +++ b/drivers/net/wireless/ath/dfs_pattern_detector.c
8522 @@ -111,7 +111,7 @@ static const struct radar_detector_specs jp_radar_ref_types[] = {
8523 JP_PATTERN(0, 0, 1, 1428, 1428, 1, 18, 29, false),
8524 JP_PATTERN(1, 2, 3, 3846, 3846, 1, 18, 29, false),
8525 JP_PATTERN(2, 0, 1, 1388, 1388, 1, 18, 50, false),
8526 - JP_PATTERN(3, 1, 2, 4000, 4000, 1, 18, 50, false),
8527 + JP_PATTERN(3, 0, 4, 4000, 4000, 1, 18, 50, false),
8528 JP_PATTERN(4, 0, 5, 150, 230, 1, 23, 50, false),
8529 JP_PATTERN(5, 6, 10, 200, 500, 1, 16, 50, false),
8530 JP_PATTERN(6, 11, 20, 200, 500, 1, 12, 50, false),
8531 diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
8532 index bd7ff562d82d..1aa74b87599f 100644
8533 --- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
8534 +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
8535 @@ -551,6 +551,9 @@ int iwl_mvm_tx_skb_non_sta(struct iwl_mvm *mvm, struct sk_buff *skb)
8536
8537 memcpy(&info, skb->cb, sizeof(info));
8538
8539 + if (WARN_ON_ONCE(skb->len > IEEE80211_MAX_DATA_LEN + hdrlen))
8540 + return -1;
8541 +
8542 if (WARN_ON_ONCE(info.flags & IEEE80211_TX_CTL_AMPDU))
8543 return -1;
8544
8545 diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
8546 index 25f2a0aceaa2..a2ebe46bcfc5 100644
8547 --- a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
8548 +++ b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
8549 @@ -1901,10 +1901,18 @@ irqreturn_t iwl_pcie_irq_msix_handler(int irq, void *dev_id)
8550 return IRQ_NONE;
8551 }
8552
8553 - if (iwl_have_debug_level(IWL_DL_ISR))
8554 - IWL_DEBUG_ISR(trans, "ISR inta_fh 0x%08x, enabled 0x%08x\n",
8555 - inta_fh,
8556 + if (iwl_have_debug_level(IWL_DL_ISR)) {
8557 + IWL_DEBUG_ISR(trans,
8558 + "ISR inta_fh 0x%08x, enabled (sw) 0x%08x (hw) 0x%08x\n",
8559 + inta_fh, trans_pcie->fh_mask,
8560 iwl_read32(trans, CSR_MSIX_FH_INT_MASK_AD));
8561 + if (inta_fh & ~trans_pcie->fh_mask)
8562 + IWL_DEBUG_ISR(trans,
8563 + "We got a masked interrupt (0x%08x)\n",
8564 + inta_fh & ~trans_pcie->fh_mask);
8565 + }
8566 +
8567 + inta_fh &= trans_pcie->fh_mask;
8568
8569 if ((trans_pcie->shared_vec_mask & IWL_SHARED_IRQ_NON_RX) &&
8570 inta_fh & MSIX_FH_INT_CAUSES_Q0) {
8571 @@ -1943,11 +1951,18 @@ irqreturn_t iwl_pcie_irq_msix_handler(int irq, void *dev_id)
8572 }
8573
8574 /* After checking FH register check HW register */
8575 - if (iwl_have_debug_level(IWL_DL_ISR))
8576 + if (iwl_have_debug_level(IWL_DL_ISR)) {
8577 IWL_DEBUG_ISR(trans,
8578 - "ISR inta_hw 0x%08x, enabled 0x%08x\n",
8579 - inta_hw,
8580 + "ISR inta_hw 0x%08x, enabled (sw) 0x%08x (hw) 0x%08x\n",
8581 + inta_hw, trans_pcie->hw_mask,
8582 iwl_read32(trans, CSR_MSIX_HW_INT_MASK_AD));
8583 + if (inta_hw & ~trans_pcie->hw_mask)
8584 + IWL_DEBUG_ISR(trans,
8585 + "We got a masked interrupt 0x%08x\n",
8586 + inta_hw & ~trans_pcie->hw_mask);
8587 + }
8588 +
8589 + inta_hw &= trans_pcie->hw_mask;
8590
8591 /* Alive notification via Rx interrupt will do the real work */
8592 if (inta_hw & MSIX_HW_INT_CAUSES_REG_ALIVE) {
8593 diff --git a/drivers/net/wireless/mediatek/mt7601u/dma.c b/drivers/net/wireless/mediatek/mt7601u/dma.c
8594 index a8bc064bc14f..56cad16e70ca 100644
8595 --- a/drivers/net/wireless/mediatek/mt7601u/dma.c
8596 +++ b/drivers/net/wireless/mediatek/mt7601u/dma.c
8597 @@ -193,10 +193,23 @@ static void mt7601u_complete_rx(struct urb *urb)
8598 struct mt7601u_rx_queue *q = &dev->rx_q;
8599 unsigned long flags;
8600
8601 - spin_lock_irqsave(&dev->rx_lock, flags);
8602 + /* do no schedule rx tasklet if urb has been unlinked
8603 + * or the device has been removed
8604 + */
8605 + switch (urb->status) {
8606 + case -ECONNRESET:
8607 + case -ESHUTDOWN:
8608 + case -ENOENT:
8609 + return;
8610 + default:
8611 + dev_err_ratelimited(dev->dev, "rx urb failed: %d\n",
8612 + urb->status);
8613 + /* fall through */
8614 + case 0:
8615 + break;
8616 + }
8617
8618 - if (mt7601u_urb_has_error(urb))
8619 - dev_err(dev->dev, "Error: RX urb failed:%d\n", urb->status);
8620 + spin_lock_irqsave(&dev->rx_lock, flags);
8621 if (WARN_ONCE(q->e[q->end].urb != urb, "RX urb mismatch"))
8622 goto out;
8623
8624 @@ -228,14 +241,25 @@ static void mt7601u_complete_tx(struct urb *urb)
8625 struct sk_buff *skb;
8626 unsigned long flags;
8627
8628 - spin_lock_irqsave(&dev->tx_lock, flags);
8629 + switch (urb->status) {
8630 + case -ECONNRESET:
8631 + case -ESHUTDOWN:
8632 + case -ENOENT:
8633 + return;
8634 + default:
8635 + dev_err_ratelimited(dev->dev, "tx urb failed: %d\n",
8636 + urb->status);
8637 + /* fall through */
8638 + case 0:
8639 + break;
8640 + }
8641
8642 - if (mt7601u_urb_has_error(urb))
8643 - dev_err(dev->dev, "Error: TX urb failed:%d\n", urb->status);
8644 + spin_lock_irqsave(&dev->tx_lock, flags);
8645 if (WARN_ONCE(q->e[q->start].urb != urb, "TX urb mismatch"))
8646 goto out;
8647
8648 skb = q->e[q->start].skb;
8649 + q->e[q->start].skb = NULL;
8650 trace_mt_tx_dma_done(dev, skb);
8651
8652 __skb_queue_tail(&dev->tx_skb_done, skb);
8653 @@ -363,19 +387,9 @@ int mt7601u_dma_enqueue_tx(struct mt7601u_dev *dev, struct sk_buff *skb,
8654 static void mt7601u_kill_rx(struct mt7601u_dev *dev)
8655 {
8656 int i;
8657 - unsigned long flags;
8658 -
8659 - spin_lock_irqsave(&dev->rx_lock, flags);
8660 -
8661 - for (i = 0; i < dev->rx_q.entries; i++) {
8662 - int next = dev->rx_q.end;
8663
8664 - spin_unlock_irqrestore(&dev->rx_lock, flags);
8665 - usb_poison_urb(dev->rx_q.e[next].urb);
8666 - spin_lock_irqsave(&dev->rx_lock, flags);
8667 - }
8668 -
8669 - spin_unlock_irqrestore(&dev->rx_lock, flags);
8670 + for (i = 0; i < dev->rx_q.entries; i++)
8671 + usb_poison_urb(dev->rx_q.e[i].urb);
8672 }
8673
8674 static int mt7601u_submit_rx_buf(struct mt7601u_dev *dev,
8675 @@ -445,10 +459,10 @@ static void mt7601u_free_tx_queue(struct mt7601u_tx_queue *q)
8676 {
8677 int i;
8678
8679 - WARN_ON(q->used);
8680 -
8681 for (i = 0; i < q->entries; i++) {
8682 usb_poison_urb(q->e[i].urb);
8683 + if (q->e[i].skb)
8684 + mt7601u_tx_status(q->dev, q->e[i].skb);
8685 usb_free_urb(q->e[i].urb);
8686 }
8687 }
8688 diff --git a/drivers/net/wireless/mediatek/mt7601u/tx.c b/drivers/net/wireless/mediatek/mt7601u/tx.c
8689 index ad77bec1ba0f..2cb1883c0d33 100644
8690 --- a/drivers/net/wireless/mediatek/mt7601u/tx.c
8691 +++ b/drivers/net/wireless/mediatek/mt7601u/tx.c
8692 @@ -117,9 +117,9 @@ void mt7601u_tx_status(struct mt7601u_dev *dev, struct sk_buff *skb)
8693 info->status.rates[0].idx = -1;
8694 info->flags |= IEEE80211_TX_STAT_ACK;
8695
8696 - spin_lock(&dev->mac_lock);
8697 + spin_lock_bh(&dev->mac_lock);
8698 ieee80211_tx_status(dev->hw, skb);
8699 - spin_unlock(&dev->mac_lock);
8700 + spin_unlock_bh(&dev->mac_lock);
8701 }
8702
8703 static int mt7601u_skb_rooms(struct mt7601u_dev *dev, struct sk_buff *skb)
8704 diff --git a/drivers/nvdimm/dax_devs.c b/drivers/nvdimm/dax_devs.c
8705 index 45fa82cae87c..da504665b1c7 100644
8706 --- a/drivers/nvdimm/dax_devs.c
8707 +++ b/drivers/nvdimm/dax_devs.c
8708 @@ -118,7 +118,7 @@ int nd_dax_probe(struct device *dev, struct nd_namespace_common *ndns)
8709 nvdimm_bus_unlock(&ndns->dev);
8710 if (!dax_dev)
8711 return -ENOMEM;
8712 - pfn_sb = devm_kzalloc(dev, sizeof(*pfn_sb), GFP_KERNEL);
8713 + pfn_sb = devm_kmalloc(dev, sizeof(*pfn_sb), GFP_KERNEL);
8714 nd_pfn->pfn_sb = pfn_sb;
8715 rc = nd_pfn_validate(nd_pfn, DAX_SIG);
8716 dev_dbg(dev, "%s: dax: %s\n", __func__,
8717 diff --git a/drivers/nvdimm/pfn.h b/drivers/nvdimm/pfn.h
8718 index dde9853453d3..e901e3a3b04c 100644
8719 --- a/drivers/nvdimm/pfn.h
8720 +++ b/drivers/nvdimm/pfn.h
8721 @@ -36,6 +36,7 @@ struct nd_pfn_sb {
8722 __le32 end_trunc;
8723 /* minor-version-2 record the base alignment of the mapping */
8724 __le32 align;
8725 + /* minor-version-3 guarantee the padding and flags are zero */
8726 u8 padding[4000];
8727 __le64 checksum;
8728 };
8729 diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c
8730 index ba9aa8475e6d..f40c9c626861 100644
8731 --- a/drivers/nvdimm/pfn_devs.c
8732 +++ b/drivers/nvdimm/pfn_devs.c
8733 @@ -349,6 +349,15 @@ struct device *nd_pfn_create(struct nd_region *nd_region)
8734 return dev;
8735 }
8736
8737 +/**
8738 + * nd_pfn_validate - read and validate info-block
8739 + * @nd_pfn: fsdax namespace runtime state / properties
8740 + * @sig: 'devdax' or 'fsdax' signature
8741 + *
8742 + * Upon return the info-block buffer contents (->pfn_sb) are
8743 + * indeterminate when validation fails, and a coherent info-block
8744 + * otherwise.
8745 + */
8746 int nd_pfn_validate(struct nd_pfn *nd_pfn, const char *sig)
8747 {
8748 u64 checksum, offset;
8749 @@ -486,7 +495,7 @@ int nd_pfn_probe(struct device *dev, struct nd_namespace_common *ndns)
8750 nvdimm_bus_unlock(&ndns->dev);
8751 if (!pfn_dev)
8752 return -ENOMEM;
8753 - pfn_sb = devm_kzalloc(dev, sizeof(*pfn_sb), GFP_KERNEL);
8754 + pfn_sb = devm_kmalloc(dev, sizeof(*pfn_sb), GFP_KERNEL);
8755 nd_pfn = to_nd_pfn(pfn_dev);
8756 nd_pfn->pfn_sb = pfn_sb;
8757 rc = nd_pfn_validate(nd_pfn, PFN_SIG);
8758 @@ -584,7 +593,7 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
8759 u64 checksum;
8760 int rc;
8761
8762 - pfn_sb = devm_kzalloc(&nd_pfn->dev, sizeof(*pfn_sb), GFP_KERNEL);
8763 + pfn_sb = devm_kmalloc(&nd_pfn->dev, sizeof(*pfn_sb), GFP_KERNEL);
8764 if (!pfn_sb)
8765 return -ENOMEM;
8766
8767 @@ -593,11 +602,14 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
8768 sig = DAX_SIG;
8769 else
8770 sig = PFN_SIG;
8771 +
8772 rc = nd_pfn_validate(nd_pfn, sig);
8773 if (rc != -ENODEV)
8774 return rc;
8775
8776 /* no info block, do init */;
8777 + memset(pfn_sb, 0, sizeof(*pfn_sb));
8778 +
8779 nd_region = to_nd_region(nd_pfn->dev.parent);
8780 if (nd_region->ro) {
8781 dev_info(&nd_pfn->dev,
8782 @@ -673,7 +685,7 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
8783 memcpy(pfn_sb->uuid, nd_pfn->uuid, 16);
8784 memcpy(pfn_sb->parent_uuid, nd_dev_to_uuid(&ndns->dev), 16);
8785 pfn_sb->version_major = cpu_to_le16(1);
8786 - pfn_sb->version_minor = cpu_to_le16(2);
8787 + pfn_sb->version_minor = cpu_to_le16(3);
8788 pfn_sb->start_pad = cpu_to_le32(start_pad);
8789 pfn_sb->end_trunc = cpu_to_le32(end_trunc);
8790 pfn_sb->align = cpu_to_le32(nd_pfn->align);
8791 diff --git a/drivers/pci/host/pci-hyperv.c b/drivers/pci/host/pci-hyperv.c
8792 index 200b41576526..a597619f25d6 100644
8793 --- a/drivers/pci/host/pci-hyperv.c
8794 +++ b/drivers/pci/host/pci-hyperv.c
8795 @@ -1575,6 +1575,7 @@ static void hv_pci_devices_present(struct hv_pcibus_device *hbus,
8796 static void hv_eject_device_work(struct work_struct *work)
8797 {
8798 struct pci_eject_response *ejct_pkt;
8799 + struct hv_pcibus_device *hbus;
8800 struct hv_pci_dev *hpdev;
8801 struct pci_dev *pdev;
8802 unsigned long flags;
8803 @@ -1585,6 +1586,7 @@ static void hv_eject_device_work(struct work_struct *work)
8804 } ctxt;
8805
8806 hpdev = container_of(work, struct hv_pci_dev, wrk);
8807 + hbus = hpdev->hbus;
8808
8809 if (hpdev->state != hv_pcichild_ejecting) {
8810 put_pcichild(hpdev, hv_pcidev_ref_pnp);
8811 @@ -1598,8 +1600,7 @@ static void hv_eject_device_work(struct work_struct *work)
8812 * because hbus->pci_bus may not exist yet.
8813 */
8814 wslot = wslot_to_devfn(hpdev->desc.win_slot.slot);
8815 - pdev = pci_get_domain_bus_and_slot(hpdev->hbus->sysdata.domain, 0,
8816 - wslot);
8817 + pdev = pci_get_domain_bus_and_slot(hbus->sysdata.domain, 0, wslot);
8818 if (pdev) {
8819 pci_lock_rescan_remove();
8820 pci_stop_and_remove_bus_device(pdev);
8821 @@ -1607,22 +1608,24 @@ static void hv_eject_device_work(struct work_struct *work)
8822 pci_unlock_rescan_remove();
8823 }
8824
8825 + spin_lock_irqsave(&hbus->device_list_lock, flags);
8826 + list_del(&hpdev->list_entry);
8827 + spin_unlock_irqrestore(&hbus->device_list_lock, flags);
8828 +
8829 memset(&ctxt, 0, sizeof(ctxt));
8830 ejct_pkt = (struct pci_eject_response *)&ctxt.pkt.message;
8831 ejct_pkt->message_type.type = PCI_EJECTION_COMPLETE;
8832 ejct_pkt->wslot.slot = hpdev->desc.win_slot.slot;
8833 - vmbus_sendpacket(hpdev->hbus->hdev->channel, ejct_pkt,
8834 + vmbus_sendpacket(hbus->hdev->channel, ejct_pkt,
8835 sizeof(*ejct_pkt), (unsigned long)&ctxt.pkt,
8836 VM_PKT_DATA_INBAND, 0);
8837
8838 - spin_lock_irqsave(&hpdev->hbus->device_list_lock, flags);
8839 - list_del(&hpdev->list_entry);
8840 - spin_unlock_irqrestore(&hpdev->hbus->device_list_lock, flags);
8841 -
8842 put_pcichild(hpdev, hv_pcidev_ref_childlist);
8843 put_pcichild(hpdev, hv_pcidev_ref_initial);
8844 put_pcichild(hpdev, hv_pcidev_ref_pnp);
8845 - put_hvpcibus(hpdev->hbus);
8846 +
8847 + /* hpdev has been freed. Do not use it any more. */
8848 + put_hvpcibus(hbus);
8849 }
8850
8851 /**
8852 diff --git a/drivers/pci/host/pcie-xilinx-nwl.c b/drivers/pci/host/pcie-xilinx-nwl.c
8853 index 94fdd295aae2..3bba87af0b6b 100644
8854 --- a/drivers/pci/host/pcie-xilinx-nwl.c
8855 +++ b/drivers/pci/host/pcie-xilinx-nwl.c
8856 @@ -456,15 +456,13 @@ static int nwl_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
8857 int i;
8858
8859 mutex_lock(&msi->lock);
8860 - bit = bitmap_find_next_zero_area(msi->bitmap, INT_PCI_MSI_NR, 0,
8861 - nr_irqs, 0);
8862 - if (bit >= INT_PCI_MSI_NR) {
8863 + bit = bitmap_find_free_region(msi->bitmap, INT_PCI_MSI_NR,
8864 + get_count_order(nr_irqs));
8865 + if (bit < 0) {
8866 mutex_unlock(&msi->lock);
8867 return -ENOSPC;
8868 }
8869
8870 - bitmap_set(msi->bitmap, bit, nr_irqs);
8871 -
8872 for (i = 0; i < nr_irqs; i++) {
8873 irq_domain_set_info(domain, virq + i, bit + i, &nwl_irq_chip,
8874 domain->host_data, handle_simple_irq,
8875 @@ -482,7 +480,8 @@ static void nwl_irq_domain_free(struct irq_domain *domain, unsigned int virq,
8876 struct nwl_msi *msi = &pcie->msi;
8877
8878 mutex_lock(&msi->lock);
8879 - bitmap_clear(msi->bitmap, data->hwirq, nr_irqs);
8880 + bitmap_release_region(msi->bitmap, data->hwirq,
8881 + get_count_order(nr_irqs));
8882 mutex_unlock(&msi->lock);
8883 }
8884
8885 diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
8886 index e5d8e2e2bd30..717540161223 100644
8887 --- a/drivers/pci/pci-sysfs.c
8888 +++ b/drivers/pci/pci-sysfs.c
8889 @@ -371,7 +371,7 @@ static ssize_t remove_store(struct device *dev, struct device_attribute *attr,
8890 pci_stop_and_remove_bus_device_locked(to_pci_dev(dev));
8891 return count;
8892 }
8893 -static struct device_attribute dev_remove_attr = __ATTR(remove,
8894 +static struct device_attribute dev_remove_attr = __ATTR_IGNORE_LOCKDEP(remove,
8895 (S_IWUSR|S_IWGRP),
8896 NULL, remove_store);
8897
8898 diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
8899 index ccbbd4cde0f1..a07533702d26 100644
8900 --- a/drivers/pci/pci.c
8901 +++ b/drivers/pci/pci.c
8902 @@ -1786,6 +1786,13 @@ static void pci_pme_list_scan(struct work_struct *work)
8903 */
8904 if (bridge && bridge->current_state != PCI_D0)
8905 continue;
8906 + /*
8907 + * If the device is in D3cold it should not be
8908 + * polled either.
8909 + */
8910 + if (pme_dev->dev->current_state == PCI_D3cold)
8911 + continue;
8912 +
8913 pci_pme_wakeup(pme_dev->dev, NULL);
8914 } else {
8915 list_del(&pme_dev->list);
8916 diff --git a/drivers/phy/phy-rcar-gen2.c b/drivers/phy/phy-rcar-gen2.c
8917 index 97d4dd6ea924..aa02b19b7e0e 100644
8918 --- a/drivers/phy/phy-rcar-gen2.c
8919 +++ b/drivers/phy/phy-rcar-gen2.c
8920 @@ -288,6 +288,7 @@ static int rcar_gen2_phy_probe(struct platform_device *pdev)
8921 error = of_property_read_u32(np, "reg", &channel_num);
8922 if (error || channel_num > 2) {
8923 dev_err(dev, "Invalid \"reg\" property\n");
8924 + of_node_put(np);
8925 return error;
8926 }
8927 channel->select_mask = select_mask[channel_num];
8928 @@ -303,6 +304,7 @@ static int rcar_gen2_phy_probe(struct platform_device *pdev)
8929 &rcar_gen2_phy_ops);
8930 if (IS_ERR(phy->phy)) {
8931 dev_err(dev, "Failed to create PHY\n");
8932 + of_node_put(np);
8933 return PTR_ERR(phy->phy);
8934 }
8935 phy_set_drvdata(phy->phy, phy);
8936 diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c
8937 index f826793e972c..417cd3bd7e0c 100644
8938 --- a/drivers/pinctrl/pinctrl-rockchip.c
8939 +++ b/drivers/pinctrl/pinctrl-rockchip.c
8940 @@ -2208,6 +2208,7 @@ static int rockchip_get_bank_data(struct rockchip_pin_bank *bank,
8941 base,
8942 &rockchip_regmap_config);
8943 }
8944 + of_node_put(node);
8945 }
8946
8947 bank->irq = irq_of_parse_and_map(bank->of_node, 0);
8948 diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
8949 index 2f07cd615665..76ae38450aea 100644
8950 --- a/drivers/pps/pps.c
8951 +++ b/drivers/pps/pps.c
8952 @@ -129,6 +129,14 @@ static long pps_cdev_ioctl(struct file *file,
8953 pps->params.mode |= PPS_CANWAIT;
8954 pps->params.api_version = PPS_API_VERS;
8955
8956 + /*
8957 + * Clear unused fields of pps_kparams to avoid leaking
8958 + * uninitialized data of the PPS_SETPARAMS caller via
8959 + * PPS_GETPARAMS
8960 + */
8961 + pps->params.assert_off_tu.flags = 0;
8962 + pps->params.clear_off_tu.flags = 0;
8963 +
8964 spin_unlock_irq(&pps->lock);
8965
8966 break;
8967 diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
8968 index 1fe1c18cc27b..179f3c61a321 100644
8969 --- a/drivers/regulator/s2mps11.c
8970 +++ b/drivers/regulator/s2mps11.c
8971 @@ -386,8 +386,8 @@ static const struct regulator_desc s2mps11_regulators[] = {
8972 regulator_desc_s2mps11_buck1_4(4),
8973 regulator_desc_s2mps11_buck5,
8974 regulator_desc_s2mps11_buck67810(6, MIN_600_MV, STEP_6_25_MV),
8975 - regulator_desc_s2mps11_buck67810(7, MIN_600_MV, STEP_12_5_MV),
8976 - regulator_desc_s2mps11_buck67810(8, MIN_600_MV, STEP_12_5_MV),
8977 + regulator_desc_s2mps11_buck67810(7, MIN_750_MV, STEP_12_5_MV),
8978 + regulator_desc_s2mps11_buck67810(8, MIN_750_MV, STEP_12_5_MV),
8979 regulator_desc_s2mps11_buck9,
8980 regulator_desc_s2mps11_buck67810(10, MIN_750_MV, STEP_12_5_MV),
8981 };
8982 diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
8983 index 18ab84e9c6b2..58cd0e0c9680 100644
8984 --- a/drivers/s390/cio/qdio_main.c
8985 +++ b/drivers/s390/cio/qdio_main.c
8986 @@ -758,6 +758,7 @@ static int get_outbound_buffer_frontier(struct qdio_q *q)
8987
8988 switch (state) {
8989 case SLSB_P_OUTPUT_EMPTY:
8990 + case SLSB_P_OUTPUT_PENDING:
8991 /* the adapter got it */
8992 DBF_DEV_EVENT(DBF_INFO, q->irq_ptr,
8993 "out empty:%1d %02x", q->nr, count);
8994 diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c
8995 index 790babc5ef66..3cfab8868c98 100644
8996 --- a/drivers/scsi/NCR5380.c
8997 +++ b/drivers/scsi/NCR5380.c
8998 @@ -813,6 +813,8 @@ static void NCR5380_main(struct work_struct *work)
8999 NCR5380_information_transfer(instance);
9000 done = 0;
9001 }
9002 + if (!hostdata->connected)
9003 + NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
9004 spin_unlock_irq(&hostdata->lock);
9005 if (!done)
9006 cond_resched();
9007 @@ -1086,7 +1088,7 @@ static struct scsi_cmnd *NCR5380_select(struct Scsi_Host *instance,
9008 if (!hostdata->selecting) {
9009 /* Command was aborted */
9010 NCR5380_write(MODE_REG, MR_BASE);
9011 - goto out;
9012 + return NULL;
9013 }
9014 if (err < 0) {
9015 NCR5380_write(MODE_REG, MR_BASE);
9016 @@ -1135,7 +1137,7 @@ static struct scsi_cmnd *NCR5380_select(struct Scsi_Host *instance,
9017 if (!hostdata->selecting) {
9018 NCR5380_write(MODE_REG, MR_BASE);
9019 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
9020 - goto out;
9021 + return NULL;
9022 }
9023
9024 dsprintk(NDEBUG_ARBITRATION, instance, "won arbitration\n");
9025 @@ -1208,8 +1210,6 @@ static struct scsi_cmnd *NCR5380_select(struct Scsi_Host *instance,
9026 spin_lock_irq(&hostdata->lock);
9027 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
9028 NCR5380_reselect(instance);
9029 - if (!hostdata->connected)
9030 - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
9031 shost_printk(KERN_ERR, instance, "reselection after won arbitration?\n");
9032 goto out;
9033 }
9034 @@ -1217,14 +1217,16 @@ static struct scsi_cmnd *NCR5380_select(struct Scsi_Host *instance,
9035 if (err < 0) {
9036 spin_lock_irq(&hostdata->lock);
9037 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
9038 - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
9039 +
9040 /* Can't touch cmd if it has been reclaimed by the scsi ML */
9041 - if (hostdata->selecting) {
9042 - cmd->result = DID_BAD_TARGET << 16;
9043 - complete_cmd(instance, cmd);
9044 - dsprintk(NDEBUG_SELECTION, instance, "target did not respond within 250ms\n");
9045 - cmd = NULL;
9046 - }
9047 + if (!hostdata->selecting)
9048 + return NULL;
9049 +
9050 + cmd->result = DID_BAD_TARGET << 16;
9051 + complete_cmd(instance, cmd);
9052 + dsprintk(NDEBUG_SELECTION, instance,
9053 + "target did not respond within 250ms\n");
9054 + cmd = NULL;
9055 goto out;
9056 }
9057
9058 @@ -1252,12 +1254,11 @@ static struct scsi_cmnd *NCR5380_select(struct Scsi_Host *instance,
9059 if (err < 0) {
9060 shost_printk(KERN_ERR, instance, "select: REQ timeout\n");
9061 NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
9062 - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
9063 goto out;
9064 }
9065 if (!hostdata->selecting) {
9066 do_abort(instance);
9067 - goto out;
9068 + return NULL;
9069 }
9070
9071 dsprintk(NDEBUG_SELECTION, instance, "target %d selected, going into MESSAGE OUT phase.\n",
9072 @@ -1903,9 +1904,6 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
9073 */
9074 NCR5380_write(TARGET_COMMAND_REG, 0);
9075
9076 - /* Enable reselect interrupts */
9077 - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
9078 -
9079 maybe_release_dma_irq(instance);
9080 return;
9081 case MESSAGE_REJECT:
9082 @@ -1937,8 +1935,6 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
9083 */
9084 NCR5380_write(TARGET_COMMAND_REG, 0);
9085
9086 - /* Enable reselect interrupts */
9087 - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
9088 #ifdef SUN3_SCSI_VME
9089 dregs->csr |= CSR_DMA_ENABLE;
9090 #endif
9091 @@ -2046,7 +2042,6 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
9092 cmd->result = DID_ERROR << 16;
9093 complete_cmd(instance, cmd);
9094 maybe_release_dma_irq(instance);
9095 - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
9096 return;
9097 }
9098 msgout = NOP;
9099 diff --git a/drivers/scsi/mac_scsi.c b/drivers/scsi/mac_scsi.c
9100 index a590089b9397..5648d30c7376 100644
9101 --- a/drivers/scsi/mac_scsi.c
9102 +++ b/drivers/scsi/mac_scsi.c
9103 @@ -54,7 +54,7 @@ static int setup_cmd_per_lun = -1;
9104 module_param(setup_cmd_per_lun, int, 0);
9105 static int setup_sg_tablesize = -1;
9106 module_param(setup_sg_tablesize, int, 0);
9107 -static int setup_use_pdma = -1;
9108 +static int setup_use_pdma = 512;
9109 module_param(setup_use_pdma, int, 0);
9110 static int setup_hostid = -1;
9111 module_param(setup_hostid, int, 0);
9112 @@ -325,7 +325,7 @@ static int macscsi_dma_xfer_len(struct Scsi_Host *instance,
9113 struct NCR5380_hostdata *hostdata = shost_priv(instance);
9114
9115 if (hostdata->flags & FLAG_NO_PSEUDO_DMA ||
9116 - cmd->SCp.this_residual < 16)
9117 + cmd->SCp.this_residual < setup_use_pdma)
9118 return 0;
9119
9120 return cmd->SCp.this_residual;
9121 diff --git a/drivers/staging/media/davinci_vpfe/vpfe_video.c b/drivers/staging/media/davinci_vpfe/vpfe_video.c
9122 index 89dd6b989254..e0440807b4ed 100644
9123 --- a/drivers/staging/media/davinci_vpfe/vpfe_video.c
9124 +++ b/drivers/staging/media/davinci_vpfe/vpfe_video.c
9125 @@ -423,6 +423,9 @@ static int vpfe_open(struct file *file)
9126 /* If decoder is not initialized. initialize it */
9127 if (!video->initialized && vpfe_update_pipe_state(video)) {
9128 mutex_unlock(&video->lock);
9129 + v4l2_fh_del(&handle->vfh);
9130 + v4l2_fh_exit(&handle->vfh);
9131 + kfree(handle);
9132 return -ENODEV;
9133 }
9134 /* Increment device users counter */
9135 diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
9136 index 84474f06dbcf..8f1233324586 100644
9137 --- a/drivers/tty/serial/8250/8250_port.c
9138 +++ b/drivers/tty/serial/8250/8250_port.c
9139 @@ -1819,7 +1819,8 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
9140 status = serial8250_rx_chars(up, status);
9141 }
9142 serial8250_modem_status(up);
9143 - if ((!up->dma || up->dma->tx_err) && (status & UART_LSR_THRE))
9144 + if ((!up->dma || up->dma->tx_err) && (status & UART_LSR_THRE) &&
9145 + (up->ier & UART_IER_THRI))
9146 serial8250_tx_chars(up);
9147
9148 spin_unlock_irqrestore(&port->lock, flags);
9149 diff --git a/drivers/tty/serial/cpm_uart/cpm_uart_core.c b/drivers/tty/serial/cpm_uart/cpm_uart_core.c
9150 index 0040c29f651a..b9e137c03fe3 100644
9151 --- a/drivers/tty/serial/cpm_uart/cpm_uart_core.c
9152 +++ b/drivers/tty/serial/cpm_uart/cpm_uart_core.c
9153 @@ -421,7 +421,16 @@ static int cpm_uart_startup(struct uart_port *port)
9154 clrbits16(&pinfo->sccp->scc_sccm, UART_SCCM_RX);
9155 }
9156 cpm_uart_initbd(pinfo);
9157 - cpm_line_cr_cmd(pinfo, CPM_CR_INIT_TRX);
9158 + if (IS_SMC(pinfo)) {
9159 + out_be32(&pinfo->smcup->smc_rstate, 0);
9160 + out_be32(&pinfo->smcup->smc_tstate, 0);
9161 + out_be16(&pinfo->smcup->smc_rbptr,
9162 + in_be16(&pinfo->smcup->smc_rbase));
9163 + out_be16(&pinfo->smcup->smc_tbptr,
9164 + in_be16(&pinfo->smcup->smc_tbase));
9165 + } else {
9166 + cpm_line_cr_cmd(pinfo, CPM_CR_INIT_TRX);
9167 + }
9168 }
9169 /* Install interrupt handler. */
9170 retval = request_irq(port->irq, cpm_uart_int, 0, "cpm_uart", port);
9171 @@ -875,16 +884,14 @@ static void cpm_uart_init_smc(struct uart_cpm_port *pinfo)
9172 (u8 __iomem *)pinfo->tx_bd_base - DPRAM_BASE);
9173
9174 /*
9175 - * In case SMC1 is being relocated...
9176 + * In case SMC is being relocated...
9177 */
9178 -#if defined (CONFIG_I2C_SPI_SMC1_UCODE_PATCH)
9179 out_be16(&up->smc_rbptr, in_be16(&pinfo->smcup->smc_rbase));
9180 out_be16(&up->smc_tbptr, in_be16(&pinfo->smcup->smc_tbase));
9181 out_be32(&up->smc_rstate, 0);
9182 out_be32(&up->smc_tstate, 0);
9183 out_be16(&up->smc_brkcr, 1); /* number of break chars */
9184 out_be16(&up->smc_brkec, 0);
9185 -#endif
9186
9187 /* Set up the uart parameters in the
9188 * parameter ram.
9189 @@ -898,8 +905,6 @@ static void cpm_uart_init_smc(struct uart_cpm_port *pinfo)
9190 out_be16(&up->smc_brkec, 0);
9191 out_be16(&up->smc_brkcr, 1);
9192
9193 - cpm_line_cr_cmd(pinfo, CPM_CR_INIT_TRX);
9194 -
9195 /* Set UART mode, 8 bit, no parity, one stop.
9196 * Enable receive and transmit.
9197 */
9198 diff --git a/drivers/tty/serial/digicolor-usart.c b/drivers/tty/serial/digicolor-usart.c
9199 index 02ad6953b167..50ec5f1ac77f 100644
9200 --- a/drivers/tty/serial/digicolor-usart.c
9201 +++ b/drivers/tty/serial/digicolor-usart.c
9202 @@ -545,7 +545,11 @@ static int __init digicolor_uart_init(void)
9203 if (ret)
9204 return ret;
9205
9206 - return platform_driver_register(&digicolor_uart_platform);
9207 + ret = platform_driver_register(&digicolor_uart_platform);
9208 + if (ret)
9209 + uart_unregister_driver(&digicolor_uart);
9210 +
9211 + return ret;
9212 }
9213 module_init(digicolor_uart_init);
9214
9215 diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c
9216 index ec3db8d8306c..bacc7e284c0c 100644
9217 --- a/drivers/tty/serial/max310x.c
9218 +++ b/drivers/tty/serial/max310x.c
9219 @@ -494,37 +494,48 @@ static bool max310x_reg_precious(struct device *dev, unsigned int reg)
9220
9221 static int max310x_set_baud(struct uart_port *port, int baud)
9222 {
9223 - unsigned int mode = 0, clk = port->uartclk, div = clk / baud;
9224 + unsigned int mode = 0, div = 0, frac = 0, c = 0, F = 0;
9225
9226 - /* Check for minimal value for divider */
9227 - if (div < 16)
9228 - div = 16;
9229 -
9230 - if (clk % baud && (div / 16) < 0x8000) {
9231 + /*
9232 + * Calculate the integer divisor first. Select a proper mode
9233 + * in case if the requested baud is too high for the pre-defined
9234 + * clocks frequency.
9235 + */
9236 + div = port->uartclk / baud;
9237 + if (div < 8) {
9238 + /* Mode x4 */
9239 + c = 4;
9240 + mode = MAX310X_BRGCFG_4XMODE_BIT;
9241 + } else if (div < 16) {
9242 /* Mode x2 */
9243 + c = 8;
9244 mode = MAX310X_BRGCFG_2XMODE_BIT;
9245 - clk = port->uartclk * 2;
9246 - div = clk / baud;
9247 -
9248 - if (clk % baud && (div / 16) < 0x8000) {
9249 - /* Mode x4 */
9250 - mode = MAX310X_BRGCFG_4XMODE_BIT;
9251 - clk = port->uartclk * 4;
9252 - div = clk / baud;
9253 - }
9254 + } else {
9255 + c = 16;
9256 }
9257
9258 - max310x_port_write(port, MAX310X_BRGDIVMSB_REG, (div / 16) >> 8);
9259 - max310x_port_write(port, MAX310X_BRGDIVLSB_REG, div / 16);
9260 - max310x_port_write(port, MAX310X_BRGCFG_REG, (div % 16) | mode);
9261 + /* Calculate the divisor in accordance with the fraction coefficient */
9262 + div /= c;
9263 + F = c*baud;
9264 +
9265 + /* Calculate the baud rate fraction */
9266 + if (div > 0)
9267 + frac = (16*(port->uartclk % F)) / F;
9268 + else
9269 + div = 1;
9270 +
9271 + max310x_port_write(port, MAX310X_BRGDIVMSB_REG, div >> 8);
9272 + max310x_port_write(port, MAX310X_BRGDIVLSB_REG, div);
9273 + max310x_port_write(port, MAX310X_BRGCFG_REG, frac | mode);
9274
9275 - return DIV_ROUND_CLOSEST(clk, div);
9276 + /* Return the actual baud rate we just programmed */
9277 + return (16*port->uartclk) / (c*(16*div + frac));
9278 }
9279
9280 static int max310x_update_best_err(unsigned long f, long *besterr)
9281 {
9282 /* Use baudrate 115200 for calculate error */
9283 - long err = f % (115200 * 16);
9284 + long err = f % (460800 * 16);
9285
9286 if ((*besterr < 0) || (*besterr > err)) {
9287 *besterr = err;
9288 diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c
9289 index 7dc8272c6b15..9027455c6be1 100644
9290 --- a/drivers/tty/serial/msm_serial.c
9291 +++ b/drivers/tty/serial/msm_serial.c
9292 @@ -391,10 +391,14 @@ no_rx:
9293
9294 static inline void msm_wait_for_xmitr(struct uart_port *port)
9295 {
9296 + unsigned int timeout = 500000;
9297 +
9298 while (!(msm_read(port, UART_SR) & UART_SR_TX_EMPTY)) {
9299 if (msm_read(port, UART_ISR) & UART_ISR_TX_READY)
9300 break;
9301 udelay(1);
9302 + if (!timeout--)
9303 + break;
9304 }
9305 msm_write(port, UART_CR_CMD_RESET_TX_READY, UART_CR);
9306 }
9307 diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
9308 index 680fb3f9be2d..04c023f7f633 100644
9309 --- a/drivers/tty/serial/serial_core.c
9310 +++ b/drivers/tty/serial/serial_core.c
9311 @@ -1725,6 +1725,7 @@ static int uart_port_activate(struct tty_port *port, struct tty_struct *tty)
9312 {
9313 struct uart_state *state = container_of(port, struct uart_state, port);
9314 struct uart_port *uport;
9315 + int ret;
9316
9317 uport = uart_port_check(state);
9318 if (!uport || uport->flags & UPF_DEAD)
9319 @@ -1735,7 +1736,11 @@ static int uart_port_activate(struct tty_port *port, struct tty_struct *tty)
9320 /*
9321 * Start up the serial port.
9322 */
9323 - return uart_startup(tty, state, 0);
9324 + ret = uart_startup(tty, state, 0);
9325 + if (ret > 0)
9326 + tty_port_set_active(port, 1);
9327 +
9328 + return ret;
9329 }
9330
9331 static const char *uart_type(struct uart_port *port)
9332 diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
9333 index bcb997935c5e..ea35f5144237 100644
9334 --- a/drivers/tty/serial/sh-sci.c
9335 +++ b/drivers/tty/serial/sh-sci.c
9336 @@ -1291,6 +1291,7 @@ static void work_fn_tx(struct work_struct *work)
9337 struct uart_port *port = &s->port;
9338 struct circ_buf *xmit = &port->state->xmit;
9339 dma_addr_t buf;
9340 + int head, tail;
9341
9342 /*
9343 * DMA is idle now.
9344 @@ -1300,16 +1301,23 @@ static void work_fn_tx(struct work_struct *work)
9345 * consistent xmit buffer state.
9346 */
9347 spin_lock_irq(&port->lock);
9348 - buf = s->tx_dma_addr + (xmit->tail & (UART_XMIT_SIZE - 1));
9349 + head = xmit->head;
9350 + tail = xmit->tail;
9351 + buf = s->tx_dma_addr + (tail & (UART_XMIT_SIZE - 1));
9352 s->tx_dma_len = min_t(unsigned int,
9353 - CIRC_CNT(xmit->head, xmit->tail, UART_XMIT_SIZE),
9354 - CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE));
9355 - spin_unlock_irq(&port->lock);
9356 + CIRC_CNT(head, tail, UART_XMIT_SIZE),
9357 + CIRC_CNT_TO_END(head, tail, UART_XMIT_SIZE));
9358 + if (!s->tx_dma_len) {
9359 + /* Transmit buffer has been flushed */
9360 + spin_unlock_irq(&port->lock);
9361 + return;
9362 + }
9363
9364 desc = dmaengine_prep_slave_single(chan, buf, s->tx_dma_len,
9365 DMA_MEM_TO_DEV,
9366 DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
9367 if (!desc) {
9368 + spin_unlock_irq(&port->lock);
9369 dev_warn(port->dev, "Failed preparing Tx DMA descriptor\n");
9370 /* switch to PIO */
9371 sci_tx_dma_release(s, true);
9372 @@ -1319,20 +1327,20 @@ static void work_fn_tx(struct work_struct *work)
9373 dma_sync_single_for_device(chan->device->dev, buf, s->tx_dma_len,
9374 DMA_TO_DEVICE);
9375
9376 - spin_lock_irq(&port->lock);
9377 desc->callback = sci_dma_tx_complete;
9378 desc->callback_param = s;
9379 - spin_unlock_irq(&port->lock);
9380 s->cookie_tx = dmaengine_submit(desc);
9381 if (dma_submit_error(s->cookie_tx)) {
9382 + spin_unlock_irq(&port->lock);
9383 dev_warn(port->dev, "Failed submitting Tx DMA descriptor\n");
9384 /* switch to PIO */
9385 sci_tx_dma_release(s, true);
9386 return;
9387 }
9388
9389 + spin_unlock_irq(&port->lock);
9390 dev_dbg(port->dev, "%s: %p: %d...%d, cookie %d\n",
9391 - __func__, xmit->buf, xmit->tail, xmit->head, s->cookie_tx);
9392 + __func__, xmit->buf, tail, head, s->cookie_tx);
9393
9394 dma_async_issue_pending(chan);
9395 }
9396 @@ -1538,11 +1546,18 @@ static void sci_free_dma(struct uart_port *port)
9397
9398 static void sci_flush_buffer(struct uart_port *port)
9399 {
9400 + struct sci_port *s = to_sci_port(port);
9401 +
9402 /*
9403 * In uart_flush_buffer(), the xmit circular buffer has just been
9404 - * cleared, so we have to reset tx_dma_len accordingly.
9405 + * cleared, so we have to reset tx_dma_len accordingly, and stop any
9406 + * pending transfers
9407 */
9408 - to_sci_port(port)->tx_dma_len = 0;
9409 + s->tx_dma_len = 0;
9410 + if (s->chan_tx) {
9411 + dmaengine_terminate_async(s->chan_tx);
9412 + s->cookie_tx = -EINVAL;
9413 + }
9414 }
9415 #else /* !CONFIG_SERIAL_SH_SCI_DMA */
9416 static inline void sci_request_dma(struct uart_port *port)
9417 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
9418 index 3941df076cca..63646dc3ca27 100644
9419 --- a/drivers/usb/core/hub.c
9420 +++ b/drivers/usb/core/hub.c
9421 @@ -3535,6 +3535,7 @@ static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port,
9422 struct usb_device *hdev;
9423 struct usb_device *udev;
9424 int connect_change = 0;
9425 + u16 link_state;
9426 int ret;
9427
9428 hdev = hub->hdev;
9429 @@ -3544,9 +3545,11 @@ static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port,
9430 return 0;
9431 usb_clear_port_feature(hdev, port, USB_PORT_FEAT_C_SUSPEND);
9432 } else {
9433 + link_state = portstatus & USB_PORT_STAT_LINK_STATE;
9434 if (!udev || udev->state != USB_STATE_SUSPENDED ||
9435 - (portstatus & USB_PORT_STAT_LINK_STATE) !=
9436 - USB_SS_PORT_LS_U0)
9437 + (link_state != USB_SS_PORT_LS_U0 &&
9438 + link_state != USB_SS_PORT_LS_U1 &&
9439 + link_state != USB_SS_PORT_LS_U2))
9440 return 0;
9441 }
9442
9443 @@ -3876,6 +3879,9 @@ static int usb_set_lpm_timeout(struct usb_device *udev,
9444 * control transfers to set the hub timeout or enable device-initiated U1/U2
9445 * will be successful.
9446 *
9447 + * If the control transfer to enable device-initiated U1/U2 entry fails, then
9448 + * hub-initiated U1/U2 will be disabled.
9449 + *
9450 * If we cannot set the parent hub U1/U2 timeout, we attempt to let the xHCI
9451 * driver know about it. If that call fails, it should be harmless, and just
9452 * take up more slightly more bus bandwidth for unnecessary U1/U2 exit latency.
9453 @@ -3930,23 +3936,24 @@ static void usb_enable_link_state(struct usb_hcd *hcd, struct usb_device *udev,
9454 * host know that this link state won't be enabled.
9455 */
9456 hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state);
9457 - } else {
9458 - /* Only a configured device will accept the Set Feature
9459 - * U1/U2_ENABLE
9460 - */
9461 - if (udev->actconfig)
9462 - usb_set_device_initiated_lpm(udev, state, true);
9463 + return;
9464 + }
9465
9466 - /* As soon as usb_set_lpm_timeout(timeout) returns 0, the
9467 - * hub-initiated LPM is enabled. Thus, LPM is enabled no
9468 - * matter the result of usb_set_device_initiated_lpm().
9469 - * The only difference is whether device is able to initiate
9470 - * LPM.
9471 - */
9472 + /* Only a configured device will accept the Set Feature
9473 + * U1/U2_ENABLE
9474 + */
9475 + if (udev->actconfig &&
9476 + usb_set_device_initiated_lpm(udev, state, true) == 0) {
9477 if (state == USB3_LPM_U1)
9478 udev->usb3_lpm_u1_enabled = 1;
9479 else if (state == USB3_LPM_U2)
9480 udev->usb3_lpm_u2_enabled = 1;
9481 + } else {
9482 + /* Don't request U1/U2 entry if the device
9483 + * cannot transition to U1/U2.
9484 + */
9485 + usb_set_lpm_timeout(udev, state, 0);
9486 + hcd->driver->disable_usb3_lpm_timeout(hcd, udev, state);
9487 }
9488 }
9489
9490 diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
9491 index 927ac0ee09b7..d1278d2d544b 100644
9492 --- a/drivers/usb/gadget/function/f_fs.c
9493 +++ b/drivers/usb/gadget/function/f_fs.c
9494 @@ -1101,11 +1101,12 @@ static ssize_t ffs_epfile_write_iter(struct kiocb *kiocb, struct iov_iter *from)
9495 ENTER();
9496
9497 if (!is_sync_kiocb(kiocb)) {
9498 - p = kmalloc(sizeof(io_data), GFP_KERNEL);
9499 + p = kzalloc(sizeof(io_data), GFP_KERNEL);
9500 if (unlikely(!p))
9501 return -ENOMEM;
9502 p->aio = true;
9503 } else {
9504 + memset(p, 0, sizeof(*p));
9505 p->aio = false;
9506 }
9507
9508 @@ -1137,11 +1138,12 @@ static ssize_t ffs_epfile_read_iter(struct kiocb *kiocb, struct iov_iter *to)
9509 ENTER();
9510
9511 if (!is_sync_kiocb(kiocb)) {
9512 - p = kmalloc(sizeof(io_data), GFP_KERNEL);
9513 + p = kzalloc(sizeof(io_data), GFP_KERNEL);
9514 if (unlikely(!p))
9515 return -ENOMEM;
9516 p->aio = true;
9517 } else {
9518 + memset(p, 0, sizeof(*p));
9519 p->aio = false;
9520 }
9521
9522 diff --git a/drivers/usb/host/hwa-hc.c b/drivers/usb/host/hwa-hc.c
9523 index 97750f162f01..c14e4a64b0e8 100644
9524 --- a/drivers/usb/host/hwa-hc.c
9525 +++ b/drivers/usb/host/hwa-hc.c
9526 @@ -173,7 +173,7 @@ out:
9527 return result;
9528
9529 error_set_cluster_id:
9530 - wusb_cluster_id_put(wusbhc->cluster_id);
9531 + wusb_cluster_id_put(addr);
9532 error_cluster_id_get:
9533 goto out;
9534
9535 diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c
9536 index ee213c5f4107..11b0767ca1ba 100644
9537 --- a/drivers/usb/host/pci-quirks.c
9538 +++ b/drivers/usb/host/pci-quirks.c
9539 @@ -187,7 +187,7 @@ int usb_amd_find_chipset_info(void)
9540 {
9541 unsigned long flags;
9542 struct amd_chipset_info info;
9543 - int ret;
9544 + int need_pll_quirk = 0;
9545
9546 spin_lock_irqsave(&amd_lock, flags);
9547
9548 @@ -201,21 +201,28 @@ int usb_amd_find_chipset_info(void)
9549 spin_unlock_irqrestore(&amd_lock, flags);
9550
9551 if (!amd_chipset_sb_type_init(&info)) {
9552 - ret = 0;
9553 goto commit;
9554 }
9555
9556 - /* Below chipset generations needn't enable AMD PLL quirk */
9557 - if (info.sb_type.gen == AMD_CHIPSET_UNKNOWN ||
9558 - info.sb_type.gen == AMD_CHIPSET_SB600 ||
9559 - info.sb_type.gen == AMD_CHIPSET_YANGTZE ||
9560 - (info.sb_type.gen == AMD_CHIPSET_SB700 &&
9561 - info.sb_type.rev > 0x3b)) {
9562 + switch (info.sb_type.gen) {
9563 + case AMD_CHIPSET_SB700:
9564 + need_pll_quirk = info.sb_type.rev <= 0x3B;
9565 + break;
9566 + case AMD_CHIPSET_SB800:
9567 + case AMD_CHIPSET_HUDSON2:
9568 + case AMD_CHIPSET_BOLTON:
9569 + need_pll_quirk = 1;
9570 + break;
9571 + default:
9572 + need_pll_quirk = 0;
9573 + break;
9574 + }
9575 +
9576 + if (!need_pll_quirk) {
9577 if (info.smbus_dev) {
9578 pci_dev_put(info.smbus_dev);
9579 info.smbus_dev = NULL;
9580 }
9581 - ret = 0;
9582 goto commit;
9583 }
9584
9585 @@ -234,7 +241,7 @@ int usb_amd_find_chipset_info(void)
9586 }
9587 }
9588
9589 - ret = info.probe_result = 1;
9590 + need_pll_quirk = info.probe_result = 1;
9591 printk(KERN_DEBUG "QUIRK: Enable AMD PLL fix\n");
9592
9593 commit:
9594 @@ -245,7 +252,7 @@ commit:
9595
9596 /* Mark that we where here */
9597 amd_chipset.probe_count++;
9598 - ret = amd_chipset.probe_result;
9599 + need_pll_quirk = amd_chipset.probe_result;
9600
9601 spin_unlock_irqrestore(&amd_lock, flags);
9602
9603 @@ -259,7 +266,7 @@ commit:
9604 spin_unlock_irqrestore(&amd_lock, flags);
9605 }
9606
9607 - return ret;
9608 + return need_pll_quirk;
9609 }
9610 EXPORT_SYMBOL_GPL(usb_amd_find_chipset_info);
9611
9612 diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
9613 index 681d0eade82f..75e1089dfb01 100644
9614 --- a/drivers/vhost/net.c
9615 +++ b/drivers/vhost/net.c
9616 @@ -30,7 +30,7 @@
9617
9618 #include "vhost.h"
9619
9620 -static int experimental_zcopytx = 1;
9621 +static int experimental_zcopytx = 0;
9622 module_param(experimental_zcopytx, int, 0444);
9623 MODULE_PARM_DESC(experimental_zcopytx, "Enable Zero Copy TX;"
9624 " 1 -Enable; 0 - Disable");
9625 diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
9626 index e4db19e88ab1..6af117af9780 100644
9627 --- a/drivers/xen/balloon.c
9628 +++ b/drivers/xen/balloon.c
9629 @@ -591,8 +591,15 @@ static void balloon_process(struct work_struct *work)
9630 state = reserve_additional_memory();
9631 }
9632
9633 - if (credit < 0)
9634 - state = decrease_reservation(-credit, GFP_BALLOON);
9635 + if (credit < 0) {
9636 + long n_pages;
9637 +
9638 + n_pages = min(-credit, si_mem_available());
9639 + state = decrease_reservation(n_pages, GFP_BALLOON);
9640 + if (state == BP_DONE && n_pages != -credit &&
9641 + n_pages < totalreserve_pages)
9642 + state = BP_EAGAIN;
9643 + }
9644
9645 state = update_schedule(state);
9646
9647 @@ -631,6 +638,9 @@ static int add_ballooned_pages(int nr_pages)
9648 }
9649 }
9650
9651 + if (si_mem_available() < nr_pages)
9652 + return -ENOMEM;
9653 +
9654 st = decrease_reservation(nr_pages, GFP_USER);
9655 if (st != BP_DONE)
9656 return -ENOMEM;
9657 @@ -754,7 +764,7 @@ static int __init balloon_init(void)
9658 balloon_stats.schedule_delay = 1;
9659 balloon_stats.max_schedule_delay = 32;
9660 balloon_stats.retry_count = 1;
9661 - balloon_stats.max_retry_count = RETRY_UNLIMITED;
9662 + balloon_stats.max_retry_count = 4;
9663
9664 #ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG
9665 set_online_page_callback(&xen_online_page);
9666 diff --git a/fs/9p/vfs_addr.c b/fs/9p/vfs_addr.c
9667 index 6181ad79e1a5..e45b1a0dd513 100644
9668 --- a/fs/9p/vfs_addr.c
9669 +++ b/fs/9p/vfs_addr.c
9670 @@ -49,8 +49,9 @@
9671 * @page: structure to page
9672 *
9673 */
9674 -static int v9fs_fid_readpage(struct p9_fid *fid, struct page *page)
9675 +static int v9fs_fid_readpage(void *data, struct page *page)
9676 {
9677 + struct p9_fid *fid = data;
9678 struct inode *inode = page->mapping->host;
9679 struct bio_vec bvec = {.bv_page = page, .bv_len = PAGE_SIZE};
9680 struct iov_iter to;
9681 @@ -121,7 +122,8 @@ static int v9fs_vfs_readpages(struct file *filp, struct address_space *mapping,
9682 if (ret == 0)
9683 return ret;
9684
9685 - ret = read_cache_pages(mapping, pages, (void *)v9fs_vfs_readpage, filp);
9686 + ret = read_cache_pages(mapping, pages, v9fs_fid_readpage,
9687 + filp->private_data);
9688 p9_debug(P9_DEBUG_VFS, " = %d\n", ret);
9689 return ret;
9690 }
9691 diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
9692 index c77114ce884b..6cdf27325576 100644
9693 --- a/fs/btrfs/file.c
9694 +++ b/fs/btrfs/file.c
9695 @@ -2646,6 +2646,11 @@ out_only_mutex:
9696 * for detecting, at fsync time, if the inode isn't yet in the
9697 * log tree or it's there but not up to date.
9698 */
9699 + struct timespec now = current_time(inode);
9700 +
9701 + inode_inc_iversion(inode);
9702 + inode->i_mtime = now;
9703 + inode->i_ctime = now;
9704 trans = btrfs_start_transaction(root, 1);
9705 if (IS_ERR(trans)) {
9706 err = PTR_ERR(trans);
9707 diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
9708 index f916cd7b1918..82df349b84f7 100644
9709 --- a/fs/ceph/caps.c
9710 +++ b/fs/ceph/caps.c
9711 @@ -1081,20 +1081,23 @@ static int send_cap_msg(struct ceph_mds_session *session,
9712 }
9713
9714 /*
9715 - * Queue cap releases when an inode is dropped from our cache. Since
9716 - * inode is about to be destroyed, there is no need for i_ceph_lock.
9717 + * Queue cap releases when an inode is dropped from our cache.
9718 */
9719 void ceph_queue_caps_release(struct inode *inode)
9720 {
9721 struct ceph_inode_info *ci = ceph_inode(inode);
9722 struct rb_node *p;
9723
9724 + /* lock i_ceph_lock, because ceph_d_revalidate(..., LOOKUP_RCU)
9725 + * may call __ceph_caps_issued_mask() on a freeing inode. */
9726 + spin_lock(&ci->i_ceph_lock);
9727 p = rb_first(&ci->i_caps);
9728 while (p) {
9729 struct ceph_cap *cap = rb_entry(p, struct ceph_cap, ci_node);
9730 p = rb_next(p);
9731 __ceph_remove_cap(cap, true);
9732 }
9733 + spin_unlock(&ci->i_ceph_lock);
9734 }
9735
9736 /*
9737 diff --git a/fs/coda/file.c b/fs/coda/file.c
9738 index 6e0154eb6fcc..649d17edc071 100644
9739 --- a/fs/coda/file.c
9740 +++ b/fs/coda/file.c
9741 @@ -60,6 +60,41 @@ coda_file_write_iter(struct kiocb *iocb, struct iov_iter *to)
9742 return ret;
9743 }
9744
9745 +struct coda_vm_ops {
9746 + atomic_t refcnt;
9747 + struct file *coda_file;
9748 + const struct vm_operations_struct *host_vm_ops;
9749 + struct vm_operations_struct vm_ops;
9750 +};
9751 +
9752 +static void
9753 +coda_vm_open(struct vm_area_struct *vma)
9754 +{
9755 + struct coda_vm_ops *cvm_ops =
9756 + container_of(vma->vm_ops, struct coda_vm_ops, vm_ops);
9757 +
9758 + atomic_inc(&cvm_ops->refcnt);
9759 +
9760 + if (cvm_ops->host_vm_ops && cvm_ops->host_vm_ops->open)
9761 + cvm_ops->host_vm_ops->open(vma);
9762 +}
9763 +
9764 +static void
9765 +coda_vm_close(struct vm_area_struct *vma)
9766 +{
9767 + struct coda_vm_ops *cvm_ops =
9768 + container_of(vma->vm_ops, struct coda_vm_ops, vm_ops);
9769 +
9770 + if (cvm_ops->host_vm_ops && cvm_ops->host_vm_ops->close)
9771 + cvm_ops->host_vm_ops->close(vma);
9772 +
9773 + if (atomic_dec_and_test(&cvm_ops->refcnt)) {
9774 + vma->vm_ops = cvm_ops->host_vm_ops;
9775 + fput(cvm_ops->coda_file);
9776 + kfree(cvm_ops);
9777 + }
9778 +}
9779 +
9780 static int
9781 coda_file_mmap(struct file *coda_file, struct vm_area_struct *vma)
9782 {
9783 @@ -67,6 +102,8 @@ coda_file_mmap(struct file *coda_file, struct vm_area_struct *vma)
9784 struct coda_inode_info *cii;
9785 struct file *host_file;
9786 struct inode *coda_inode, *host_inode;
9787 + struct coda_vm_ops *cvm_ops;
9788 + int ret;
9789
9790 cfi = CODA_FTOC(coda_file);
9791 BUG_ON(!cfi || cfi->cfi_magic != CODA_MAGIC);
9792 @@ -75,6 +112,13 @@ coda_file_mmap(struct file *coda_file, struct vm_area_struct *vma)
9793 if (!host_file->f_op->mmap)
9794 return -ENODEV;
9795
9796 + if (WARN_ON(coda_file != vma->vm_file))
9797 + return -EIO;
9798 +
9799 + cvm_ops = kmalloc(sizeof(struct coda_vm_ops), GFP_KERNEL);
9800 + if (!cvm_ops)
9801 + return -ENOMEM;
9802 +
9803 coda_inode = file_inode(coda_file);
9804 host_inode = file_inode(host_file);
9805
9806 @@ -88,6 +132,7 @@ coda_file_mmap(struct file *coda_file, struct vm_area_struct *vma)
9807 * the container file on us! */
9808 else if (coda_inode->i_mapping != host_inode->i_mapping) {
9809 spin_unlock(&cii->c_lock);
9810 + kfree(cvm_ops);
9811 return -EBUSY;
9812 }
9813
9814 @@ -96,7 +141,29 @@ coda_file_mmap(struct file *coda_file, struct vm_area_struct *vma)
9815 cfi->cfi_mapcount++;
9816 spin_unlock(&cii->c_lock);
9817
9818 - return host_file->f_op->mmap(host_file, vma);
9819 + vma->vm_file = get_file(host_file);
9820 + ret = host_file->f_op->mmap(host_file, vma);
9821 +
9822 + if (ret) {
9823 + /* if call_mmap fails, our caller will put coda_file so we
9824 + * should drop the reference to the host_file that we got.
9825 + */
9826 + fput(host_file);
9827 + kfree(cvm_ops);
9828 + } else {
9829 + /* here we add redirects for the open/close vm_operations */
9830 + cvm_ops->host_vm_ops = vma->vm_ops;
9831 + if (vma->vm_ops)
9832 + cvm_ops->vm_ops = *vma->vm_ops;
9833 +
9834 + cvm_ops->vm_ops.open = coda_vm_open;
9835 + cvm_ops->vm_ops.close = coda_vm_close;
9836 + cvm_ops->coda_file = coda_file;
9837 + atomic_set(&cvm_ops->refcnt, 1);
9838 +
9839 + vma->vm_ops = &cvm_ops->vm_ops;
9840 + }
9841 + return ret;
9842 }
9843
9844 int coda_open(struct inode *coda_inode, struct file *coda_file)
9845 diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c
9846 index e5e29f8c920b..cb77e7ee2c9f 100644
9847 --- a/fs/ecryptfs/crypto.c
9848 +++ b/fs/ecryptfs/crypto.c
9849 @@ -1034,8 +1034,10 @@ int ecryptfs_read_and_validate_header_region(struct inode *inode)
9850
9851 rc = ecryptfs_read_lower(file_size, 0, ECRYPTFS_SIZE_AND_MARKER_BYTES,
9852 inode);
9853 - if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES)
9854 - return rc >= 0 ? -EINVAL : rc;
9855 + if (rc < 0)
9856 + return rc;
9857 + else if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES)
9858 + return -EINVAL;
9859 rc = ecryptfs_validate_marker(marker);
9860 if (!rc)
9861 ecryptfs_i_size_init(file_size, inode);
9862 @@ -1397,8 +1399,10 @@ int ecryptfs_read_and_validate_xattr_region(struct dentry *dentry,
9863 ecryptfs_inode_to_lower(inode),
9864 ECRYPTFS_XATTR_NAME, file_size,
9865 ECRYPTFS_SIZE_AND_MARKER_BYTES);
9866 - if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES)
9867 - return rc >= 0 ? -EINVAL : rc;
9868 + if (rc < 0)
9869 + return rc;
9870 + else if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES)
9871 + return -EINVAL;
9872 rc = ecryptfs_validate_marker(marker);
9873 if (!rc)
9874 ecryptfs_i_size_init(file_size, inode);
9875 diff --git a/fs/exec.c b/fs/exec.c
9876 index 81477116035d..820d7f3b25e8 100644
9877 --- a/fs/exec.c
9878 +++ b/fs/exec.c
9879 @@ -1790,7 +1790,7 @@ static int do_execveat_common(int fd, struct filename *filename,
9880 current->fs->in_exec = 0;
9881 current->in_execve = 0;
9882 acct_update_integrals(current);
9883 - task_numa_free(current);
9884 + task_numa_free(current, false);
9885 free_bprm(bprm);
9886 kfree(pathbuf);
9887 putname(filename);
9888 diff --git a/fs/ext4/dir.c b/fs/ext4/dir.c
9889 index e16bc4cec62e..0c83bffa7927 100644
9890 --- a/fs/ext4/dir.c
9891 +++ b/fs/ext4/dir.c
9892 @@ -106,7 +106,6 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx)
9893 struct inode *inode = file_inode(file);
9894 struct super_block *sb = inode->i_sb;
9895 struct buffer_head *bh = NULL;
9896 - int dir_has_error = 0;
9897 struct fscrypt_str fstr = FSTR_INIT(NULL, 0);
9898
9899 if (ext4_encrypted_inode(inode)) {
9900 @@ -142,8 +141,6 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx)
9901 return err;
9902 }
9903
9904 - offset = ctx->pos & (sb->s_blocksize - 1);
9905 -
9906 while (ctx->pos < inode->i_size) {
9907 struct ext4_map_blocks map;
9908
9909 @@ -152,9 +149,18 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx)
9910 goto errout;
9911 }
9912 cond_resched();
9913 + offset = ctx->pos & (sb->s_blocksize - 1);
9914 map.m_lblk = ctx->pos >> EXT4_BLOCK_SIZE_BITS(sb);
9915 map.m_len = 1;
9916 err = ext4_map_blocks(NULL, inode, &map, 0);
9917 + if (err == 0) {
9918 + /* m_len should never be zero but let's avoid
9919 + * an infinite loop if it somehow is */
9920 + if (map.m_len == 0)
9921 + map.m_len = 1;
9922 + ctx->pos += map.m_len * sb->s_blocksize;
9923 + continue;
9924 + }
9925 if (err > 0) {
9926 pgoff_t index = map.m_pblk >>
9927 (PAGE_SHIFT - inode->i_blkbits);
9928 @@ -173,13 +179,6 @@ static int ext4_readdir(struct file *file, struct dir_context *ctx)
9929 }
9930
9931 if (!bh) {
9932 - if (!dir_has_error) {
9933 - EXT4_ERROR_FILE(file, 0,
9934 - "directory contains a "
9935 - "hole at offset %llu",
9936 - (unsigned long long) ctx->pos);
9937 - dir_has_error = 1;
9938 - }
9939 /* corrupt size? Maybe no more blocks to read */
9940 if (ctx->pos > inode->i_blocks << 9)
9941 break;
9942 diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
9943 index 3c3757ee11f0..29dc02758a52 100644
9944 --- a/fs/ext4/namei.c
9945 +++ b/fs/ext4/namei.c
9946 @@ -79,8 +79,18 @@ static struct buffer_head *ext4_append(handle_t *handle,
9947 static int ext4_dx_csum_verify(struct inode *inode,
9948 struct ext4_dir_entry *dirent);
9949
9950 +/*
9951 + * Hints to ext4_read_dirblock regarding whether we expect a directory
9952 + * block being read to be an index block, or a block containing
9953 + * directory entries (and if the latter, whether it was found via a
9954 + * logical block in an htree index block). This is used to control
9955 + * what sort of sanity checkinig ext4_read_dirblock() will do on the
9956 + * directory block read from the storage device. EITHER will means
9957 + * the caller doesn't know what kind of directory block will be read,
9958 + * so no specific verification will be done.
9959 + */
9960 typedef enum {
9961 - EITHER, INDEX, DIRENT
9962 + EITHER, INDEX, DIRENT, DIRENT_HTREE
9963 } dirblock_type_t;
9964
9965 #define ext4_read_dirblock(inode, block, type) \
9966 @@ -106,11 +116,14 @@ static struct buffer_head *__ext4_read_dirblock(struct inode *inode,
9967
9968 return bh;
9969 }
9970 - if (!bh) {
9971 + if (!bh && (type == INDEX || type == DIRENT_HTREE)) {
9972 ext4_error_inode(inode, func, line, block,
9973 - "Directory hole found");
9974 + "Directory hole found for htree %s block",
9975 + (type == INDEX) ? "index" : "leaf");
9976 return ERR_PTR(-EFSCORRUPTED);
9977 }
9978 + if (!bh)
9979 + return NULL;
9980 dirent = (struct ext4_dir_entry *) bh->b_data;
9981 /* Determine whether or not we have an index block */
9982 if (is_dx(inode)) {
9983 @@ -960,7 +973,7 @@ static int htree_dirblock_to_tree(struct file *dir_file,
9984
9985 dxtrace(printk(KERN_INFO "In htree dirblock_to_tree: block %lu\n",
9986 (unsigned long)block));
9987 - bh = ext4_read_dirblock(dir, block, DIRENT);
9988 + bh = ext4_read_dirblock(dir, block, DIRENT_HTREE);
9989 if (IS_ERR(bh))
9990 return PTR_ERR(bh);
9991
9992 @@ -1537,7 +1550,7 @@ static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
9993 return (struct buffer_head *) frame;
9994 do {
9995 block = dx_get_block(frame->at);
9996 - bh = ext4_read_dirblock(dir, block, DIRENT);
9997 + bh = ext4_read_dirblock(dir, block, DIRENT_HTREE);
9998 if (IS_ERR(bh))
9999 goto errout;
10000
10001 @@ -2142,6 +2155,11 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
10002 blocks = dir->i_size >> sb->s_blocksize_bits;
10003 for (block = 0; block < blocks; block++) {
10004 bh = ext4_read_dirblock(dir, block, DIRENT);
10005 + if (bh == NULL) {
10006 + bh = ext4_bread(handle, dir, block,
10007 + EXT4_GET_BLOCKS_CREATE);
10008 + goto add_to_new_block;
10009 + }
10010 if (IS_ERR(bh)) {
10011 retval = PTR_ERR(bh);
10012 bh = NULL;
10013 @@ -2162,6 +2180,7 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
10014 brelse(bh);
10015 }
10016 bh = ext4_append(handle, dir, &block);
10017 +add_to_new_block:
10018 if (IS_ERR(bh)) {
10019 retval = PTR_ERR(bh);
10020 bh = NULL;
10021 @@ -2203,7 +2222,7 @@ static int ext4_dx_add_entry(handle_t *handle, struct ext4_filename *fname,
10022 return PTR_ERR(frame);
10023 entries = frame->entries;
10024 at = frame->at;
10025 - bh = ext4_read_dirblock(dir, dx_get_block(frame->at), DIRENT);
10026 + bh = ext4_read_dirblock(dir, dx_get_block(frame->at), DIRENT_HTREE);
10027 if (IS_ERR(bh)) {
10028 err = PTR_ERR(bh);
10029 bh = NULL;
10030 @@ -2719,7 +2738,10 @@ bool ext4_empty_dir(struct inode *inode)
10031 EXT4_ERROR_INODE(inode, "invalid size");
10032 return true;
10033 }
10034 - bh = ext4_read_dirblock(inode, 0, EITHER);
10035 + /* The first directory block must not be a hole,
10036 + * so treat it as DIRENT_HTREE
10037 + */
10038 + bh = ext4_read_dirblock(inode, 0, DIRENT_HTREE);
10039 if (IS_ERR(bh))
10040 return true;
10041
10042 @@ -2741,6 +2763,10 @@ bool ext4_empty_dir(struct inode *inode)
10043 brelse(bh);
10044 lblock = offset >> EXT4_BLOCK_SIZE_BITS(sb);
10045 bh = ext4_read_dirblock(inode, lblock, EITHER);
10046 + if (bh == NULL) {
10047 + offset += sb->s_blocksize;
10048 + continue;
10049 + }
10050 if (IS_ERR(bh))
10051 return true;
10052 de = (struct ext4_dir_entry_2 *) bh->b_data;
10053 @@ -3302,7 +3328,10 @@ static struct buffer_head *ext4_get_first_dir_block(handle_t *handle,
10054 struct buffer_head *bh;
10055
10056 if (!ext4_has_inline_data(inode)) {
10057 - bh = ext4_read_dirblock(inode, 0, EITHER);
10058 + /* The first directory block must not be a hole, so
10059 + * treat it as DIRENT_HTREE
10060 + */
10061 + bh = ext4_read_dirblock(inode, 0, DIRENT_HTREE);
10062 if (IS_ERR(bh)) {
10063 *retval = PTR_ERR(bh);
10064 return NULL;
10065 diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
10066 index 2fb99a081de8..c983f7d28f03 100644
10067 --- a/fs/f2fs/segment.c
10068 +++ b/fs/f2fs/segment.c
10069 @@ -1709,6 +1709,11 @@ static int read_compacted_summaries(struct f2fs_sb_info *sbi)
10070 seg_i = CURSEG_I(sbi, i);
10071 segno = le32_to_cpu(ckpt->cur_data_segno[i]);
10072 blk_off = le16_to_cpu(ckpt->cur_data_blkoff[i]);
10073 + if (blk_off > ENTRIES_IN_SUM) {
10074 + f2fs_bug_on(sbi, 1);
10075 + f2fs_put_page(page, 1);
10076 + return -EFAULT;
10077 + }
10078 seg_i->next_segno = segno;
10079 reset_curseg(sbi, i, 0);
10080 seg_i->alloc_type = ckpt->alloc_type[i];
10081 diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
10082 index 8b93d4b98428..baaed9369ab4 100644
10083 --- a/fs/fs-writeback.c
10084 +++ b/fs/fs-writeback.c
10085 @@ -721,6 +721,7 @@ void wbc_detach_inode(struct writeback_control *wbc)
10086 void wbc_account_io(struct writeback_control *wbc, struct page *page,
10087 size_t bytes)
10088 {
10089 + struct cgroup_subsys_state *css;
10090 int id;
10091
10092 /*
10093 @@ -732,7 +733,12 @@ void wbc_account_io(struct writeback_control *wbc, struct page *page,
10094 if (!wbc->wb)
10095 return;
10096
10097 - id = mem_cgroup_css_from_page(page)->id;
10098 + css = mem_cgroup_css_from_page(page);
10099 + /* dead cgroups shouldn't contribute to inode ownership arbitration */
10100 + if (!(css->flags & CSS_ONLINE))
10101 + return;
10102 +
10103 + id = css->id;
10104
10105 if (id == wbc->wb_id) {
10106 wbc->wb_bytes += bytes;
10107 diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
10108 index 76ae25661d3f..851274b25d39 100644
10109 --- a/fs/nfs/inode.c
10110 +++ b/fs/nfs/inode.c
10111 @@ -950,6 +950,7 @@ int nfs_open(struct inode *inode, struct file *filp)
10112 nfs_fscache_open_file(inode, filp);
10113 return 0;
10114 }
10115 +EXPORT_SYMBOL_GPL(nfs_open);
10116
10117 /*
10118 * This function is called whenever some part of NFS notices that
10119 diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c
10120 index 89a77950e0b0..8a0c301b0c69 100644
10121 --- a/fs/nfs/nfs4file.c
10122 +++ b/fs/nfs/nfs4file.c
10123 @@ -49,7 +49,7 @@ nfs4_file_open(struct inode *inode, struct file *filp)
10124 return err;
10125
10126 if ((openflags & O_ACCMODE) == 3)
10127 - openflags--;
10128 + return nfs_open(inode, filp);
10129
10130 /* We can't create new files here */
10131 openflags &= ~(O_CREAT|O_EXCL);
10132 diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
10133 index 6d0d94fc243d..ea29c608be89 100644
10134 --- a/fs/nfs/nfs4proc.c
10135 +++ b/fs/nfs/nfs4proc.c
10136 @@ -1121,6 +1121,12 @@ struct nfs4_opendata {
10137 int cancelled;
10138 };
10139
10140 +struct nfs4_open_createattrs {
10141 + struct nfs4_label *label;
10142 + struct iattr *sattr;
10143 + const __u32 verf[2];
10144 +};
10145 +
10146 static bool nfs4_clear_cap_atomic_open_v1(struct nfs_server *server,
10147 int err, struct nfs4_exception *exception)
10148 {
10149 @@ -1190,8 +1196,7 @@ static void nfs4_init_opendata_res(struct nfs4_opendata *p)
10150
10151 static struct nfs4_opendata *nfs4_opendata_alloc(struct dentry *dentry,
10152 struct nfs4_state_owner *sp, fmode_t fmode, int flags,
10153 - const struct iattr *attrs,
10154 - struct nfs4_label *label,
10155 + const struct nfs4_open_createattrs *c,
10156 enum open_claim_type4 claim,
10157 gfp_t gfp_mask)
10158 {
10159 @@ -1199,6 +1204,7 @@ static struct nfs4_opendata *nfs4_opendata_alloc(struct dentry *dentry,
10160 struct inode *dir = d_inode(parent);
10161 struct nfs_server *server = NFS_SERVER(dir);
10162 struct nfs_seqid *(*alloc_seqid)(struct nfs_seqid_counter *, gfp_t);
10163 + struct nfs4_label *label = (c != NULL) ? c->label : NULL;
10164 struct nfs4_opendata *p;
10165
10166 p = kzalloc(sizeof(*p), gfp_mask);
10167 @@ -1255,15 +1261,11 @@ static struct nfs4_opendata *nfs4_opendata_alloc(struct dentry *dentry,
10168 case NFS4_OPEN_CLAIM_DELEG_PREV_FH:
10169 p->o_arg.fh = NFS_FH(d_inode(dentry));
10170 }
10171 - if (attrs != NULL && attrs->ia_valid != 0) {
10172 - __u32 verf[2];
10173 -
10174 + if (c != NULL && c->sattr != NULL && c->sattr->ia_valid != 0) {
10175 p->o_arg.u.attrs = &p->attrs;
10176 - memcpy(&p->attrs, attrs, sizeof(p->attrs));
10177 + memcpy(&p->attrs, c->sattr, sizeof(p->attrs));
10178
10179 - verf[0] = jiffies;
10180 - verf[1] = current->pid;
10181 - memcpy(p->o_arg.u.verifier.data, verf,
10182 + memcpy(p->o_arg.u.verifier.data, c->verf,
10183 sizeof(p->o_arg.u.verifier.data));
10184 }
10185 p->c_arg.fh = &p->o_res.fh;
10186 @@ -1814,7 +1816,7 @@ static struct nfs4_opendata *nfs4_open_recoverdata_alloc(struct nfs_open_context
10187 struct nfs4_opendata *opendata;
10188
10189 opendata = nfs4_opendata_alloc(ctx->dentry, state->owner, 0, 0,
10190 - NULL, NULL, claim, GFP_NOFS);
10191 + NULL, claim, GFP_NOFS);
10192 if (opendata == NULL)
10193 return ERR_PTR(-ENOMEM);
10194 opendata->state = state;
10195 @@ -2759,8 +2761,7 @@ out:
10196 static int _nfs4_do_open(struct inode *dir,
10197 struct nfs_open_context *ctx,
10198 int flags,
10199 - struct iattr *sattr,
10200 - struct nfs4_label *label,
10201 + const struct nfs4_open_createattrs *c,
10202 int *opened)
10203 {
10204 struct nfs4_state_owner *sp;
10205 @@ -2772,6 +2773,8 @@ static int _nfs4_do_open(struct inode *dir,
10206 struct nfs4_threshold **ctx_th = &ctx->mdsthreshold;
10207 fmode_t fmode = ctx->mode & (FMODE_READ|FMODE_WRITE|FMODE_EXEC);
10208 enum open_claim_type4 claim = NFS4_OPEN_CLAIM_NULL;
10209 + struct iattr *sattr = c->sattr;
10210 + struct nfs4_label *label = c->label;
10211 struct nfs4_label *olabel = NULL;
10212 int status;
10213
10214 @@ -2790,8 +2793,8 @@ static int _nfs4_do_open(struct inode *dir,
10215 status = -ENOMEM;
10216 if (d_really_is_positive(dentry))
10217 claim = NFS4_OPEN_CLAIM_FH;
10218 - opendata = nfs4_opendata_alloc(dentry, sp, fmode, flags, sattr,
10219 - label, claim, GFP_KERNEL);
10220 + opendata = nfs4_opendata_alloc(dentry, sp, fmode, flags,
10221 + c, claim, GFP_KERNEL);
10222 if (opendata == NULL)
10223 goto err_put_state_owner;
10224
10225 @@ -2872,10 +2875,18 @@ static struct nfs4_state *nfs4_do_open(struct inode *dir,
10226 struct nfs_server *server = NFS_SERVER(dir);
10227 struct nfs4_exception exception = { };
10228 struct nfs4_state *res;
10229 + struct nfs4_open_createattrs c = {
10230 + .label = label,
10231 + .sattr = sattr,
10232 + .verf = {
10233 + [0] = (__u32)jiffies,
10234 + [1] = (__u32)current->pid,
10235 + },
10236 + };
10237 int status;
10238
10239 do {
10240 - status = _nfs4_do_open(dir, ctx, flags, sattr, label, opened);
10241 + status = _nfs4_do_open(dir, ctx, flags, &c, opened);
10242 res = ctx->state;
10243 trace_nfs4_open_file(ctx, flags, status);
10244 if (status == 0)
10245 diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
10246 index 3656f87d11e3..032fcae3a94f 100644
10247 --- a/fs/nfsd/nfs4state.c
10248 +++ b/fs/nfsd/nfs4state.c
10249 @@ -1502,11 +1502,16 @@ static u32 nfsd4_get_drc_mem(struct nfsd4_channel_attrs *ca)
10250 {
10251 u32 slotsize = slot_bytes(ca);
10252 u32 num = ca->maxreqs;
10253 - int avail;
10254 + unsigned long avail, total_avail;
10255
10256 spin_lock(&nfsd_drc_lock);
10257 - avail = min((unsigned long)NFSD_MAX_MEM_PER_SESSION,
10258 - nfsd_drc_max_mem - nfsd_drc_mem_used);
10259 + total_avail = nfsd_drc_max_mem - nfsd_drc_mem_used;
10260 + avail = min((unsigned long)NFSD_MAX_MEM_PER_SESSION, total_avail);
10261 + /*
10262 + * Never use more than a third of the remaining memory,
10263 + * unless it's the only way to give this client a slot:
10264 + */
10265 + avail = clamp_t(unsigned long, avail, slotsize, total_avail/3);
10266 num = min_t(int, num, avail / slotsize);
10267 nfsd_drc_mem_used += num * slotsize;
10268 spin_unlock(&nfsd_drc_lock);
10269 diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
10270 index 5c4800626f13..60291d10f8e4 100644
10271 --- a/fs/nfsd/nfssvc.c
10272 +++ b/fs/nfsd/nfssvc.c
10273 @@ -430,7 +430,7 @@ void nfsd_reset_versions(void)
10274 */
10275 static void set_max_drc(void)
10276 {
10277 - #define NFSD_DRC_SIZE_SHIFT 10
10278 + #define NFSD_DRC_SIZE_SHIFT 7
10279 nfsd_drc_max_mem = (nr_free_buffer_pages()
10280 >> NFSD_DRC_SIZE_SHIFT) * PAGE_SIZE;
10281 nfsd_drc_mem_used = 0;
10282 diff --git a/fs/open.c b/fs/open.c
10283 index 6ad9a21f2459..8db6e3a5fc10 100644
10284 --- a/fs/open.c
10285 +++ b/fs/open.c
10286 @@ -380,6 +380,25 @@ SYSCALL_DEFINE3(faccessat, int, dfd, const char __user *, filename, int, mode)
10287 override_cred->cap_permitted;
10288 }
10289
10290 + /*
10291 + * The new set of credentials can *only* be used in
10292 + * task-synchronous circumstances, and does not need
10293 + * RCU freeing, unless somebody then takes a separate
10294 + * reference to it.
10295 + *
10296 + * NOTE! This is _only_ true because this credential
10297 + * is used purely for override_creds() that installs
10298 + * it as the subjective cred. Other threads will be
10299 + * accessing ->real_cred, not the subjective cred.
10300 + *
10301 + * If somebody _does_ make a copy of this (using the
10302 + * 'get_current_cred()' function), that will clear the
10303 + * non_rcu field, because now that other user may be
10304 + * expecting RCU freeing. But normal thread-synchronous
10305 + * cred accesses will keep things non-RCY.
10306 + */
10307 + override_cred->non_rcu = 1;
10308 +
10309 old_cred = override_creds(override_cred);
10310 retry:
10311 res = user_path_at(dfd, filename, lookup_flags, &path);
10312 diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
10313 index 5b32c054df71..191573a625f2 100644
10314 --- a/fs/proc/proc_sysctl.c
10315 +++ b/fs/proc/proc_sysctl.c
10316 @@ -500,6 +500,10 @@ static struct inode *proc_sys_make_inode(struct super_block *sb,
10317
10318 if (root->set_ownership)
10319 root->set_ownership(head, table, &inode->i_uid, &inode->i_gid);
10320 + else {
10321 + inode->i_uid = GLOBAL_ROOT_UID;
10322 + inode->i_gid = GLOBAL_ROOT_GID;
10323 + }
10324
10325 return inode;
10326 }
10327 diff --git a/include/linux/compiler.h b/include/linux/compiler.h
10328 index 80a5bc623c47..3050de0dac96 100644
10329 --- a/include/linux/compiler.h
10330 +++ b/include/linux/compiler.h
10331 @@ -250,23 +250,21 @@ void __read_once_size(const volatile void *p, void *res, int size)
10332
10333 #ifdef CONFIG_KASAN
10334 /*
10335 - * This function is not 'inline' because __no_sanitize_address confilcts
10336 + * We can't declare function 'inline' because __no_sanitize_address confilcts
10337 * with inlining. Attempt to inline it may cause a build failure.
10338 * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368
10339 * '__maybe_unused' allows us to avoid defined-but-not-used warnings.
10340 */
10341 -static __no_sanitize_address __maybe_unused
10342 -void __read_once_size_nocheck(const volatile void *p, void *res, int size)
10343 -{
10344 - __READ_ONCE_SIZE;
10345 -}
10346 +# define __no_kasan_or_inline __no_sanitize_address __maybe_unused
10347 #else
10348 -static __always_inline
10349 +# define __no_kasan_or_inline __always_inline
10350 +#endif
10351 +
10352 +static __no_kasan_or_inline
10353 void __read_once_size_nocheck(const volatile void *p, void *res, int size)
10354 {
10355 __READ_ONCE_SIZE;
10356 }
10357 -#endif
10358
10359 static __always_inline void __write_once_size(volatile void *p, void *res, int size)
10360 {
10361 @@ -304,6 +302,7 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
10362 * with an explicit memory barrier or atomic instruction that provides the
10363 * required ordering.
10364 */
10365 +#include <linux/kasan-checks.h>
10366
10367 #define __READ_ONCE(x, check) \
10368 ({ \
10369 @@ -322,6 +321,13 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s
10370 */
10371 #define READ_ONCE_NOCHECK(x) __READ_ONCE(x, 0)
10372
10373 +static __no_kasan_or_inline
10374 +unsigned long read_word_at_a_time(const void *addr)
10375 +{
10376 + kasan_check_read(addr, 1);
10377 + return *(unsigned long *)addr;
10378 +}
10379 +
10380 #define WRITE_ONCE(x, val) \
10381 ({ \
10382 union { typeof(x) __val; char __c[1]; } __u = \
10383 diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h
10384 index c9447a689522..1ab0273560ae 100644
10385 --- a/include/linux/cpuhotplug.h
10386 +++ b/include/linux/cpuhotplug.h
10387 @@ -77,10 +77,10 @@ enum cpuhp_state {
10388 CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING,
10389 CPUHP_AP_PERF_ARM_STARTING,
10390 CPUHP_AP_ARM_L2X0_STARTING,
10391 + CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING,
10392 CPUHP_AP_ARM_ARCH_TIMER_STARTING,
10393 CPUHP_AP_ARM_GLOBAL_TIMER_STARTING,
10394 CPUHP_AP_JCORE_TIMER_STARTING,
10395 - CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING,
10396 CPUHP_AP_ARM_TWD_STARTING,
10397 CPUHP_AP_METAG_TIMER_STARTING,
10398 CPUHP_AP_QCOM_TIMER_STARTING,
10399 diff --git a/include/linux/cred.h b/include/linux/cred.h
10400 index cf1a5d0c4eb4..4f614042214b 100644
10401 --- a/include/linux/cred.h
10402 +++ b/include/linux/cred.h
10403 @@ -144,7 +144,11 @@ struct cred {
10404 struct user_struct *user; /* real user ID subscription */
10405 struct user_namespace *user_ns; /* user_ns the caps and keyrings are relative to. */
10406 struct group_info *group_info; /* supplementary groups for euid/fsgid */
10407 - struct rcu_head rcu; /* RCU deletion hook */
10408 + /* RCU deletion */
10409 + union {
10410 + int non_rcu; /* Can we skip RCU deletion? */
10411 + struct rcu_head rcu; /* RCU deletion hook */
10412 + };
10413 };
10414
10415 extern void __put_cred(struct cred *);
10416 @@ -242,6 +246,7 @@ static inline const struct cred *get_cred(const struct cred *cred)
10417 {
10418 struct cred *nonconst_cred = (struct cred *) cred;
10419 validate_creds(cred);
10420 + nonconst_cred->non_rcu = 0;
10421 return get_new_cred(nonconst_cred);
10422 }
10423
10424 diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
10425 index aa2935779e43..96037ba940ee 100644
10426 --- a/include/linux/rcupdate.h
10427 +++ b/include/linux/rcupdate.h
10428 @@ -866,7 +866,7 @@ static inline void rcu_preempt_sleep_check(void)
10429 * read-side critical sections may be preempted and they may also block, but
10430 * only when acquiring spinlocks that are subject to priority inheritance.
10431 */
10432 -static inline void rcu_read_lock(void)
10433 +static __always_inline void rcu_read_lock(void)
10434 {
10435 __rcu_read_lock();
10436 __acquire(RCU);
10437 diff --git a/include/linux/sched.h b/include/linux/sched.h
10438 index 1c487a3abd84..275511b60978 100644
10439 --- a/include/linux/sched.h
10440 +++ b/include/linux/sched.h
10441 @@ -2044,7 +2044,7 @@ static inline bool in_vfork(struct task_struct *tsk)
10442 extern void task_numa_fault(int last_node, int node, int pages, int flags);
10443 extern pid_t task_numa_group_id(struct task_struct *p);
10444 extern void set_numabalancing_state(bool enabled);
10445 -extern void task_numa_free(struct task_struct *p);
10446 +extern void task_numa_free(struct task_struct *p, bool final);
10447 extern bool should_numa_migrate_memory(struct task_struct *p, struct page *page,
10448 int src_nid, int dst_cpu);
10449 #else
10450 @@ -2059,7 +2059,7 @@ static inline pid_t task_numa_group_id(struct task_struct *p)
10451 static inline void set_numabalancing_state(bool enabled)
10452 {
10453 }
10454 -static inline void task_numa_free(struct task_struct *p)
10455 +static inline void task_numa_free(struct task_struct *p, bool final)
10456 {
10457 }
10458 static inline bool should_numa_migrate_memory(struct task_struct *p,
10459 diff --git a/include/net/tcp.h b/include/net/tcp.h
10460 index d7047de952f0..1eda31f7f013 100644
10461 --- a/include/net/tcp.h
10462 +++ b/include/net/tcp.h
10463 @@ -1512,6 +1512,11 @@ struct sock *tcp_try_fastopen(struct sock *sk, struct sk_buff *skb,
10464 void tcp_fastopen_init_key_once(bool publish);
10465 #define TCP_FASTOPEN_KEY_LENGTH 16
10466
10467 +static inline void tcp_init_send_head(struct sock *sk)
10468 +{
10469 + sk->sk_send_head = NULL;
10470 +}
10471 +
10472 /* Fastopen key context */
10473 struct tcp_fastopen_context {
10474 struct crypto_cipher *tfm;
10475 @@ -1528,6 +1533,7 @@ static inline void tcp_write_queue_purge(struct sock *sk)
10476 sk_wmem_free_skb(sk, skb);
10477 sk_mem_reclaim(sk);
10478 tcp_clear_all_retrans_hints(tcp_sk(sk));
10479 + tcp_init_send_head(sk);
10480 inet_csk(sk)->icsk_backoff = 0;
10481 }
10482
10483 @@ -1589,11 +1595,6 @@ static inline void tcp_check_send_head(struct sock *sk, struct sk_buff *skb_unli
10484 tcp_sk(sk)->highest_sack = NULL;
10485 }
10486
10487 -static inline void tcp_init_send_head(struct sock *sk)
10488 -{
10489 - sk->sk_send_head = NULL;
10490 -}
10491 -
10492 static inline void __tcp_add_write_queue_tail(struct sock *sk, struct sk_buff *skb)
10493 {
10494 __skb_queue_tail(&sk->sk_write_queue, skb);
10495 diff --git a/kernel/bpf/Makefile b/kernel/bpf/Makefile
10496 index eed911d091da..5a590f22b4d4 100644
10497 --- a/kernel/bpf/Makefile
10498 +++ b/kernel/bpf/Makefile
10499 @@ -1,4 +1,5 @@
10500 obj-y := core.o
10501 +CFLAGS_core.o += $(call cc-disable-warning, override-init)
10502
10503 obj-$(CONFIG_BPF_SYSCALL) += syscall.o verifier.o inode.o helpers.o
10504 obj-$(CONFIG_BPF_SYSCALL) += hashtab.o arraymap.o percpu_freelist.o
10505 diff --git a/kernel/cred.c b/kernel/cred.c
10506 index 7b925925be95..0966fab0f48b 100644
10507 --- a/kernel/cred.c
10508 +++ b/kernel/cred.c
10509 @@ -146,7 +146,10 @@ void __put_cred(struct cred *cred)
10510 BUG_ON(cred == current->cred);
10511 BUG_ON(cred == current->real_cred);
10512
10513 - call_rcu(&cred->rcu, put_cred_rcu);
10514 + if (cred->non_rcu)
10515 + put_cred_rcu(&cred->rcu);
10516 + else
10517 + call_rcu(&cred->rcu, put_cred_rcu);
10518 }
10519 EXPORT_SYMBOL(__put_cred);
10520
10521 @@ -257,6 +260,7 @@ struct cred *prepare_creds(void)
10522 old = task->cred;
10523 memcpy(new, old, sizeof(struct cred));
10524
10525 + new->non_rcu = 0;
10526 atomic_set(&new->usage, 1);
10527 set_cred_subscribers(new, 0);
10528 get_group_info(new->group_info);
10529 @@ -536,7 +540,19 @@ const struct cred *override_creds(const struct cred *new)
10530
10531 validate_creds(old);
10532 validate_creds(new);
10533 - get_cred(new);
10534 +
10535 + /*
10536 + * NOTE! This uses 'get_new_cred()' rather than 'get_cred()'.
10537 + *
10538 + * That means that we do not clear the 'non_rcu' flag, since
10539 + * we are only installing the cred into the thread-synchronous
10540 + * '->cred' pointer, not the '->real_cred' pointer that is
10541 + * visible to other threads under RCU.
10542 + *
10543 + * Also note that we did validate_creds() manually, not depending
10544 + * on the validation in 'get_cred()'.
10545 + */
10546 + get_new_cred((struct cred *)new);
10547 alter_cred_subscribers(new, 1);
10548 rcu_assign_pointer(current->cred, new);
10549 alter_cred_subscribers(old, -1);
10550 @@ -619,6 +635,7 @@ struct cred *prepare_kernel_cred(struct task_struct *daemon)
10551 validate_creds(old);
10552
10553 *new = *old;
10554 + new->non_rcu = 0;
10555 atomic_set(&new->usage, 1);
10556 set_cred_subscribers(new, 0);
10557 get_uid(new->user);
10558 diff --git a/kernel/fork.c b/kernel/fork.c
10559 index e92b06351dec..1c21d13a3874 100644
10560 --- a/kernel/fork.c
10561 +++ b/kernel/fork.c
10562 @@ -389,7 +389,7 @@ void __put_task_struct(struct task_struct *tsk)
10563 WARN_ON(tsk == current);
10564
10565 cgroup_free(tsk);
10566 - task_numa_free(tsk);
10567 + task_numa_free(tsk, true);
10568 security_task_free(tsk);
10569 exit_creds(tsk);
10570 delayacct_tsk_free(tsk);
10571 diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
10572 index 26fc428476b9..4b27aaffdf35 100644
10573 --- a/kernel/locking/lockdep.c
10574 +++ b/kernel/locking/lockdep.c
10575 @@ -3260,17 +3260,17 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
10576 if (depth) {
10577 hlock = curr->held_locks + depth - 1;
10578 if (hlock->class_idx == class_idx && nest_lock) {
10579 - if (hlock->references) {
10580 - /*
10581 - * Check: unsigned int references:12, overflow.
10582 - */
10583 - if (DEBUG_LOCKS_WARN_ON(hlock->references == (1 << 12)-1))
10584 - return 0;
10585 + if (!references)
10586 + references++;
10587
10588 + if (!hlock->references)
10589 hlock->references++;
10590 - } else {
10591 - hlock->references = 2;
10592 - }
10593 +
10594 + hlock->references += references;
10595 +
10596 + /* Overflow */
10597 + if (DEBUG_LOCKS_WARN_ON(hlock->references < references))
10598 + return 0;
10599
10600 return 1;
10601 }
10602 diff --git a/kernel/locking/lockdep_proc.c b/kernel/locking/lockdep_proc.c
10603 index a0f61effad25..75d80809c48c 100644
10604 --- a/kernel/locking/lockdep_proc.c
10605 +++ b/kernel/locking/lockdep_proc.c
10606 @@ -219,7 +219,6 @@ static void lockdep_stats_debug_show(struct seq_file *m)
10607
10608 static int lockdep_stats_show(struct seq_file *m, void *v)
10609 {
10610 - struct lock_class *class;
10611 unsigned long nr_unused = 0, nr_uncategorized = 0,
10612 nr_irq_safe = 0, nr_irq_unsafe = 0,
10613 nr_softirq_safe = 0, nr_softirq_unsafe = 0,
10614 @@ -229,6 +228,9 @@ static int lockdep_stats_show(struct seq_file *m, void *v)
10615 nr_hardirq_read_safe = 0, nr_hardirq_read_unsafe = 0,
10616 sum_forward_deps = 0;
10617
10618 +#ifdef CONFIG_PROVE_LOCKING
10619 + struct lock_class *class;
10620 +
10621 list_for_each_entry(class, &all_lock_classes, lock_entry) {
10622
10623 if (class->usage_mask == 0)
10624 @@ -260,12 +262,12 @@ static int lockdep_stats_show(struct seq_file *m, void *v)
10625 if (class->usage_mask & LOCKF_ENABLED_HARDIRQ_READ)
10626 nr_hardirq_read_unsafe++;
10627
10628 -#ifdef CONFIG_PROVE_LOCKING
10629 sum_forward_deps += lockdep_count_forward_deps(class);
10630 -#endif
10631 }
10632 #ifdef CONFIG_DEBUG_LOCKDEP
10633 DEBUG_LOCKS_WARN_ON(debug_atomic_read(nr_unused_locks) != nr_unused);
10634 +#endif
10635 +
10636 #endif
10637 seq_printf(m, " lock-classes: %11lu [max: %lu]\n",
10638 nr_lock_classes, MAX_LOCKDEP_KEYS);
10639 diff --git a/kernel/padata.c b/kernel/padata.c
10640 index e4a8f8d9b31a..63449fc584da 100644
10641 --- a/kernel/padata.c
10642 +++ b/kernel/padata.c
10643 @@ -274,7 +274,12 @@ static void padata_reorder(struct parallel_data *pd)
10644 * The next object that needs serialization might have arrived to
10645 * the reorder queues in the meantime, we will be called again
10646 * from the timer function if no one else cares for it.
10647 + *
10648 + * Ensure reorder_objects is read after pd->lock is dropped so we see
10649 + * an increment from another task in padata_do_serial. Pairs with
10650 + * smp_mb__after_atomic in padata_do_serial.
10651 */
10652 + smp_mb();
10653 if (atomic_read(&pd->reorder_objects)
10654 && !(pinst->flags & PADATA_RESET))
10655 mod_timer(&pd->timer, jiffies + HZ);
10656 @@ -343,6 +348,13 @@ void padata_do_serial(struct padata_priv *padata)
10657 list_add_tail(&padata->list, &pqueue->reorder.list);
10658 spin_unlock(&pqueue->reorder.lock);
10659
10660 + /*
10661 + * Ensure the atomic_inc of reorder_objects above is ordered correctly
10662 + * with the trylock of pd->lock in padata_reorder. Pairs with smp_mb
10663 + * in padata_reorder.
10664 + */
10665 + smp_mb__after_atomic();
10666 +
10667 put_cpu();
10668
10669 padata_reorder(pd);
10670 diff --git a/kernel/pid_namespace.c b/kernel/pid_namespace.c
10671 index 3976dd57db78..0eab538841fd 100644
10672 --- a/kernel/pid_namespace.c
10673 +++ b/kernel/pid_namespace.c
10674 @@ -344,7 +344,7 @@ int reboot_pid_ns(struct pid_namespace *pid_ns, int cmd)
10675 }
10676
10677 read_lock(&tasklist_lock);
10678 - force_sig(SIGKILL, pid_ns->child_reaper);
10679 + send_sig(SIGKILL, pid_ns->child_reaper, 1);
10680 read_unlock(&tasklist_lock);
10681
10682 do_exit(0);
10683 diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
10684 index f0c9b6925687..924bb307c0fa 100644
10685 --- a/kernel/sched/fair.c
10686 +++ b/kernel/sched/fair.c
10687 @@ -2257,13 +2257,23 @@ no_join:
10688 return;
10689 }
10690
10691 -void task_numa_free(struct task_struct *p)
10692 +/*
10693 + * Get rid of NUMA staticstics associated with a task (either current or dead).
10694 + * If @final is set, the task is dead and has reached refcount zero, so we can
10695 + * safely free all relevant data structures. Otherwise, there might be
10696 + * concurrent reads from places like load balancing and procfs, and we should
10697 + * reset the data back to default state without freeing ->numa_faults.
10698 + */
10699 +void task_numa_free(struct task_struct *p, bool final)
10700 {
10701 struct numa_group *grp = p->numa_group;
10702 - void *numa_faults = p->numa_faults;
10703 + unsigned long *numa_faults = p->numa_faults;
10704 unsigned long flags;
10705 int i;
10706
10707 + if (!numa_faults)
10708 + return;
10709 +
10710 if (grp) {
10711 spin_lock_irqsave(&grp->lock, flags);
10712 for (i = 0; i < NR_NUMA_HINT_FAULT_STATS * nr_node_ids; i++)
10713 @@ -2276,8 +2286,14 @@ void task_numa_free(struct task_struct *p)
10714 put_numa_group(grp);
10715 }
10716
10717 - p->numa_faults = NULL;
10718 - kfree(numa_faults);
10719 + if (final) {
10720 + p->numa_faults = NULL;
10721 + kfree(numa_faults);
10722 + } else {
10723 + p->total_numa_faults = 0;
10724 + for (i = 0; i < NR_NUMA_HINT_FAULT_STATS * nr_node_ids; i++)
10725 + numa_faults[i] = 0;
10726 + }
10727 }
10728
10729 /*
10730 diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
10731 index 0a16419006f3..4bdb59604526 100644
10732 --- a/kernel/time/ntp.c
10733 +++ b/kernel/time/ntp.c
10734 @@ -42,6 +42,7 @@ static u64 tick_length_base;
10735 #define MAX_TICKADJ 500LL /* usecs */
10736 #define MAX_TICKADJ_SCALED \
10737 (((MAX_TICKADJ * NSEC_PER_USEC) << NTP_SCALE_SHIFT) / NTP_INTERVAL_FREQ)
10738 +#define MAX_TAI_OFFSET 100000
10739
10740 /*
10741 * phase-lock loop variables
10742 @@ -639,7 +640,8 @@ static inline void process_adjtimex_modes(struct timex *txc,
10743 time_constant = max(time_constant, 0l);
10744 }
10745
10746 - if (txc->modes & ADJ_TAI && txc->constant >= 0)
10747 + if (txc->modes & ADJ_TAI &&
10748 + txc->constant >= 0 && txc->constant <= MAX_TAI_OFFSET)
10749 *time_tai = txc->constant;
10750
10751 if (txc->modes & ADJ_OFFSET)
10752 diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c
10753 index 1407ed20ea93..b7c5d230b4b2 100644
10754 --- a/kernel/time/timer_list.c
10755 +++ b/kernel/time/timer_list.c
10756 @@ -299,23 +299,6 @@ static inline void timer_list_header(struct seq_file *m, u64 now)
10757 SEQ_printf(m, "\n");
10758 }
10759
10760 -static int timer_list_show(struct seq_file *m, void *v)
10761 -{
10762 - struct timer_list_iter *iter = v;
10763 -
10764 - if (iter->cpu == -1 && !iter->second_pass)
10765 - timer_list_header(m, iter->now);
10766 - else if (!iter->second_pass)
10767 - print_cpu(m, iter->cpu, iter->now);
10768 -#ifdef CONFIG_GENERIC_CLOCKEVENTS
10769 - else if (iter->cpu == -1 && iter->second_pass)
10770 - timer_list_show_tickdevices_header(m);
10771 - else
10772 - print_tickdevice(m, tick_get_device(iter->cpu), iter->cpu);
10773 -#endif
10774 - return 0;
10775 -}
10776 -
10777 void sysrq_timer_list_show(void)
10778 {
10779 u64 now = ktime_to_ns(ktime_get());
10780 @@ -334,6 +317,24 @@ void sysrq_timer_list_show(void)
10781 return;
10782 }
10783
10784 +#ifdef CONFIG_PROC_FS
10785 +static int timer_list_show(struct seq_file *m, void *v)
10786 +{
10787 + struct timer_list_iter *iter = v;
10788 +
10789 + if (iter->cpu == -1 && !iter->second_pass)
10790 + timer_list_header(m, iter->now);
10791 + else if (!iter->second_pass)
10792 + print_cpu(m, iter->cpu, iter->now);
10793 +#ifdef CONFIG_GENERIC_CLOCKEVENTS
10794 + else if (iter->cpu == -1 && iter->second_pass)
10795 + timer_list_show_tickdevices_header(m);
10796 + else
10797 + print_tickdevice(m, tick_get_device(iter->cpu), iter->cpu);
10798 +#endif
10799 + return 0;
10800 +}
10801 +
10802 static void *move_iter(struct timer_list_iter *iter, loff_t offset)
10803 {
10804 for (; offset; offset--) {
10805 @@ -405,3 +406,4 @@ static int __init init_timer_list_procfs(void)
10806 return 0;
10807 }
10808 __initcall(init_timer_list_procfs);
10809 +#endif
10810 diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
10811 index ea8a2760de24..70b82f4fd417 100644
10812 --- a/kernel/trace/trace.c
10813 +++ b/kernel/trace/trace.c
10814 @@ -5820,11 +5820,15 @@ tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt,
10815 break;
10816 }
10817 #endif
10818 - if (!tr->allocated_snapshot) {
10819 + if (!tr->allocated_snapshot)
10820 + ret = resize_buffer_duplicate_size(&tr->max_buffer,
10821 + &tr->trace_buffer, iter->cpu_file);
10822 + else
10823 ret = alloc_snapshot(tr);
10824 - if (ret < 0)
10825 - break;
10826 - }
10827 +
10828 + if (ret < 0)
10829 + break;
10830 +
10831 local_irq_disable();
10832 /* Now, we're going to swap */
10833 if (iter->cpu_file == RING_BUFFER_ALL_CPUS)
10834 diff --git a/lib/reed_solomon/decode_rs.c b/lib/reed_solomon/decode_rs.c
10835 index 0ec3f257ffdf..a5d313381539 100644
10836 --- a/lib/reed_solomon/decode_rs.c
10837 +++ b/lib/reed_solomon/decode_rs.c
10838 @@ -42,8 +42,18 @@
10839 BUG_ON(pad < 0 || pad >= nn);
10840
10841 /* Does the caller provide the syndrome ? */
10842 - if (s != NULL)
10843 - goto decode;
10844 + if (s != NULL) {
10845 + for (i = 0; i < nroots; i++) {
10846 + /* The syndrome is in index form,
10847 + * so nn represents zero
10848 + */
10849 + if (s[i] != nn)
10850 + goto decode;
10851 + }
10852 +
10853 + /* syndrome is zero, no errors to correct */
10854 + return 0;
10855 + }
10856
10857 /* form the syndromes; i.e., evaluate data(x) at roots of
10858 * g(x) */
10859 @@ -99,9 +109,9 @@
10860 if (no_eras > 0) {
10861 /* Init lambda to be the erasure locator polynomial */
10862 lambda[1] = alpha_to[rs_modnn(rs,
10863 - prim * (nn - 1 - eras_pos[0]))];
10864 + prim * (nn - 1 - (eras_pos[0] + pad)))];
10865 for (i = 1; i < no_eras; i++) {
10866 - u = rs_modnn(rs, prim * (nn - 1 - eras_pos[i]));
10867 + u = rs_modnn(rs, prim * (nn - 1 - (eras_pos[i] + pad)));
10868 for (j = i + 1; j > 0; j--) {
10869 tmp = index_of[lambda[j - 1]];
10870 if (tmp != nn) {
10871 diff --git a/lib/scatterlist.c b/lib/scatterlist.c
10872 index 004fc70fc56a..a854cc39f084 100644
10873 --- a/lib/scatterlist.c
10874 +++ b/lib/scatterlist.c
10875 @@ -496,17 +496,18 @@ static bool sg_miter_get_next_page(struct sg_mapping_iter *miter)
10876 {
10877 if (!miter->__remaining) {
10878 struct scatterlist *sg;
10879 - unsigned long pgoffset;
10880
10881 if (!__sg_page_iter_next(&miter->piter))
10882 return false;
10883
10884 sg = miter->piter.sg;
10885 - pgoffset = miter->piter.sg_pgoffset;
10886
10887 - miter->__offset = pgoffset ? 0 : sg->offset;
10888 + miter->__offset = miter->piter.sg_pgoffset ? 0 : sg->offset;
10889 + miter->piter.sg_pgoffset += miter->__offset >> PAGE_SHIFT;
10890 + miter->__offset &= PAGE_SIZE - 1;
10891 miter->__remaining = sg->offset + sg->length -
10892 - (pgoffset << PAGE_SHIFT) - miter->__offset;
10893 + (miter->piter.sg_pgoffset << PAGE_SHIFT) -
10894 + miter->__offset;
10895 miter->__remaining = min_t(unsigned long, miter->__remaining,
10896 PAGE_SIZE - miter->__offset);
10897 }
10898 diff --git a/lib/string.c b/lib/string.c
10899 index 1cd9757291b1..8f1a2a04e22f 100644
10900 --- a/lib/string.c
10901 +++ b/lib/string.c
10902 @@ -202,7 +202,7 @@ ssize_t strscpy(char *dest, const char *src, size_t count)
10903 while (max >= sizeof(unsigned long)) {
10904 unsigned long c, data;
10905
10906 - c = *(unsigned long *)(src+res);
10907 + c = read_word_at_a_time(src+res);
10908 if (has_zero(c, &data, &constants)) {
10909 data = prep_zero_mask(c, data, &constants);
10910 data = create_zero_mask(data);
10911 diff --git a/mm/kmemleak.c b/mm/kmemleak.c
10912 index 9e66449ed91f..d05133b37b17 100644
10913 --- a/mm/kmemleak.c
10914 +++ b/mm/kmemleak.c
10915 @@ -569,7 +569,7 @@ static struct kmemleak_object *create_object(unsigned long ptr, size_t size,
10916 if (in_irq()) {
10917 object->pid = 0;
10918 strncpy(object->comm, "hardirq", sizeof(object->comm));
10919 - } else if (in_softirq()) {
10920 + } else if (in_serving_softirq()) {
10921 object->pid = 0;
10922 strncpy(object->comm, "softirq", sizeof(object->comm));
10923 } else {
10924 diff --git a/mm/mmu_notifier.c b/mm/mmu_notifier.c
10925 index f4259e496f83..7a66e37efb4d 100644
10926 --- a/mm/mmu_notifier.c
10927 +++ b/mm/mmu_notifier.c
10928 @@ -286,7 +286,7 @@ static int do_mmu_notifier_register(struct mmu_notifier *mn,
10929 * thanks to mm_take_all_locks().
10930 */
10931 spin_lock(&mm->mmu_notifier_mm->lock);
10932 - hlist_add_head(&mn->hlist, &mm->mmu_notifier_mm->list);
10933 + hlist_add_head_rcu(&mn->hlist, &mm->mmu_notifier_mm->list);
10934 spin_unlock(&mm->mmu_notifier_mm->lock);
10935
10936 mm_drop_all_locks(mm);
10937 diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c
10938 index e73fd647065a..f88911cffa1a 100644
10939 --- a/net/9p/trans_virtio.c
10940 +++ b/net/9p/trans_virtio.c
10941 @@ -764,10 +764,16 @@ static struct p9_trans_module p9_virtio_trans = {
10942 /* The standard init function */
10943 static int __init p9_virtio_init(void)
10944 {
10945 + int rc;
10946 +
10947 INIT_LIST_HEAD(&virtio_chan_list);
10948
10949 v9fs_register_trans(&p9_virtio_trans);
10950 - return register_virtio_driver(&p9_virtio_drv);
10951 + rc = register_virtio_driver(&p9_virtio_drv);
10952 + if (rc)
10953 + v9fs_unregister_trans(&p9_virtio_trans);
10954 +
10955 + return rc;
10956 }
10957
10958 static void __exit p9_virtio_cleanup(void)
10959 diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
10960 index af4a02ad8503..1fab9bcf535d 100644
10961 --- a/net/batman-adv/translation-table.c
10962 +++ b/net/batman-adv/translation-table.c
10963 @@ -3700,6 +3700,8 @@ static void batadv_tt_purge(struct work_struct *work)
10964
10965 void batadv_tt_free(struct batadv_priv *bat_priv)
10966 {
10967 + batadv_tvlv_handler_unregister(bat_priv, BATADV_TVLV_ROAM, 1);
10968 +
10969 batadv_tvlv_container_unregister(bat_priv, BATADV_TVLV_TT, 1);
10970 batadv_tvlv_handler_unregister(bat_priv, BATADV_TVLV_TT, 1);
10971
10972 diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c
10973 index de7b82ece499..21096c882223 100644
10974 --- a/net/bluetooth/6lowpan.c
10975 +++ b/net/bluetooth/6lowpan.c
10976 @@ -187,10 +187,16 @@ static inline struct lowpan_peer *peer_lookup_dst(struct lowpan_btle_dev *dev,
10977 }
10978
10979 if (!rt) {
10980 - nexthop = &lowpan_cb(skb)->gw;
10981 -
10982 - if (ipv6_addr_any(nexthop))
10983 - return NULL;
10984 + if (ipv6_addr_any(&lowpan_cb(skb)->gw)) {
10985 + /* There is neither route nor gateway,
10986 + * probably the destination is a direct peer.
10987 + */
10988 + nexthop = daddr;
10989 + } else {
10990 + /* There is a known gateway
10991 + */
10992 + nexthop = &lowpan_cb(skb)->gw;
10993 + }
10994 } else {
10995 nexthop = rt6_nexthop(rt, daddr);
10996
10997 diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
10998 index 6f78489fdb13..163a239bda91 100644
10999 --- a/net/bluetooth/hci_event.c
11000 +++ b/net/bluetooth/hci_event.c
11001 @@ -5089,6 +5089,11 @@ static void hci_le_remote_conn_param_req_evt(struct hci_dev *hdev,
11002 return send_conn_param_neg_reply(hdev, handle,
11003 HCI_ERROR_UNKNOWN_CONN_ID);
11004
11005 + if (min < hcon->le_conn_min_interval ||
11006 + max > hcon->le_conn_max_interval)
11007 + return send_conn_param_neg_reply(hdev, handle,
11008 + HCI_ERROR_INVALID_LL_PARAMS);
11009 +
11010 if (hci_check_conn_params(min, max, latency, timeout))
11011 return send_conn_param_neg_reply(hdev, handle,
11012 HCI_ERROR_INVALID_LL_PARAMS);
11013 diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
11014 index ec9b5d159591..4912e80dacef 100644
11015 --- a/net/bluetooth/l2cap_core.c
11016 +++ b/net/bluetooth/l2cap_core.c
11017 @@ -4374,6 +4374,12 @@ static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn,
11018
11019 l2cap_chan_lock(chan);
11020
11021 + if (chan->state != BT_DISCONN) {
11022 + l2cap_chan_unlock(chan);
11023 + mutex_unlock(&conn->chan_lock);
11024 + return 0;
11025 + }
11026 +
11027 l2cap_chan_hold(chan);
11028 l2cap_chan_del(chan, 0);
11029
11030 @@ -5271,7 +5277,14 @@ static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
11031
11032 memset(&rsp, 0, sizeof(rsp));
11033
11034 - err = hci_check_conn_params(min, max, latency, to_multiplier);
11035 + if (min < hcon->le_conn_min_interval ||
11036 + max > hcon->le_conn_max_interval) {
11037 + BT_DBG("requested connection interval exceeds current bounds.");
11038 + err = -EINVAL;
11039 + } else {
11040 + err = hci_check_conn_params(min, max, latency, to_multiplier);
11041 + }
11042 +
11043 if (err)
11044 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
11045 else
11046 diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
11047 index 1abfbcd8090a..6670b7ffc200 100644
11048 --- a/net/bluetooth/smp.c
11049 +++ b/net/bluetooth/smp.c
11050 @@ -2514,6 +2514,19 @@ static int smp_cmd_ident_addr_info(struct l2cap_conn *conn,
11051 goto distribute;
11052 }
11053
11054 + /* Drop IRK if peer is using identity address during pairing but is
11055 + * providing different address as identity information.
11056 + *
11057 + * Microsoft Surface Precision Mouse is known to have this bug.
11058 + */
11059 + if (hci_is_identity_address(&hcon->dst, hcon->dst_type) &&
11060 + (bacmp(&info->bdaddr, &hcon->dst) ||
11061 + info->addr_type != hcon->dst_type)) {
11062 + bt_dev_err(hcon->hdev,
11063 + "ignoring IRK with invalid identity address");
11064 + goto distribute;
11065 + }
11066 +
11067 bacpy(&smp->id_addr, &info->bdaddr);
11068 smp->id_addr_type = info->addr_type;
11069
11070 diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
11071 index 964ffff90432..3626174456b7 100644
11072 --- a/net/bridge/br_multicast.c
11073 +++ b/net/bridge/br_multicast.c
11074 @@ -1036,6 +1036,7 @@ static int br_ip4_multicast_igmp3_report(struct net_bridge *br,
11075 int type;
11076 int err = 0;
11077 __be32 group;
11078 + u16 nsrcs;
11079
11080 ih = igmpv3_report_hdr(skb);
11081 num = ntohs(ih->ngrec);
11082 @@ -1049,8 +1050,9 @@ static int br_ip4_multicast_igmp3_report(struct net_bridge *br,
11083 grec = (void *)(skb->data + len - sizeof(*grec));
11084 group = grec->grec_mca;
11085 type = grec->grec_type;
11086 + nsrcs = ntohs(grec->grec_nsrcs);
11087
11088 - len += ntohs(grec->grec_nsrcs) * 4;
11089 + len += nsrcs * 4;
11090 if (!pskb_may_pull(skb, len))
11091 return -EINVAL;
11092
11093 @@ -1070,7 +1072,7 @@ static int br_ip4_multicast_igmp3_report(struct net_bridge *br,
11094
11095 if ((type == IGMPV3_CHANGE_TO_INCLUDE ||
11096 type == IGMPV3_MODE_IS_INCLUDE) &&
11097 - ntohs(grec->grec_nsrcs) == 0) {
11098 + nsrcs == 0) {
11099 br_ip4_multicast_leave_group(br, port, group, vid);
11100 } else {
11101 err = br_ip4_multicast_add_group(br, port, group, vid);
11102 @@ -1103,23 +1105,26 @@ static int br_ip6_multicast_mld2_report(struct net_bridge *br,
11103 len = skb_transport_offset(skb) + sizeof(*icmp6h);
11104
11105 for (i = 0; i < num; i++) {
11106 - __be16 *nsrcs, _nsrcs;
11107 -
11108 - nsrcs = skb_header_pointer(skb,
11109 - len + offsetof(struct mld2_grec,
11110 - grec_nsrcs),
11111 - sizeof(_nsrcs), &_nsrcs);
11112 - if (!nsrcs)
11113 + __be16 *_nsrcs, __nsrcs;
11114 + u16 nsrcs;
11115 +
11116 + _nsrcs = skb_header_pointer(skb,
11117 + len + offsetof(struct mld2_grec,
11118 + grec_nsrcs),
11119 + sizeof(__nsrcs), &__nsrcs);
11120 + if (!_nsrcs)
11121 return -EINVAL;
11122
11123 + nsrcs = ntohs(*_nsrcs);
11124 +
11125 if (!pskb_may_pull(skb,
11126 len + sizeof(*grec) +
11127 - sizeof(struct in6_addr) * ntohs(*nsrcs)))
11128 + sizeof(struct in6_addr) * nsrcs))
11129 return -EINVAL;
11130
11131 grec = (struct mld2_grec *)(skb->data + len);
11132 len += sizeof(*grec) +
11133 - sizeof(struct in6_addr) * ntohs(*nsrcs);
11134 + sizeof(struct in6_addr) * nsrcs;
11135
11136 /* We treat these as MLDv1 reports for now. */
11137 switch (grec->grec_type) {
11138 @@ -1137,7 +1142,7 @@ static int br_ip6_multicast_mld2_report(struct net_bridge *br,
11139
11140 if ((grec->grec_type == MLD2_CHANGE_TO_INCLUDE ||
11141 grec->grec_type == MLD2_MODE_IS_INCLUDE) &&
11142 - ntohs(*nsrcs) == 0) {
11143 + nsrcs == 0) {
11144 br_ip6_multicast_leave_group(br, port, &grec->grec_mca,
11145 vid);
11146 } else {
11147 @@ -1374,7 +1379,6 @@ static int br_ip6_multicast_query(struct net_bridge *br,
11148 struct sk_buff *skb,
11149 u16 vid)
11150 {
11151 - const struct ipv6hdr *ip6h = ipv6_hdr(skb);
11152 struct mld_msg *mld;
11153 struct net_bridge_mdb_entry *mp;
11154 struct mld2_query *mld2q;
11155 @@ -1418,7 +1422,7 @@ static int br_ip6_multicast_query(struct net_bridge *br,
11156
11157 if (is_general_query) {
11158 saddr.proto = htons(ETH_P_IPV6);
11159 - saddr.u.ip6 = ip6h->saddr;
11160 + saddr.u.ip6 = ipv6_hdr(skb)->saddr;
11161
11162 br_multicast_query_received(br, port, &br->ip6_other_query,
11163 &saddr, max_delay);
11164 diff --git a/net/bridge/br_stp_bpdu.c b/net/bridge/br_stp_bpdu.c
11165 index 5881fbc114a9..36282eb3492d 100644
11166 --- a/net/bridge/br_stp_bpdu.c
11167 +++ b/net/bridge/br_stp_bpdu.c
11168 @@ -147,7 +147,6 @@ void br_send_tcn_bpdu(struct net_bridge_port *p)
11169 void br_stp_rcv(const struct stp_proto *proto, struct sk_buff *skb,
11170 struct net_device *dev)
11171 {
11172 - const unsigned char *dest = eth_hdr(skb)->h_dest;
11173 struct net_bridge_port *p;
11174 struct net_bridge *br;
11175 const unsigned char *buf;
11176 @@ -176,7 +175,7 @@ void br_stp_rcv(const struct stp_proto *proto, struct sk_buff *skb,
11177 if (p->state == BR_STATE_DISABLED)
11178 goto out;
11179
11180 - if (!ether_addr_equal(dest, br->group_addr))
11181 + if (!ether_addr_equal(eth_hdr(skb)->h_dest, br->group_addr))
11182 goto out;
11183
11184 if (p->flags & BR_BPDU_GUARD) {
11185 diff --git a/net/core/neighbour.c b/net/core/neighbour.c
11186 index 01cdfe85bb09..6e964fec45cf 100644
11187 --- a/net/core/neighbour.c
11188 +++ b/net/core/neighbour.c
11189 @@ -982,6 +982,7 @@ int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
11190
11191 atomic_set(&neigh->probes,
11192 NEIGH_VAR(neigh->parms, UCAST_PROBES));
11193 + neigh_del_timer(neigh);
11194 neigh->nud_state = NUD_INCOMPLETE;
11195 neigh->updated = now;
11196 next = now + max(NEIGH_VAR(neigh->parms, RETRANS_TIME),
11197 @@ -998,6 +999,7 @@ int __neigh_event_send(struct neighbour *neigh, struct sk_buff *skb)
11198 }
11199 } else if (neigh->nud_state & NUD_STALE) {
11200 neigh_dbg(2, "neigh %p is delayed\n", neigh);
11201 + neigh_del_timer(neigh);
11202 neigh->nud_state = NUD_DELAY;
11203 neigh->updated = jiffies;
11204 neigh_add_timer(neigh, jiffies +
11205 diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
11206 index f08f984ebc56..93438113d136 100644
11207 --- a/net/ipv4/devinet.c
11208 +++ b/net/ipv4/devinet.c
11209 @@ -67,6 +67,11 @@
11210
11211 #include "fib_lookup.h"
11212
11213 +#define IPV6ONLY_FLAGS \
11214 + (IFA_F_NODAD | IFA_F_OPTIMISTIC | IFA_F_DADFAILED | \
11215 + IFA_F_HOMEADDRESS | IFA_F_TENTATIVE | \
11216 + IFA_F_MANAGETEMPADDR | IFA_F_STABLE_PRIVACY)
11217 +
11218 static struct ipv4_devconf ipv4_devconf = {
11219 .data = {
11220 [IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 1,
11221 @@ -453,6 +458,9 @@ static int __inet_insert_ifa(struct in_ifaddr *ifa, struct nlmsghdr *nlh,
11222 ifa->ifa_flags &= ~IFA_F_SECONDARY;
11223 last_primary = &in_dev->ifa_list;
11224
11225 + /* Don't set IPv6 only flags to IPv4 addresses */
11226 + ifa->ifa_flags &= ~IPV6ONLY_FLAGS;
11227 +
11228 for (ifap = &in_dev->ifa_list; (ifa1 = *ifap) != NULL;
11229 ifap = &ifa1->ifa_next) {
11230 if (!(ifa1->ifa_flags & IFA_F_SECONDARY) &&
11231 diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
11232 index 780dc6fe899d..02c1736c0b89 100644
11233 --- a/net/ipv4/igmp.c
11234 +++ b/net/ipv4/igmp.c
11235 @@ -1212,12 +1212,8 @@ static void igmpv3_del_delrec(struct in_device *in_dev, struct ip_mc_list *im)
11236 im->interface = pmc->interface;
11237 im->crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
11238 if (im->sfmode == MCAST_INCLUDE) {
11239 - im->tomb = pmc->tomb;
11240 - pmc->tomb = NULL;
11241 -
11242 - im->sources = pmc->sources;
11243 - pmc->sources = NULL;
11244 -
11245 + swap(im->tomb, pmc->tomb);
11246 + swap(im->sources, pmc->sources);
11247 for (psf = im->sources; psf; psf = psf->sf_next)
11248 psf->sf_crcount = im->crcount;
11249 }
11250 diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
11251 index ee2822a411f9..6e25524c6a74 100644
11252 --- a/net/ipv4/tcp.c
11253 +++ b/net/ipv4/tcp.c
11254 @@ -2312,6 +2312,8 @@ int tcp_disconnect(struct sock *sk, int flags)
11255 dst_release(sk->sk_rx_dst);
11256 sk->sk_rx_dst = NULL;
11257 tcp_saved_syn_free(tp);
11258 + tp->bytes_acked = 0;
11259 + tp->bytes_received = 0;
11260
11261 WARN_ON(inet->inet_num && !icsk->icsk_bind_hash);
11262
11263 diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c
11264 index 41f67629ae59..f38b22f54c09 100644
11265 --- a/net/ipv6/ip6mr.c
11266 +++ b/net/ipv6/ip6mr.c
11267 @@ -1668,6 +1668,10 @@ int ip6_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, uns
11268 struct net *net = sock_net(sk);
11269 struct mr6_table *mrt;
11270
11271 + if (sk->sk_type != SOCK_RAW ||
11272 + inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
11273 + return -EOPNOTSUPP;
11274 +
11275 mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT);
11276 if (!mrt)
11277 return -ENOENT;
11278 @@ -1679,9 +1683,6 @@ int ip6_mroute_setsockopt(struct sock *sk, int optname, char __user *optval, uns
11279
11280 switch (optname) {
11281 case MRT6_INIT:
11282 - if (sk->sk_type != SOCK_RAW ||
11283 - inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
11284 - return -EOPNOTSUPP;
11285 if (optlen < sizeof(int))
11286 return -EINVAL;
11287
11288 @@ -1818,6 +1819,10 @@ int ip6_mroute_getsockopt(struct sock *sk, int optname, char __user *optval,
11289 struct net *net = sock_net(sk);
11290 struct mr6_table *mrt;
11291
11292 + if (sk->sk_type != SOCK_RAW ||
11293 + inet_sk(sk)->inet_num != IPPROTO_ICMPV6)
11294 + return -EOPNOTSUPP;
11295 +
11296 mrt = ip6mr_get_table(net, raw6_sk(sk)->ip6mr_table ? : RT6_TABLE_DFLT);
11297 if (!mrt)
11298 return -ENOENT;
11299 diff --git a/net/key/af_key.c b/net/key/af_key.c
11300 index 3ba903ff2bb0..36db179d848e 100644
11301 --- a/net/key/af_key.c
11302 +++ b/net/key/af_key.c
11303 @@ -2463,8 +2463,10 @@ static int key_pol_get_resp(struct sock *sk, struct xfrm_policy *xp, const struc
11304 goto out;
11305 }
11306 err = pfkey_xfrm_policy2msg(out_skb, xp, dir);
11307 - if (err < 0)
11308 + if (err < 0) {
11309 + kfree_skb(out_skb);
11310 goto out;
11311 + }
11312
11313 out_hdr = (struct sadb_msg *) out_skb->data;
11314 out_hdr->sadb_msg_version = hdr->sadb_msg_version;
11315 @@ -2717,8 +2719,10 @@ static int dump_sp(struct xfrm_policy *xp, int dir, int count, void *ptr)
11316 return PTR_ERR(out_skb);
11317
11318 err = pfkey_xfrm_policy2msg(out_skb, xp, dir);
11319 - if (err < 0)
11320 + if (err < 0) {
11321 + kfree_skb(out_skb);
11322 return err;
11323 + }
11324
11325 out_hdr = (struct sadb_msg *) out_skb->data;
11326 out_hdr->sadb_msg_version = pfk->dump.msg_version;
11327 diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c
11328 index 046ae1caecea..e5888983bec4 100644
11329 --- a/net/netrom/af_netrom.c
11330 +++ b/net/netrom/af_netrom.c
11331 @@ -870,7 +870,7 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev)
11332 unsigned short frametype, flags, window, timeout;
11333 int ret;
11334
11335 - skb->sk = NULL; /* Initially we don't know who it's for */
11336 + skb_orphan(skb);
11337
11338 /*
11339 * skb->data points to the netrom frame start
11340 @@ -968,7 +968,9 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev)
11341
11342 window = skb->data[20];
11343
11344 + sock_hold(make);
11345 skb->sk = make;
11346 + skb->destructor = sock_efree;
11347 make->sk_state = TCP_ESTABLISHED;
11348
11349 /* Fill in his circuit details */
11350 diff --git a/net/nfc/nci/data.c b/net/nfc/nci/data.c
11351 index dbd24254412a..d20383779710 100644
11352 --- a/net/nfc/nci/data.c
11353 +++ b/net/nfc/nci/data.c
11354 @@ -119,7 +119,7 @@ static int nci_queue_tx_data_frags(struct nci_dev *ndev,
11355 conn_info = nci_get_conn_info_by_conn_id(ndev, conn_id);
11356 if (!conn_info) {
11357 rc = -EPROTO;
11358 - goto free_exit;
11359 + goto exit;
11360 }
11361
11362 __skb_queue_head_init(&frags_q);
11363 diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c
11364 index 05d9f42fc309..7135aff3946d 100644
11365 --- a/net/openvswitch/actions.c
11366 +++ b/net/openvswitch/actions.c
11367 @@ -150,8 +150,7 @@ static void update_ethertype(struct sk_buff *skb, struct ethhdr *hdr,
11368 if (skb->ip_summed == CHECKSUM_COMPLETE) {
11369 __be16 diff[] = { ~(hdr->h_proto), ethertype };
11370
11371 - skb->csum = ~csum_partial((char *)diff, sizeof(diff),
11372 - ~skb->csum);
11373 + skb->csum = csum_partial((char *)diff, sizeof(diff), skb->csum);
11374 }
11375
11376 hdr->h_proto = ethertype;
11377 @@ -239,8 +238,7 @@ static int set_mpls(struct sk_buff *skb, struct sw_flow_key *flow_key,
11378 if (skb->ip_summed == CHECKSUM_COMPLETE) {
11379 __be32 diff[] = { ~(stack->label_stack_entry), lse };
11380
11381 - skb->csum = ~csum_partial((char *)diff, sizeof(diff),
11382 - ~skb->csum);
11383 + skb->csum = csum_partial((char *)diff, sizeof(diff), skb->csum);
11384 }
11385
11386 stack->label_stack_entry = lse;
11387 diff --git a/net/rxrpc/af_rxrpc.c b/net/rxrpc/af_rxrpc.c
11388 index 2d59c9be40e1..222c566cf25d 100644
11389 --- a/net/rxrpc/af_rxrpc.c
11390 +++ b/net/rxrpc/af_rxrpc.c
11391 @@ -405,6 +405,7 @@ static int rxrpc_sendmsg(struct socket *sock, struct msghdr *m, size_t len)
11392
11393 switch (rx->sk.sk_state) {
11394 case RXRPC_UNBOUND:
11395 + case RXRPC_CLIENT_UNBOUND:
11396 rx->srx.srx_family = AF_RXRPC;
11397 rx->srx.srx_service = 0;
11398 rx->srx.transport_type = SOCK_DGRAM;
11399 @@ -429,10 +430,9 @@ static int rxrpc_sendmsg(struct socket *sock, struct msghdr *m, size_t len)
11400 }
11401
11402 rx->local = local;
11403 - rx->sk.sk_state = RXRPC_CLIENT_UNBOUND;
11404 + rx->sk.sk_state = RXRPC_CLIENT_BOUND;
11405 /* Fall through */
11406
11407 - case RXRPC_CLIENT_UNBOUND:
11408 case RXRPC_CLIENT_BOUND:
11409 if (!m->msg_name &&
11410 test_bit(RXRPC_SOCK_CONNECTED, &rx->flags)) {
11411 diff --git a/net/xfrm/Kconfig b/net/xfrm/Kconfig
11412 index bda1a13628a8..c09336b5a028 100644
11413 --- a/net/xfrm/Kconfig
11414 +++ b/net/xfrm/Kconfig
11415 @@ -9,6 +9,8 @@ config XFRM_ALGO
11416 tristate
11417 select XFRM
11418 select CRYPTO
11419 + select CRYPTO_HASH
11420 + select CRYPTO_BLKCIPHER
11421
11422 config XFRM_USER
11423 tristate "Transformation user configuration interface"
11424 diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
11425 index ca5c79bfd9a5..f3e9d500fa5a 100644
11426 --- a/net/xfrm/xfrm_user.c
11427 +++ b/net/xfrm/xfrm_user.c
11428 @@ -150,6 +150,25 @@ static int verify_newsa_info(struct xfrm_usersa_info *p,
11429
11430 err = -EINVAL;
11431 switch (p->family) {
11432 + case AF_INET:
11433 + break;
11434 +
11435 + case AF_INET6:
11436 +#if IS_ENABLED(CONFIG_IPV6)
11437 + break;
11438 +#else
11439 + err = -EAFNOSUPPORT;
11440 + goto out;
11441 +#endif
11442 +
11443 + default:
11444 + goto out;
11445 + }
11446 +
11447 + switch (p->sel.family) {
11448 + case AF_UNSPEC:
11449 + break;
11450 +
11451 case AF_INET:
11452 if (p->sel.prefixlen_d > 32 || p->sel.prefixlen_s > 32)
11453 goto out;
11454 diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
11455 index 1f22a186c18c..2c8b8c662da5 100644
11456 --- a/scripts/kallsyms.c
11457 +++ b/scripts/kallsyms.c
11458 @@ -161,6 +161,9 @@ static int read_symbol(FILE *in, struct sym_entry *s)
11459 /* exclude debugging symbols */
11460 else if (stype == 'N')
11461 return -1;
11462 + /* exclude s390 kasan local symbols */
11463 + else if (!strncmp(sym, ".LASANPC", 8))
11464 + return -1;
11465
11466 /* include the type field in the symbol name, so that it gets
11467 * compressed together */
11468 diff --git a/scripts/recordmcount.h b/scripts/recordmcount.h
11469 index b9897e2be404..04151ede8043 100644
11470 --- a/scripts/recordmcount.h
11471 +++ b/scripts/recordmcount.h
11472 @@ -326,7 +326,8 @@ static uint_t *sift_rel_mcount(uint_t *mlocp,
11473 if (!mcountsym)
11474 mcountsym = get_mcountsym(sym0, relp, str0);
11475
11476 - if (mcountsym == Elf_r_sym(relp) && !is_fake_mcount(relp)) {
11477 + if (mcountsym && mcountsym == Elf_r_sym(relp) &&
11478 + !is_fake_mcount(relp)) {
11479 uint_t const addend =
11480 _w(_w(relp->r_offset) - recval + mcount_adjust);
11481 mrelp->r_offset = _w(offbase
11482 diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
11483 index bc6d371031fc..130e22742137 100644
11484 --- a/sound/core/seq/seq_clientmgr.c
11485 +++ b/sound/core/seq/seq_clientmgr.c
11486 @@ -1001,7 +1001,7 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
11487 {
11488 struct snd_seq_client *client = file->private_data;
11489 int written = 0, len;
11490 - int err;
11491 + int err, handled;
11492 struct snd_seq_event event;
11493
11494 if (!(snd_seq_file_flags(file) & SNDRV_SEQ_LFLG_OUTPUT))
11495 @@ -1014,6 +1014,8 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
11496 if (!client->accept_output || client->pool == NULL)
11497 return -ENXIO;
11498
11499 + repeat:
11500 + handled = 0;
11501 /* allocate the pool now if the pool is not allocated yet */
11502 mutex_lock(&client->ioctl_mutex);
11503 if (client->pool->size > 0 && !snd_seq_write_pool_allocated(client)) {
11504 @@ -1073,12 +1075,19 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
11505 0, 0, &client->ioctl_mutex);
11506 if (err < 0)
11507 break;
11508 + handled++;
11509
11510 __skip_event:
11511 /* Update pointers and counts */
11512 count -= len;
11513 buf += len;
11514 written += len;
11515 +
11516 + /* let's have a coffee break if too many events are queued */
11517 + if (++handled >= 200) {
11518 + mutex_unlock(&client->ioctl_mutex);
11519 + goto repeat;
11520 + }
11521 }
11522
11523 out:
11524 diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
11525 index 447b3a8a83c3..df66969b124d 100644
11526 --- a/sound/pci/hda/patch_conexant.c
11527 +++ b/sound/pci/hda/patch_conexant.c
11528 @@ -1011,6 +1011,7 @@ static int patch_conexant_auto(struct hda_codec *codec)
11529 */
11530
11531 static const struct hda_device_id snd_hda_id_conexant[] = {
11532 + HDA_CODEC_ENTRY(0x14f11f86, "CX8070", patch_conexant_auto),
11533 HDA_CODEC_ENTRY(0x14f12008, "CX8200", patch_conexant_auto),
11534 HDA_CODEC_ENTRY(0x14f15045, "CX20549 (Venice)", patch_conexant_auto),
11535 HDA_CODEC_ENTRY(0x14f15047, "CX20551 (Waikiki)", patch_conexant_auto),
11536 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
11537 index 95fb213cf94b..04d2dc7097a1 100644
11538 --- a/sound/pci/hda/patch_realtek.c
11539 +++ b/sound/pci/hda/patch_realtek.c
11540 @@ -7272,6 +7272,11 @@ static const struct snd_hda_pin_quirk alc662_pin_fixup_tbl[] = {
11541 {0x18, 0x01a19030},
11542 {0x1a, 0x01813040},
11543 {0x21, 0x01014020}),
11544 + SND_HDA_PIN_QUIRK(0x10ec0867, 0x1028, "Dell", ALC891_FIXUP_DELL_MIC_NO_PRESENCE,
11545 + {0x16, 0x01813030},
11546 + {0x17, 0x02211010},
11547 + {0x18, 0x01a19040},
11548 + {0x21, 0x01014020}),
11549 SND_HDA_PIN_QUIRK(0x10ec0662, 0x1028, "Dell", ALC662_FIXUP_DELL_MIC_NO_PRESENCE,
11550 {0x14, 0x01014010},
11551 {0x18, 0x01a19020},
11552 diff --git a/sound/usb/line6/podhd.c b/sound/usb/line6/podhd.c
11553 index c0b6733c0623..8c4375bf34ab 100644
11554 --- a/sound/usb/line6/podhd.c
11555 +++ b/sound/usb/line6/podhd.c
11556 @@ -385,7 +385,7 @@ static const struct line6_properties podhd_properties_table[] = {
11557 .name = "POD HD500",
11558 .capabilities = LINE6_CAP_PCM
11559 | LINE6_CAP_HWMON,
11560 - .altsetting = 1,
11561 + .altsetting = 0,
11562 .ep_ctrl_r = 0x81,
11563 .ep_ctrl_w = 0x01,
11564 .ep_audio_r = 0x86,
11565 diff --git a/tools/iio/iio_utils.c b/tools/iio/iio_utils.c
11566 index 7a6d61c6c012..55272fef3b50 100644
11567 --- a/tools/iio/iio_utils.c
11568 +++ b/tools/iio/iio_utils.c
11569 @@ -159,9 +159,9 @@ int iioutils_get_type(unsigned *is_signed, unsigned *bytes, unsigned *bits_used,
11570 *be = (endianchar == 'b');
11571 *bytes = padint / 8;
11572 if (*bits_used == 64)
11573 - *mask = ~0;
11574 + *mask = ~(0ULL);
11575 else
11576 - *mask = (1ULL << *bits_used) - 1;
11577 + *mask = (1ULL << *bits_used) - 1ULL;
11578
11579 *is_signed = (signchar == 's');
11580 if (fclose(sysfsfp)) {
11581 diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/cs-etm.c
11582 index 47d584da5819..f6cff278aa5d 100644
11583 --- a/tools/perf/arch/arm/util/cs-etm.c
11584 +++ b/tools/perf/arch/arm/util/cs-etm.c
11585 @@ -41,6 +41,8 @@ struct cs_etm_recording {
11586 struct auxtrace_record itr;
11587 struct perf_pmu *cs_etm_pmu;
11588 struct perf_evlist *evlist;
11589 + int wrapped_cnt;
11590 + bool *wrapped;
11591 bool snapshot_mode;
11592 size_t snapshot_size;
11593 };
11594 @@ -458,16 +460,131 @@ static int cs_etm_info_fill(struct auxtrace_record *itr,
11595 return 0;
11596 }
11597
11598 -static int cs_etm_find_snapshot(struct auxtrace_record *itr __maybe_unused,
11599 +static int cs_etm_alloc_wrapped_array(struct cs_etm_recording *ptr, int idx)
11600 +{
11601 + bool *wrapped;
11602 + int cnt = ptr->wrapped_cnt;
11603 +
11604 + /* Make @ptr->wrapped as big as @idx */
11605 + while (cnt <= idx)
11606 + cnt++;
11607 +
11608 + /*
11609 + * Free'ed in cs_etm_recording_free(). Using realloc() to avoid
11610 + * cross compilation problems where the host's system supports
11611 + * reallocarray() but not the target.
11612 + */
11613 + wrapped = realloc(ptr->wrapped, cnt * sizeof(bool));
11614 + if (!wrapped)
11615 + return -ENOMEM;
11616 +
11617 + wrapped[cnt - 1] = false;
11618 + ptr->wrapped_cnt = cnt;
11619 + ptr->wrapped = wrapped;
11620 +
11621 + return 0;
11622 +}
11623 +
11624 +static bool cs_etm_buffer_has_wrapped(unsigned char *buffer,
11625 + size_t buffer_size, u64 head)
11626 +{
11627 + u64 i, watermark;
11628 + u64 *buf = (u64 *)buffer;
11629 + size_t buf_size = buffer_size;
11630 +
11631 + /*
11632 + * We want to look the very last 512 byte (chosen arbitrarily) in
11633 + * the ring buffer.
11634 + */
11635 + watermark = buf_size - 512;
11636 +
11637 + /*
11638 + * @head is continuously increasing - if its value is equal or greater
11639 + * than the size of the ring buffer, it has wrapped around.
11640 + */
11641 + if (head >= buffer_size)
11642 + return true;
11643 +
11644 + /*
11645 + * The value of @head is somewhere within the size of the ring buffer.
11646 + * This can be that there hasn't been enough data to fill the ring
11647 + * buffer yet or the trace time was so long that @head has numerically
11648 + * wrapped around. To find we need to check if we have data at the very
11649 + * end of the ring buffer. We can reliably do this because mmap'ed
11650 + * pages are zeroed out and there is a fresh mapping with every new
11651 + * session.
11652 + */
11653 +
11654 + /* @head is less than 512 byte from the end of the ring buffer */
11655 + if (head > watermark)
11656 + watermark = head;
11657 +
11658 + /*
11659 + * Speed things up by using 64 bit transactions (see "u64 *buf" above)
11660 + */
11661 + watermark >>= 3;
11662 + buf_size >>= 3;
11663 +
11664 + /*
11665 + * If we find trace data at the end of the ring buffer, @head has
11666 + * been there and has numerically wrapped around at least once.
11667 + */
11668 + for (i = watermark; i < buf_size; i++)
11669 + if (buf[i])
11670 + return true;
11671 +
11672 + return false;
11673 +}
11674 +
11675 +static int cs_etm_find_snapshot(struct auxtrace_record *itr,
11676 int idx, struct auxtrace_mmap *mm,
11677 - unsigned char *data __maybe_unused,
11678 + unsigned char *data,
11679 u64 *head, u64 *old)
11680 {
11681 + int err;
11682 + bool wrapped;
11683 + struct cs_etm_recording *ptr =
11684 + container_of(itr, struct cs_etm_recording, itr);
11685 +
11686 + /*
11687 + * Allocate memory to keep track of wrapping if this is the first
11688 + * time we deal with this *mm.
11689 + */
11690 + if (idx >= ptr->wrapped_cnt) {
11691 + err = cs_etm_alloc_wrapped_array(ptr, idx);
11692 + if (err)
11693 + return err;
11694 + }
11695 +
11696 + /*
11697 + * Check to see if *head has wrapped around. If it hasn't only the
11698 + * amount of data between *head and *old is snapshot'ed to avoid
11699 + * bloating the perf.data file with zeros. But as soon as *head has
11700 + * wrapped around the entire size of the AUX ring buffer it taken.
11701 + */
11702 + wrapped = ptr->wrapped[idx];
11703 + if (!wrapped && cs_etm_buffer_has_wrapped(data, mm->len, *head)) {
11704 + wrapped = true;
11705 + ptr->wrapped[idx] = true;
11706 + }
11707 +
11708 pr_debug3("%s: mmap index %d old head %zu new head %zu size %zu\n",
11709 __func__, idx, (size_t)*old, (size_t)*head, mm->len);
11710
11711 - *old = *head;
11712 - *head += mm->len;
11713 + /* No wrap has occurred, we can just use *head and *old. */
11714 + if (!wrapped)
11715 + return 0;
11716 +
11717 + /*
11718 + * *head has wrapped around - adjust *head and *old to pickup the
11719 + * entire content of the AUX buffer.
11720 + */
11721 + if (*head >= mm->len) {
11722 + *old = *head - mm->len;
11723 + } else {
11724 + *head += mm->len;
11725 + *old = *head - mm->len;
11726 + }
11727
11728 return 0;
11729 }
11730 @@ -508,6 +625,8 @@ static void cs_etm_recording_free(struct auxtrace_record *itr)
11731 {
11732 struct cs_etm_recording *ptr =
11733 container_of(itr, struct cs_etm_recording, itr);
11734 +
11735 + zfree(&ptr->wrapped);
11736 free(ptr);
11737 }
11738
11739 diff --git a/tools/perf/perf.h b/tools/perf/perf.h
11740 index 8f8d895d5b74..3b9d56125ee2 100644
11741 --- a/tools/perf/perf.h
11742 +++ b/tools/perf/perf.h
11743 @@ -23,7 +23,7 @@ static inline unsigned long long rdclock(void)
11744 }
11745
11746 #ifndef MAX_NR_CPUS
11747 -#define MAX_NR_CPUS 1024
11748 +#define MAX_NR_CPUS 2048
11749 #endif
11750
11751 extern const char *input_name;
11752 diff --git a/tools/perf/tests/mmap-thread-lookup.c b/tools/perf/tests/mmap-thread-lookup.c
11753 index 0c5ce44f723f..e5d6e6584001 100644
11754 --- a/tools/perf/tests/mmap-thread-lookup.c
11755 +++ b/tools/perf/tests/mmap-thread-lookup.c
11756 @@ -49,7 +49,7 @@ static void *thread_fn(void *arg)
11757 {
11758 struct thread_data *td = arg;
11759 ssize_t ret;
11760 - int go;
11761 + int go = 0;
11762
11763 if (thread_init(td))
11764 return NULL;
11765 diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c
11766 index aa9276bfe3e9..9134a0c3e99d 100644
11767 --- a/tools/perf/tests/parse-events.c
11768 +++ b/tools/perf/tests/parse-events.c
11769 @@ -12,6 +12,32 @@
11770 #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \
11771 PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
11772
11773 +#if defined(__s390x__)
11774 +/* Return true if kvm module is available and loaded. Test this
11775 + * and retun success when trace point kvm_s390_create_vm
11776 + * exists. Otherwise this test always fails.
11777 + */
11778 +static bool kvm_s390_create_vm_valid(void)
11779 +{
11780 + char *eventfile;
11781 + bool rc = false;
11782 +
11783 + eventfile = get_events_file("kvm-s390");
11784 +
11785 + if (eventfile) {
11786 + DIR *mydir = opendir(eventfile);
11787 +
11788 + if (mydir) {
11789 + rc = true;
11790 + closedir(mydir);
11791 + }
11792 + put_events_file(eventfile);
11793 + }
11794 +
11795 + return rc;
11796 +}
11797 +#endif
11798 +
11799 static int test__checkevent_tracepoint(struct perf_evlist *evlist)
11800 {
11801 struct perf_evsel *evsel = perf_evlist__first(evlist);
11802 @@ -1593,6 +1619,7 @@ static struct evlist_test test__events[] = {
11803 {
11804 .name = "kvm-s390:kvm_s390_create_vm",
11805 .check = test__checkevent_tracepoint,
11806 + .valid = kvm_s390_create_vm_valid,
11807 .id = 100,
11808 },
11809 #endif
11810 diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
11811 index a62f79558146..758d0108c5a5 100644
11812 --- a/tools/perf/util/evsel.c
11813 +++ b/tools/perf/util/evsel.c
11814 @@ -558,6 +558,9 @@ const char *perf_evsel__name(struct perf_evsel *evsel)
11815 {
11816 char bf[128];
11817
11818 + if (!evsel)
11819 + goto out_unknown;
11820 +
11821 if (evsel->name)
11822 return evsel->name;
11823
11824 @@ -594,7 +597,10 @@ const char *perf_evsel__name(struct perf_evsel *evsel)
11825
11826 evsel->name = strdup(bf);
11827
11828 - return evsel->name ?: "unknown";
11829 + if (evsel->name)
11830 + return evsel->name;
11831 +out_unknown:
11832 + return "unknown";
11833 }
11834
11835 const char *perf_evsel__group_name(struct perf_evsel *evsel)
11836 diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
11837 index de9b369d2d2e..283148104ffb 100644
11838 --- a/tools/perf/util/header.c
11839 +++ b/tools/perf/util/header.c
11840 @@ -1008,7 +1008,7 @@ static int build_caches(struct cpu_cache_level caches[], u32 size, u32 *cntp)
11841 return 0;
11842 }
11843
11844 -#define MAX_CACHES 2000
11845 +#define MAX_CACHES (MAX_NR_CPUS * 4)
11846
11847 static int write_cache(int fd, struct perf_header *h __maybe_unused,
11848 struct perf_evlist *evlist __maybe_unused)
11849 diff --git a/tools/power/cpupower/utils/cpufreq-set.c b/tools/power/cpupower/utils/cpufreq-set.c
11850 index 1eef0aed6423..08a405593a79 100644
11851 --- a/tools/power/cpupower/utils/cpufreq-set.c
11852 +++ b/tools/power/cpupower/utils/cpufreq-set.c
11853 @@ -306,6 +306,8 @@ int cmd_freq_set(int argc, char **argv)
11854 bitmask_setbit(cpus_chosen, cpus->cpu);
11855 cpus = cpus->next;
11856 }
11857 + /* Set the last cpu in related cpus list */
11858 + bitmask_setbit(cpus_chosen, cpus->cpu);
11859 cpufreq_put_related_cpus(cpus);
11860 }
11861 }