Magellan Linux

Annotation of /trunk/kernel-alx/patches-4.19/0160-4.19.61-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3439 - (hide annotations) (download)
Fri Aug 2 11:48:06 2019 UTC (4 years, 10 months ago) by niro
File size: 422861 byte(s)
-linux-4.19.61
1 niro 3439 diff --git a/Documentation/atomic_t.txt b/Documentation/atomic_t.txt
2     index 913396ac5824..ed0d814df7e0 100644
3     --- a/Documentation/atomic_t.txt
4     +++ b/Documentation/atomic_t.txt
5     @@ -177,6 +177,9 @@ These helper barriers exist because architectures have varying implicit
6     ordering on their SMP atomic primitives. For example our TSO architectures
7     provide full ordered atomics and these barriers are no-ops.
8    
9     +NOTE: when the atomic RmW ops are fully ordered, they should also imply a
10     +compiler barrier.
11     +
12     Thus:
13    
14     atomic_fetch_add();
15     diff --git a/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt b/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt
16     index 42cd81090a2c..3f3cfc1d8d4d 100644
17     --- a/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt
18     +++ b/Documentation/devicetree/bindings/net/marvell-orion-mdio.txt
19     @@ -16,7 +16,7 @@ Required properties:
20    
21     Optional properties:
22     - interrupts: interrupt line number for the SMI error/done interrupt
23     -- clocks: phandle for up to three required clocks for the MDIO instance
24     +- clocks: phandle for up to four required clocks for the MDIO instance
25    
26     The child nodes of the MDIO driver are the individual PHY devices
27     connected to this MDIO bus. They must have a "reg" property given the
28     diff --git a/Documentation/scheduler/sched-pelt.c b/Documentation/scheduler/sched-pelt.c
29     index e4219139386a..7238b355919c 100644
30     --- a/Documentation/scheduler/sched-pelt.c
31     +++ b/Documentation/scheduler/sched-pelt.c
32     @@ -20,7 +20,8 @@ void calc_runnable_avg_yN_inv(void)
33     int i;
34     unsigned int x;
35    
36     - printf("static const u32 runnable_avg_yN_inv[] = {");
37     + /* To silence -Wunused-but-set-variable warnings. */
38     + printf("static const u32 runnable_avg_yN_inv[] __maybe_unused = {");
39     for (i = 0; i < HALFLIFE; i++) {
40     x = ((1UL<<32)-1)*pow(y, i);
41    
42     diff --git a/Makefile b/Makefile
43     index 5fb79d493012..b16485c580d7 100644
44     --- a/Makefile
45     +++ b/Makefile
46     @@ -1,7 +1,7 @@
47     # SPDX-License-Identifier: GPL-2.0
48     VERSION = 4
49     PATCHLEVEL = 19
50     -SUBLEVEL = 60
51     +SUBLEVEL = 61
52     EXTRAVERSION =
53     NAME = "People's Front"
54    
55     diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
56     index 8790a29d0af4..e3ebece79617 100644
57     --- a/arch/arm64/Kconfig
58     +++ b/arch/arm64/Kconfig
59     @@ -251,7 +251,8 @@ config GENERIC_CALIBRATE_DELAY
60     def_bool y
61    
62     config ZONE_DMA32
63     - def_bool y
64     + bool "Support DMA32 zone" if EXPERT
65     + default y
66    
67     config HAVE_GENERIC_GUP
68     def_bool y
69     diff --git a/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi b/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi
70     index 212e6634c9ba..7398ae8856dc 100644
71     --- a/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi
72     +++ b/arch/arm64/boot/dts/nvidia/tegra210-p2180.dtsi
73     @@ -330,7 +330,8 @@
74     regulator-max-microvolt = <1320000>;
75     enable-gpios = <&pmic 6 GPIO_ACTIVE_HIGH>;
76     regulator-ramp-delay = <80>;
77     - regulator-enable-ramp-delay = <1000>;
78     + regulator-enable-ramp-delay = <2000>;
79     + regulator-settling-time-us = <160>;
80     };
81     };
82     };
83     diff --git a/arch/arm64/boot/dts/nvidia/tegra210.dtsi b/arch/arm64/boot/dts/nvidia/tegra210.dtsi
84     index 3be920efee82..6597c0894137 100644
85     --- a/arch/arm64/boot/dts/nvidia/tegra210.dtsi
86     +++ b/arch/arm64/boot/dts/nvidia/tegra210.dtsi
87     @@ -1119,7 +1119,7 @@
88     compatible = "nvidia,tegra210-agic";
89     #interrupt-cells = <3>;
90     interrupt-controller;
91     - reg = <0x702f9000 0x2000>,
92     + reg = <0x702f9000 0x1000>,
93     <0x702fa000 0x2000>;
94     interrupts = <GIC_SPI 102 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
95     clocks = <&tegra_car TEGRA210_CLK_APE>;
96     diff --git a/arch/arm64/crypto/sha1-ce-glue.c b/arch/arm64/crypto/sha1-ce-glue.c
97     index 17fac2889f56..d8c521c757e8 100644
98     --- a/arch/arm64/crypto/sha1-ce-glue.c
99     +++ b/arch/arm64/crypto/sha1-ce-glue.c
100     @@ -54,7 +54,7 @@ static int sha1_ce_finup(struct shash_desc *desc, const u8 *data,
101     unsigned int len, u8 *out)
102     {
103     struct sha1_ce_state *sctx = shash_desc_ctx(desc);
104     - bool finalize = !sctx->sst.count && !(len % SHA1_BLOCK_SIZE);
105     + bool finalize = !sctx->sst.count && !(len % SHA1_BLOCK_SIZE) && len;
106    
107     if (!may_use_simd())
108     return crypto_sha1_finup(desc, data, len, out);
109     diff --git a/arch/arm64/crypto/sha2-ce-glue.c b/arch/arm64/crypto/sha2-ce-glue.c
110     index 261f5195cab7..c47d1a28ff6b 100644
111     --- a/arch/arm64/crypto/sha2-ce-glue.c
112     +++ b/arch/arm64/crypto/sha2-ce-glue.c
113     @@ -59,7 +59,7 @@ static int sha256_ce_finup(struct shash_desc *desc, const u8 *data,
114     unsigned int len, u8 *out)
115     {
116     struct sha256_ce_state *sctx = shash_desc_ctx(desc);
117     - bool finalize = !sctx->sst.count && !(len % SHA256_BLOCK_SIZE);
118     + bool finalize = !sctx->sst.count && !(len % SHA256_BLOCK_SIZE) && len;
119    
120     if (!may_use_simd()) {
121     if (len)
122     diff --git a/arch/arm64/kernel/acpi.c b/arch/arm64/kernel/acpi.c
123     index ed46dc188b22..970f15c76bac 100644
124     --- a/arch/arm64/kernel/acpi.c
125     +++ b/arch/arm64/kernel/acpi.c
126     @@ -154,10 +154,14 @@ static int __init acpi_fadt_sanity_check(void)
127     */
128     if (table->revision < 5 ||
129     (table->revision == 5 && fadt->minor_revision < 1)) {
130     - pr_err("Unsupported FADT revision %d.%d, should be 5.1+\n",
131     + pr_err(FW_BUG "Unsupported FADT revision %d.%d, should be 5.1+\n",
132     table->revision, fadt->minor_revision);
133     - ret = -EINVAL;
134     - goto out;
135     +
136     + if (!fadt->arm_boot_flags) {
137     + ret = -EINVAL;
138     + goto out;
139     + }
140     + pr_err("FADT has ARM boot flags set, assuming 5.1\n");
141     }
142    
143     if (!(fadt->flags & ACPI_FADT_HW_REDUCED)) {
144     diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
145     index 8556876c9109..5f800384cb9a 100644
146     --- a/arch/arm64/kernel/entry.S
147     +++ b/arch/arm64/kernel/entry.S
148     @@ -824,7 +824,7 @@ el0_dbg:
149     mov x1, x25
150     mov x2, sp
151     bl do_debug_exception
152     - enable_daif
153     + enable_da_f
154     ct_user_exit
155     b ret_to_user
156     el0_inv:
157     @@ -876,7 +876,7 @@ el0_error_naked:
158     enable_dbg
159     mov x0, sp
160     bl do_serror
161     - enable_daif
162     + enable_da_f
163     ct_user_exit
164     b ret_to_user
165     ENDPROC(el0_error)
166     diff --git a/arch/arm64/kernel/image.h b/arch/arm64/kernel/image.h
167     index 8da289dc843a..eff6a564ab80 100644
168     --- a/arch/arm64/kernel/image.h
169     +++ b/arch/arm64/kernel/image.h
170     @@ -73,7 +73,11 @@
171    
172     #ifdef CONFIG_EFI
173    
174     -__efistub_stext_offset = stext - _text;
175     +/*
176     + * Use ABSOLUTE() to avoid ld.lld treating this as a relative symbol:
177     + * https://github.com/ClangBuiltLinux/linux/issues/561
178     + */
179     +__efistub_stext_offset = ABSOLUTE(stext - _text);
180    
181     /*
182     * The EFI stub has its own symbol namespace prefixed by __efistub_, to
183     diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
184     index 774c3e17c798..29d2f425806e 100644
185     --- a/arch/arm64/mm/init.c
186     +++ b/arch/arm64/mm/init.c
187     @@ -233,8 +233,9 @@ static void __init zone_sizes_init(unsigned long min, unsigned long max)
188     {
189     unsigned long max_zone_pfns[MAX_NR_ZONES] = {0};
190    
191     - if (IS_ENABLED(CONFIG_ZONE_DMA32))
192     - max_zone_pfns[ZONE_DMA32] = PFN_DOWN(max_zone_dma_phys());
193     +#ifdef CONFIG_ZONE_DMA32
194     + max_zone_pfns[ZONE_DMA32] = PFN_DOWN(max_zone_dma_phys());
195     +#endif
196     max_zone_pfns[ZONE_NORMAL] = max;
197    
198     free_area_init_nodes(max_zone_pfns);
199     diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile
200     index 3c453a1f1ff1..172801ed35b8 100644
201     --- a/arch/mips/boot/compressed/Makefile
202     +++ b/arch/mips/boot/compressed/Makefile
203     @@ -78,6 +78,8 @@ OBJCOPYFLAGS_piggy.o := --add-section=.image=$(obj)/vmlinux.bin.z \
204     $(obj)/piggy.o: $(obj)/dummy.o $(obj)/vmlinux.bin.z FORCE
205     $(call if_changed,objcopy)
206    
207     +HOSTCFLAGS_calc_vmlinuz_load_addr.o += $(LINUXINCLUDE)
208     +
209     # Calculate the load address of the compressed kernel image
210     hostprogs-y := calc_vmlinuz_load_addr
211    
212     diff --git a/arch/mips/boot/compressed/calc_vmlinuz_load_addr.c b/arch/mips/boot/compressed/calc_vmlinuz_load_addr.c
213     index 542c3ede9722..d14f75ec8273 100644
214     --- a/arch/mips/boot/compressed/calc_vmlinuz_load_addr.c
215     +++ b/arch/mips/boot/compressed/calc_vmlinuz_load_addr.c
216     @@ -13,7 +13,7 @@
217     #include <stdint.h>
218     #include <stdio.h>
219     #include <stdlib.h>
220     -#include "../../../../include/linux/sizes.h"
221     +#include <linux/sizes.h>
222    
223     int main(int argc, char *argv[])
224     {
225     diff --git a/arch/mips/include/asm/mach-ath79/ar933x_uart.h b/arch/mips/include/asm/mach-ath79/ar933x_uart.h
226     index c2917b39966b..bba2c8837951 100644
227     --- a/arch/mips/include/asm/mach-ath79/ar933x_uart.h
228     +++ b/arch/mips/include/asm/mach-ath79/ar933x_uart.h
229     @@ -27,8 +27,8 @@
230     #define AR933X_UART_CS_PARITY_S 0
231     #define AR933X_UART_CS_PARITY_M 0x3
232     #define AR933X_UART_CS_PARITY_NONE 0
233     -#define AR933X_UART_CS_PARITY_ODD 1
234     -#define AR933X_UART_CS_PARITY_EVEN 2
235     +#define AR933X_UART_CS_PARITY_ODD 2
236     +#define AR933X_UART_CS_PARITY_EVEN 3
237     #define AR933X_UART_CS_IF_MODE_S 2
238     #define AR933X_UART_CS_IF_MODE_M 0x3
239     #define AR933X_UART_CS_IF_MODE_NONE 0
240     diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c
241     index 0964c236e3e5..de2998cb189e 100644
242     --- a/arch/parisc/kernel/ptrace.c
243     +++ b/arch/parisc/kernel/ptrace.c
244     @@ -167,6 +167,9 @@ long arch_ptrace(struct task_struct *child, long request,
245     if ((addr & (sizeof(unsigned long)-1)) ||
246     addr >= sizeof(struct pt_regs))
247     break;
248     + if (addr == PT_IAOQ0 || addr == PT_IAOQ1) {
249     + data |= 3; /* ensure userspace privilege */
250     + }
251     if ((addr >= PT_GR1 && addr <= PT_GR31) ||
252     addr == PT_IAOQ0 || addr == PT_IAOQ1 ||
253     (addr >= PT_FR0 && addr <= PT_FR31 + 4) ||
254     @@ -228,16 +231,18 @@ long arch_ptrace(struct task_struct *child, long request,
255    
256     static compat_ulong_t translate_usr_offset(compat_ulong_t offset)
257     {
258     - if (offset < 0)
259     - return sizeof(struct pt_regs);
260     - else if (offset <= 32*4) /* gr[0..31] */
261     - return offset * 2 + 4;
262     - else if (offset <= 32*4+32*8) /* gr[0..31] + fr[0..31] */
263     - return offset + 32*4;
264     - else if (offset < sizeof(struct pt_regs)/2 + 32*4)
265     - return offset * 2 + 4 - 32*8;
266     + compat_ulong_t pos;
267     +
268     + if (offset < 32*4) /* gr[0..31] */
269     + pos = offset * 2 + 4;
270     + else if (offset < 32*4+32*8) /* fr[0] ... fr[31] */
271     + pos = (offset - 32*4) + PT_FR0;
272     + else if (offset < sizeof(struct pt_regs)/2 + 32*4) /* sr[0] ... ipsw */
273     + pos = (offset - 32*4 - 32*8) * 2 + PT_SR0 + 4;
274     else
275     - return sizeof(struct pt_regs);
276     + pos = sizeof(struct pt_regs);
277     +
278     + return pos;
279     }
280    
281     long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
282     @@ -281,9 +286,12 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
283     addr = translate_usr_offset(addr);
284     if (addr >= sizeof(struct pt_regs))
285     break;
286     + if (addr == PT_IAOQ0+4 || addr == PT_IAOQ1+4) {
287     + data |= 3; /* ensure userspace privilege */
288     + }
289     if (addr >= PT_FR0 && addr <= PT_FR31 + 4) {
290     /* Special case, fp regs are 64 bits anyway */
291     - *(__u64 *) ((char *) task_regs(child) + addr) = data;
292     + *(__u32 *) ((char *) task_regs(child) + addr) = data;
293     ret = 0;
294     }
295     else if ((addr >= PT_GR1+4 && addr <= PT_GR31+4) ||
296     @@ -496,7 +504,8 @@ static void set_reg(struct pt_regs *regs, int num, unsigned long val)
297     return;
298     case RI(iaoq[0]):
299     case RI(iaoq[1]):
300     - regs->iaoq[num - RI(iaoq[0])] = val;
301     + /* set 2 lowest bits to ensure userspace privilege: */
302     + regs->iaoq[num - RI(iaoq[0])] = val | 3;
303     return;
304     case RI(sar): regs->sar = val;
305     return;
306     diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
307     index 2d8fc8c9da7a..06cc77813dbb 100644
308     --- a/arch/powerpc/kernel/exceptions-64s.S
309     +++ b/arch/powerpc/kernel/exceptions-64s.S
310     @@ -1745,7 +1745,7 @@ handle_page_fault:
311     addi r3,r1,STACK_FRAME_OVERHEAD
312     bl do_page_fault
313     cmpdi r3,0
314     - beq+ 12f
315     + beq+ ret_from_except_lite
316     bl save_nvgprs
317     mr r5,r3
318     addi r3,r1,STACK_FRAME_OVERHEAD
319     @@ -1760,7 +1760,12 @@ handle_dabr_fault:
320     ld r5,_DSISR(r1)
321     addi r3,r1,STACK_FRAME_OVERHEAD
322     bl do_break
323     -12: b ret_from_except_lite
324     + /*
325     + * do_break() may have changed the NV GPRS while handling a breakpoint.
326     + * If so, we need to restore them with their updated values. Don't use
327     + * ret_from_except_lite here.
328     + */
329     + b ret_from_except
330    
331    
332     #ifdef CONFIG_PPC_BOOK3S_64
333     diff --git a/arch/powerpc/kernel/swsusp_32.S b/arch/powerpc/kernel/swsusp_32.S
334     index 7a919e9a3400..cbdf86228eaa 100644
335     --- a/arch/powerpc/kernel/swsusp_32.S
336     +++ b/arch/powerpc/kernel/swsusp_32.S
337     @@ -25,11 +25,19 @@
338     #define SL_IBAT2 0x48
339     #define SL_DBAT3 0x50
340     #define SL_IBAT3 0x58
341     -#define SL_TB 0x60
342     -#define SL_R2 0x68
343     -#define SL_CR 0x6c
344     -#define SL_LR 0x70
345     -#define SL_R12 0x74 /* r12 to r31 */
346     +#define SL_DBAT4 0x60
347     +#define SL_IBAT4 0x68
348     +#define SL_DBAT5 0x70
349     +#define SL_IBAT5 0x78
350     +#define SL_DBAT6 0x80
351     +#define SL_IBAT6 0x88
352     +#define SL_DBAT7 0x90
353     +#define SL_IBAT7 0x98
354     +#define SL_TB 0xa0
355     +#define SL_R2 0xa8
356     +#define SL_CR 0xac
357     +#define SL_LR 0xb0
358     +#define SL_R12 0xb4 /* r12 to r31 */
359     #define SL_SIZE (SL_R12 + 80)
360    
361     .section .data
362     @@ -114,6 +122,41 @@ _GLOBAL(swsusp_arch_suspend)
363     mfibatl r4,3
364     stw r4,SL_IBAT3+4(r11)
365    
366     +BEGIN_MMU_FTR_SECTION
367     + mfspr r4,SPRN_DBAT4U
368     + stw r4,SL_DBAT4(r11)
369     + mfspr r4,SPRN_DBAT4L
370     + stw r4,SL_DBAT4+4(r11)
371     + mfspr r4,SPRN_DBAT5U
372     + stw r4,SL_DBAT5(r11)
373     + mfspr r4,SPRN_DBAT5L
374     + stw r4,SL_DBAT5+4(r11)
375     + mfspr r4,SPRN_DBAT6U
376     + stw r4,SL_DBAT6(r11)
377     + mfspr r4,SPRN_DBAT6L
378     + stw r4,SL_DBAT6+4(r11)
379     + mfspr r4,SPRN_DBAT7U
380     + stw r4,SL_DBAT7(r11)
381     + mfspr r4,SPRN_DBAT7L
382     + stw r4,SL_DBAT7+4(r11)
383     + mfspr r4,SPRN_IBAT4U
384     + stw r4,SL_IBAT4(r11)
385     + mfspr r4,SPRN_IBAT4L
386     + stw r4,SL_IBAT4+4(r11)
387     + mfspr r4,SPRN_IBAT5U
388     + stw r4,SL_IBAT5(r11)
389     + mfspr r4,SPRN_IBAT5L
390     + stw r4,SL_IBAT5+4(r11)
391     + mfspr r4,SPRN_IBAT6U
392     + stw r4,SL_IBAT6(r11)
393     + mfspr r4,SPRN_IBAT6L
394     + stw r4,SL_IBAT6+4(r11)
395     + mfspr r4,SPRN_IBAT7U
396     + stw r4,SL_IBAT7(r11)
397     + mfspr r4,SPRN_IBAT7L
398     + stw r4,SL_IBAT7+4(r11)
399     +END_MMU_FTR_SECTION_IFSET(MMU_FTR_USE_HIGH_BATS)
400     +
401     #if 0
402     /* Backup various CPU config stuffs */
403     bl __save_cpu_setup
404     @@ -279,27 +322,41 @@ END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
405     mtibatu 3,r4
406     lwz r4,SL_IBAT3+4(r11)
407     mtibatl 3,r4
408     -#endif
409     -
410     BEGIN_MMU_FTR_SECTION
411     - li r4,0
412     + lwz r4,SL_DBAT4(r11)
413     mtspr SPRN_DBAT4U,r4
414     + lwz r4,SL_DBAT4+4(r11)
415     mtspr SPRN_DBAT4L,r4
416     + lwz r4,SL_DBAT5(r11)
417     mtspr SPRN_DBAT5U,r4
418     + lwz r4,SL_DBAT5+4(r11)
419     mtspr SPRN_DBAT5L,r4
420     + lwz r4,SL_DBAT6(r11)
421     mtspr SPRN_DBAT6U,r4
422     + lwz r4,SL_DBAT6+4(r11)
423     mtspr SPRN_DBAT6L,r4
424     + lwz r4,SL_DBAT7(r11)
425     mtspr SPRN_DBAT7U,r4
426     + lwz r4,SL_DBAT7+4(r11)
427     mtspr SPRN_DBAT7L,r4
428     + lwz r4,SL_IBAT4(r11)
429     mtspr SPRN_IBAT4U,r4
430     + lwz r4,SL_IBAT4+4(r11)
431     mtspr SPRN_IBAT4L,r4
432     + lwz r4,SL_IBAT5(r11)
433     mtspr SPRN_IBAT5U,r4
434     + lwz r4,SL_IBAT5+4(r11)
435     mtspr SPRN_IBAT5L,r4
436     + lwz r4,SL_IBAT6(r11)
437     mtspr SPRN_IBAT6U,r4
438     + lwz r4,SL_IBAT6+4(r11)
439     mtspr SPRN_IBAT6L,r4
440     + lwz r4,SL_IBAT7(r11)
441     mtspr SPRN_IBAT7U,r4
442     + lwz r4,SL_IBAT7+4(r11)
443     mtspr SPRN_IBAT7L,r4
444     END_MMU_FTR_SECTION_IFSET(MMU_FTR_USE_HIGH_BATS)
445     +#endif
446    
447     /* Flush all TLBs */
448     lis r4,0x1000
449     diff --git a/arch/powerpc/platforms/powermac/sleep.S b/arch/powerpc/platforms/powermac/sleep.S
450     index f89808b9713d..b0660ef69177 100644
451     --- a/arch/powerpc/platforms/powermac/sleep.S
452     +++ b/arch/powerpc/platforms/powermac/sleep.S
453     @@ -38,10 +38,18 @@
454     #define SL_IBAT2 0x48
455     #define SL_DBAT3 0x50
456     #define SL_IBAT3 0x58
457     -#define SL_TB 0x60
458     -#define SL_R2 0x68
459     -#define SL_CR 0x6c
460     -#define SL_R12 0x70 /* r12 to r31 */
461     +#define SL_DBAT4 0x60
462     +#define SL_IBAT4 0x68
463     +#define SL_DBAT5 0x70
464     +#define SL_IBAT5 0x78
465     +#define SL_DBAT6 0x80
466     +#define SL_IBAT6 0x88
467     +#define SL_DBAT7 0x90
468     +#define SL_IBAT7 0x98
469     +#define SL_TB 0xa0
470     +#define SL_R2 0xa8
471     +#define SL_CR 0xac
472     +#define SL_R12 0xb0 /* r12 to r31 */
473     #define SL_SIZE (SL_R12 + 80)
474    
475     .section .text
476     @@ -126,6 +134,41 @@ _GLOBAL(low_sleep_handler)
477     mfibatl r4,3
478     stw r4,SL_IBAT3+4(r1)
479    
480     +BEGIN_MMU_FTR_SECTION
481     + mfspr r4,SPRN_DBAT4U
482     + stw r4,SL_DBAT4(r1)
483     + mfspr r4,SPRN_DBAT4L
484     + stw r4,SL_DBAT4+4(r1)
485     + mfspr r4,SPRN_DBAT5U
486     + stw r4,SL_DBAT5(r1)
487     + mfspr r4,SPRN_DBAT5L
488     + stw r4,SL_DBAT5+4(r1)
489     + mfspr r4,SPRN_DBAT6U
490     + stw r4,SL_DBAT6(r1)
491     + mfspr r4,SPRN_DBAT6L
492     + stw r4,SL_DBAT6+4(r1)
493     + mfspr r4,SPRN_DBAT7U
494     + stw r4,SL_DBAT7(r1)
495     + mfspr r4,SPRN_DBAT7L
496     + stw r4,SL_DBAT7+4(r1)
497     + mfspr r4,SPRN_IBAT4U
498     + stw r4,SL_IBAT4(r1)
499     + mfspr r4,SPRN_IBAT4L
500     + stw r4,SL_IBAT4+4(r1)
501     + mfspr r4,SPRN_IBAT5U
502     + stw r4,SL_IBAT5(r1)
503     + mfspr r4,SPRN_IBAT5L
504     + stw r4,SL_IBAT5+4(r1)
505     + mfspr r4,SPRN_IBAT6U
506     + stw r4,SL_IBAT6(r1)
507     + mfspr r4,SPRN_IBAT6L
508     + stw r4,SL_IBAT6+4(r1)
509     + mfspr r4,SPRN_IBAT7U
510     + stw r4,SL_IBAT7(r1)
511     + mfspr r4,SPRN_IBAT7L
512     + stw r4,SL_IBAT7+4(r1)
513     +END_MMU_FTR_SECTION_IFSET(MMU_FTR_USE_HIGH_BATS)
514     +
515     /* Backup various CPU config stuffs */
516     bl __save_cpu_setup
517    
518     @@ -326,22 +369,37 @@ grackle_wake_up:
519     mtibatl 3,r4
520    
521     BEGIN_MMU_FTR_SECTION
522     - li r4,0
523     + lwz r4,SL_DBAT4(r1)
524     mtspr SPRN_DBAT4U,r4
525     + lwz r4,SL_DBAT4+4(r1)
526     mtspr SPRN_DBAT4L,r4
527     + lwz r4,SL_DBAT5(r1)
528     mtspr SPRN_DBAT5U,r4
529     + lwz r4,SL_DBAT5+4(r1)
530     mtspr SPRN_DBAT5L,r4
531     + lwz r4,SL_DBAT6(r1)
532     mtspr SPRN_DBAT6U,r4
533     + lwz r4,SL_DBAT6+4(r1)
534     mtspr SPRN_DBAT6L,r4
535     + lwz r4,SL_DBAT7(r1)
536     mtspr SPRN_DBAT7U,r4
537     + lwz r4,SL_DBAT7+4(r1)
538     mtspr SPRN_DBAT7L,r4
539     + lwz r4,SL_IBAT4(r1)
540     mtspr SPRN_IBAT4U,r4
541     + lwz r4,SL_IBAT4+4(r1)
542     mtspr SPRN_IBAT4L,r4
543     + lwz r4,SL_IBAT5(r1)
544     mtspr SPRN_IBAT5U,r4
545     + lwz r4,SL_IBAT5+4(r1)
546     mtspr SPRN_IBAT5L,r4
547     + lwz r4,SL_IBAT6(r1)
548     mtspr SPRN_IBAT6U,r4
549     + lwz r4,SL_IBAT6+4(r1)
550     mtspr SPRN_IBAT6L,r4
551     + lwz r4,SL_IBAT7(r1)
552     mtspr SPRN_IBAT7U,r4
553     + lwz r4,SL_IBAT7+4(r1)
554     mtspr SPRN_IBAT7L,r4
555     END_MMU_FTR_SECTION_IFSET(MMU_FTR_USE_HIGH_BATS)
556    
557     diff --git a/arch/powerpc/platforms/powernv/npu-dma.c b/arch/powerpc/platforms/powernv/npu-dma.c
558     index 8006c54a91e3..fd8166ffbffa 100644
559     --- a/arch/powerpc/platforms/powernv/npu-dma.c
560     +++ b/arch/powerpc/platforms/powernv/npu-dma.c
561     @@ -56,9 +56,22 @@ static struct dentry *atsd_threshold_dentry;
562     static struct pci_dev *get_pci_dev(struct device_node *dn)
563     {
564     struct pci_dn *pdn = PCI_DN(dn);
565     + struct pci_dev *pdev;
566    
567     - return pci_get_domain_bus_and_slot(pci_domain_nr(pdn->phb->bus),
568     + pdev = pci_get_domain_bus_and_slot(pci_domain_nr(pdn->phb->bus),
569     pdn->busno, pdn->devfn);
570     +
571     + /*
572     + * pci_get_domain_bus_and_slot() increased the reference count of
573     + * the PCI device, but callers don't need that actually as the PE
574     + * already holds a reference to the device. Since callers aren't
575     + * aware of the reference count change, call pci_dev_put() now to
576     + * avoid leaks.
577     + */
578     + if (pdev)
579     + pci_dev_put(pdev);
580     +
581     + return pdev;
582     }
583    
584     /* Given a NPU device get the associated PCI device. */
585     diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
586     index e4c658cda3a7..f99cd31b6fd1 100644
587     --- a/arch/powerpc/platforms/pseries/hotplug-memory.c
588     +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
589     @@ -1012,6 +1012,9 @@ static int pseries_update_drconf_memory(struct of_reconfig_data *pr)
590     if (!memblock_size)
591     return -EINVAL;
592    
593     + if (!pr->old_prop)
594     + return 0;
595     +
596     p = (__be32 *) pr->old_prop->value;
597     if (!p)
598     return -EINVAL;
599     diff --git a/arch/x86/events/amd/uncore.c b/arch/x86/events/amd/uncore.c
600     index 8671de126eac..baa7e36073f9 100644
601     --- a/arch/x86/events/amd/uncore.c
602     +++ b/arch/x86/events/amd/uncore.c
603     @@ -210,15 +210,22 @@ static int amd_uncore_event_init(struct perf_event *event)
604     hwc->config = event->attr.config & AMD64_RAW_EVENT_MASK_NB;
605     hwc->idx = -1;
606    
607     + if (event->cpu < 0)
608     + return -EINVAL;
609     +
610     /*
611     * SliceMask and ThreadMask need to be set for certain L3 events in
612     * Family 17h. For other events, the two fields do not affect the count.
613     */
614     - if (l3_mask)
615     - hwc->config |= (AMD64_L3_SLICE_MASK | AMD64_L3_THREAD_MASK);
616     + if (l3_mask && is_llc_event(event)) {
617     + int thread = 2 * (cpu_data(event->cpu).cpu_core_id % 4);
618    
619     - if (event->cpu < 0)
620     - return -EINVAL;
621     + if (smp_num_siblings > 1)
622     + thread += cpu_data(event->cpu).apicid & 1;
623     +
624     + hwc->config |= (1ULL << (AMD64_L3_THREAD_SHIFT + thread) &
625     + AMD64_L3_THREAD_MASK) | AMD64_L3_SLICE_MASK;
626     + }
627    
628     uncore = event_to_amd_uncore(event);
629     if (!uncore)
630     diff --git a/arch/x86/events/intel/core.c b/arch/x86/events/intel/core.c
631     index c8b0bf2b0d5e..db5a2ba61753 100644
632     --- a/arch/x86/events/intel/core.c
633     +++ b/arch/x86/events/intel/core.c
634     @@ -2074,12 +2074,10 @@ static void intel_pmu_disable_event(struct perf_event *event)
635     cpuc->intel_ctrl_host_mask &= ~(1ull << hwc->idx);
636     cpuc->intel_cp_status &= ~(1ull << hwc->idx);
637    
638     - if (unlikely(hwc->config_base == MSR_ARCH_PERFMON_FIXED_CTR_CTRL)) {
639     + if (unlikely(hwc->config_base == MSR_ARCH_PERFMON_FIXED_CTR_CTRL))
640     intel_pmu_disable_fixed(hwc);
641     - return;
642     - }
643     -
644     - x86_pmu_disable_event(event);
645     + else
646     + x86_pmu_disable_event(event);
647    
648     /*
649     * Needs to be called after x86_pmu_disable_event,
650     diff --git a/arch/x86/events/intel/uncore.h b/arch/x86/events/intel/uncore.h
651     index cc6dd4f78158..42fa3974c421 100644
652     --- a/arch/x86/events/intel/uncore.h
653     +++ b/arch/x86/events/intel/uncore.h
654     @@ -402,6 +402,16 @@ static inline bool is_freerunning_event(struct perf_event *event)
655     (((cfg >> 8) & 0xff) >= UNCORE_FREERUNNING_UMASK_START);
656     }
657    
658     +/* Check and reject invalid config */
659     +static inline int uncore_freerunning_hw_config(struct intel_uncore_box *box,
660     + struct perf_event *event)
661     +{
662     + if (is_freerunning_event(event))
663     + return 0;
664     +
665     + return -EINVAL;
666     +}
667     +
668     static inline void uncore_disable_box(struct intel_uncore_box *box)
669     {
670     if (box->pmu->type->ops->disable_box)
671     diff --git a/arch/x86/events/intel/uncore_snbep.c b/arch/x86/events/intel/uncore_snbep.c
672     index b10e04387f38..8e4e8e423839 100644
673     --- a/arch/x86/events/intel/uncore_snbep.c
674     +++ b/arch/x86/events/intel/uncore_snbep.c
675     @@ -3585,6 +3585,7 @@ static struct uncore_event_desc skx_uncore_iio_freerunning_events[] = {
676    
677     static struct intel_uncore_ops skx_uncore_iio_freerunning_ops = {
678     .read_counter = uncore_msr_read_counter,
679     + .hw_config = uncore_freerunning_hw_config,
680     };
681    
682     static struct attribute *skx_uncore_iio_freerunning_formats_attr[] = {
683     diff --git a/arch/x86/include/asm/atomic.h b/arch/x86/include/asm/atomic.h
684     index ce84388e540c..d266a4066289 100644
685     --- a/arch/x86/include/asm/atomic.h
686     +++ b/arch/x86/include/asm/atomic.h
687     @@ -54,7 +54,7 @@ static __always_inline void arch_atomic_add(int i, atomic_t *v)
688     {
689     asm volatile(LOCK_PREFIX "addl %1,%0"
690     : "+m" (v->counter)
691     - : "ir" (i));
692     + : "ir" (i) : "memory");
693     }
694    
695     /**
696     @@ -68,7 +68,7 @@ static __always_inline void arch_atomic_sub(int i, atomic_t *v)
697     {
698     asm volatile(LOCK_PREFIX "subl %1,%0"
699     : "+m" (v->counter)
700     - : "ir" (i));
701     + : "ir" (i) : "memory");
702     }
703    
704     /**
705     @@ -95,7 +95,7 @@ static __always_inline bool arch_atomic_sub_and_test(int i, atomic_t *v)
706     static __always_inline void arch_atomic_inc(atomic_t *v)
707     {
708     asm volatile(LOCK_PREFIX "incl %0"
709     - : "+m" (v->counter));
710     + : "+m" (v->counter) :: "memory");
711     }
712     #define arch_atomic_inc arch_atomic_inc
713    
714     @@ -108,7 +108,7 @@ static __always_inline void arch_atomic_inc(atomic_t *v)
715     static __always_inline void arch_atomic_dec(atomic_t *v)
716     {
717     asm volatile(LOCK_PREFIX "decl %0"
718     - : "+m" (v->counter));
719     + : "+m" (v->counter) :: "memory");
720     }
721     #define arch_atomic_dec arch_atomic_dec
722    
723     diff --git a/arch/x86/include/asm/atomic64_64.h b/arch/x86/include/asm/atomic64_64.h
724     index 5f851d92eecd..55ca027f8c1c 100644
725     --- a/arch/x86/include/asm/atomic64_64.h
726     +++ b/arch/x86/include/asm/atomic64_64.h
727     @@ -45,7 +45,7 @@ static __always_inline void arch_atomic64_add(long i, atomic64_t *v)
728     {
729     asm volatile(LOCK_PREFIX "addq %1,%0"
730     : "=m" (v->counter)
731     - : "er" (i), "m" (v->counter));
732     + : "er" (i), "m" (v->counter) : "memory");
733     }
734    
735     /**
736     @@ -59,7 +59,7 @@ static inline void arch_atomic64_sub(long i, atomic64_t *v)
737     {
738     asm volatile(LOCK_PREFIX "subq %1,%0"
739     : "=m" (v->counter)
740     - : "er" (i), "m" (v->counter));
741     + : "er" (i), "m" (v->counter) : "memory");
742     }
743    
744     /**
745     @@ -87,7 +87,7 @@ static __always_inline void arch_atomic64_inc(atomic64_t *v)
746     {
747     asm volatile(LOCK_PREFIX "incq %0"
748     : "=m" (v->counter)
749     - : "m" (v->counter));
750     + : "m" (v->counter) : "memory");
751     }
752     #define arch_atomic64_inc arch_atomic64_inc
753    
754     @@ -101,7 +101,7 @@ static __always_inline void arch_atomic64_dec(atomic64_t *v)
755     {
756     asm volatile(LOCK_PREFIX "decq %0"
757     : "=m" (v->counter)
758     - : "m" (v->counter));
759     + : "m" (v->counter) : "memory");
760     }
761     #define arch_atomic64_dec arch_atomic64_dec
762    
763     diff --git a/arch/x86/include/asm/barrier.h b/arch/x86/include/asm/barrier.h
764     index 14de0432d288..84f848c2541a 100644
765     --- a/arch/x86/include/asm/barrier.h
766     +++ b/arch/x86/include/asm/barrier.h
767     @@ -80,8 +80,8 @@ do { \
768     })
769    
770     /* Atomic operations are already serializing on x86 */
771     -#define __smp_mb__before_atomic() barrier()
772     -#define __smp_mb__after_atomic() barrier()
773     +#define __smp_mb__before_atomic() do { } while (0)
774     +#define __smp_mb__after_atomic() do { } while (0)
775    
776     #include <asm-generic/barrier.h>
777    
778     diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
779     index 69037da75ea0..0cf704933f23 100644
780     --- a/arch/x86/include/asm/cpufeatures.h
781     +++ b/arch/x86/include/asm/cpufeatures.h
782     @@ -239,12 +239,14 @@
783     #define X86_FEATURE_BMI1 ( 9*32+ 3) /* 1st group bit manipulation extensions */
784     #define X86_FEATURE_HLE ( 9*32+ 4) /* Hardware Lock Elision */
785     #define X86_FEATURE_AVX2 ( 9*32+ 5) /* AVX2 instructions */
786     +#define X86_FEATURE_FDP_EXCPTN_ONLY ( 9*32+ 6) /* "" FPU data pointer updated only on x87 exceptions */
787     #define X86_FEATURE_SMEP ( 9*32+ 7) /* Supervisor Mode Execution Protection */
788     #define X86_FEATURE_BMI2 ( 9*32+ 8) /* 2nd group bit manipulation extensions */
789     #define X86_FEATURE_ERMS ( 9*32+ 9) /* Enhanced REP MOVSB/STOSB instructions */
790     #define X86_FEATURE_INVPCID ( 9*32+10) /* Invalidate Processor Context ID */
791     #define X86_FEATURE_RTM ( 9*32+11) /* Restricted Transactional Memory */
792     #define X86_FEATURE_CQM ( 9*32+12) /* Cache QoS Monitoring */
793     +#define X86_FEATURE_ZERO_FCS_FDS ( 9*32+13) /* "" Zero out FPU CS and FPU DS */
794     #define X86_FEATURE_MPX ( 9*32+14) /* Memory Protection Extension */
795     #define X86_FEATURE_RDT_A ( 9*32+15) /* Resource Director Technology Allocation */
796     #define X86_FEATURE_AVX512F ( 9*32+16) /* AVX-512 Foundation */
797     diff --git a/arch/x86/include/asm/intel-family.h b/arch/x86/include/asm/intel-family.h
798     index 2e38fb82b91d..aebedbaf5260 100644
799     --- a/arch/x86/include/asm/intel-family.h
800     +++ b/arch/x86/include/asm/intel-family.h
801     @@ -56,6 +56,7 @@
802     #define INTEL_FAM6_ICELAKE_XEON_D 0x6C
803     #define INTEL_FAM6_ICELAKE_DESKTOP 0x7D
804     #define INTEL_FAM6_ICELAKE_MOBILE 0x7E
805     +#define INTEL_FAM6_ICELAKE_NNPI 0x9D
806    
807     /* "Small Core" Processors (Atom) */
808    
809     diff --git a/arch/x86/kernel/cpu/cacheinfo.c b/arch/x86/kernel/cpu/cacheinfo.c
810     index 0c5fcbd998cf..9d863e8f9b3f 100644
811     --- a/arch/x86/kernel/cpu/cacheinfo.c
812     +++ b/arch/x86/kernel/cpu/cacheinfo.c
813     @@ -651,8 +651,7 @@ void cacheinfo_amd_init_llc_id(struct cpuinfo_x86 *c, int cpu, u8 node_id)
814     if (c->x86 < 0x17) {
815     /* LLC is at the node level. */
816     per_cpu(cpu_llc_id, cpu) = node_id;
817     - } else if (c->x86 == 0x17 &&
818     - c->x86_model >= 0 && c->x86_model <= 0x1F) {
819     + } else if (c->x86 == 0x17 && c->x86_model <= 0x1F) {
820     /*
821     * LLC is at the core complex level.
822     * Core complex ID is ApicId[3] for these processors.
823     diff --git a/arch/x86/kernel/cpu/mkcapflags.sh b/arch/x86/kernel/cpu/mkcapflags.sh
824     index d0dfb892c72f..aed45b8895d5 100644
825     --- a/arch/x86/kernel/cpu/mkcapflags.sh
826     +++ b/arch/x86/kernel/cpu/mkcapflags.sh
827     @@ -4,6 +4,8 @@
828     # Generate the x86_cap/bug_flags[] arrays from include/asm/cpufeatures.h
829     #
830    
831     +set -e
832     +
833     IN=$1
834     OUT=$2
835    
836     diff --git a/arch/x86/kernel/mpparse.c b/arch/x86/kernel/mpparse.c
837     index ddb1ca6923b1..5b4c32799094 100644
838     --- a/arch/x86/kernel/mpparse.c
839     +++ b/arch/x86/kernel/mpparse.c
840     @@ -547,17 +547,15 @@ void __init default_get_smp_config(unsigned int early)
841     * local APIC has default address
842     */
843     mp_lapic_addr = APIC_DEFAULT_PHYS_BASE;
844     - return;
845     + goto out;
846     }
847    
848     pr_info("Default MP configuration #%d\n", mpf->feature1);
849     construct_default_ISA_mptable(mpf->feature1);
850    
851     } else if (mpf->physptr) {
852     - if (check_physptr(mpf, early)) {
853     - early_memunmap(mpf, sizeof(*mpf));
854     - return;
855     - }
856     + if (check_physptr(mpf, early))
857     + goto out;
858     } else
859     BUG();
860    
861     @@ -566,7 +564,7 @@ void __init default_get_smp_config(unsigned int early)
862     /*
863     * Only use the first configuration found.
864     */
865     -
866     +out:
867     early_memunmap(mpf, sizeof(*mpf));
868     }
869    
870     diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c
871     index 952aebd0a8a3..acc8d217f656 100644
872     --- a/arch/x86/kvm/pmu.c
873     +++ b/arch/x86/kvm/pmu.c
874     @@ -131,8 +131,8 @@ static void pmc_reprogram_counter(struct kvm_pmc *pmc, u32 type,
875     intr ? kvm_perf_overflow_intr :
876     kvm_perf_overflow, pmc);
877     if (IS_ERR(event)) {
878     - printk_once("kvm_pmu: event creation failed %ld\n",
879     - PTR_ERR(event));
880     + pr_debug_ratelimited("kvm_pmu: event creation failed %ld for pmc->idx = %d\n",
881     + PTR_ERR(event), pmc->idx);
882     return;
883     }
884    
885     diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
886     index c630e02836a8..527524134693 100644
887     --- a/block/blk-cgroup.c
888     +++ b/block/blk-cgroup.c
889     @@ -1016,8 +1016,12 @@ static int blkcg_print_stat(struct seq_file *sf, void *v)
890     }
891     next:
892     if (has_stats) {
893     - off += scnprintf(buf+off, size-off, "\n");
894     - seq_commit(sf, off);
895     + if (off < size - 1) {
896     + off += scnprintf(buf+off, size-off, "\n");
897     + seq_commit(sf, off);
898     + } else {
899     + seq_commit(sf, -1);
900     + }
901     }
902     }
903    
904     diff --git a/block/blk-iolatency.c b/block/blk-iolatency.c
905     index 6b8396ccb5c4..f4f7c73fb828 100644
906     --- a/block/blk-iolatency.c
907     +++ b/block/blk-iolatency.c
908     @@ -565,6 +565,10 @@ static void blkcg_iolatency_done_bio(struct rq_qos *rqos, struct bio *bio)
909     if (!blkg)
910     return;
911    
912     + /* We didn't actually submit this bio, don't account it. */
913     + if (bio->bi_status == BLK_STS_AGAIN)
914     + return;
915     +
916     iolat = blkg_to_lat(bio->bi_blkg);
917     if (!iolat)
918     return;
919     @@ -742,8 +746,10 @@ static int iolatency_set_min_lat_nsec(struct blkcg_gq *blkg, u64 val)
920    
921     if (!oldval && val)
922     return 1;
923     - if (oldval && !val)
924     + if (oldval && !val) {
925     + blkcg_clear_delay(blkg);
926     return -1;
927     + }
928     return 0;
929     }
930    
931     diff --git a/block/blk-throttle.c b/block/blk-throttle.c
932     index 01d0620a4e4a..caee658609d7 100644
933     --- a/block/blk-throttle.c
934     +++ b/block/blk-throttle.c
935     @@ -892,13 +892,10 @@ static bool tg_with_in_iops_limit(struct throtl_grp *tg, struct bio *bio,
936     unsigned long jiffy_elapsed, jiffy_wait, jiffy_elapsed_rnd;
937     u64 tmp;
938    
939     - jiffy_elapsed = jiffy_elapsed_rnd = jiffies - tg->slice_start[rw];
940     -
941     - /* Slice has just started. Consider one slice interval */
942     - if (!jiffy_elapsed)
943     - jiffy_elapsed_rnd = tg->td->throtl_slice;
944     + jiffy_elapsed = jiffies - tg->slice_start[rw];
945    
946     - jiffy_elapsed_rnd = roundup(jiffy_elapsed_rnd, tg->td->throtl_slice);
947     + /* Round up to the next throttle slice, wait time must be nonzero */
948     + jiffy_elapsed_rnd = roundup(jiffy_elapsed + 1, tg->td->throtl_slice);
949    
950     /*
951     * jiffy_elapsed_rnd should not be a big value as minimum iops can be
952     diff --git a/crypto/asymmetric_keys/Kconfig b/crypto/asymmetric_keys/Kconfig
953     index f3702e533ff4..d8a73d94bb30 100644
954     --- a/crypto/asymmetric_keys/Kconfig
955     +++ b/crypto/asymmetric_keys/Kconfig
956     @@ -15,6 +15,7 @@ config ASYMMETRIC_PUBLIC_KEY_SUBTYPE
957     select MPILIB
958     select CRYPTO_HASH_INFO
959     select CRYPTO_AKCIPHER
960     + select CRYPTO_HASH
961     help
962     This option provides support for asymmetric public key type handling.
963     If signature generation and/or verification are to be used,
964     @@ -34,6 +35,7 @@ config X509_CERTIFICATE_PARSER
965     config PKCS7_MESSAGE_PARSER
966     tristate "PKCS#7 message parser"
967     depends on X509_CERTIFICATE_PARSER
968     + select CRYPTO_HASH
969     select ASN1
970     select OID_REGISTRY
971     help
972     @@ -56,6 +58,7 @@ config SIGNED_PE_FILE_VERIFICATION
973     bool "Support for PE file signature verification"
974     depends on PKCS7_MESSAGE_PARSER=y
975     depends on SYSTEM_DATA_VERIFICATION
976     + select CRYPTO_HASH
977     select ASN1
978     select OID_REGISTRY
979     help
980     diff --git a/crypto/chacha20poly1305.c b/crypto/chacha20poly1305.c
981     index 4d6f51bcdfab..af8afe5c06ea 100644
982     --- a/crypto/chacha20poly1305.c
983     +++ b/crypto/chacha20poly1305.c
984     @@ -67,6 +67,8 @@ struct chachapoly_req_ctx {
985     unsigned int cryptlen;
986     /* Actual AD, excluding IV */
987     unsigned int assoclen;
988     + /* request flags, with MAY_SLEEP cleared if needed */
989     + u32 flags;
990     union {
991     struct poly_req poly;
992     struct chacha_req chacha;
993     @@ -76,8 +78,12 @@ struct chachapoly_req_ctx {
994     static inline void async_done_continue(struct aead_request *req, int err,
995     int (*cont)(struct aead_request *))
996     {
997     - if (!err)
998     + if (!err) {
999     + struct chachapoly_req_ctx *rctx = aead_request_ctx(req);
1000     +
1001     + rctx->flags &= ~CRYPTO_TFM_REQ_MAY_SLEEP;
1002     err = cont(req);
1003     + }
1004    
1005     if (err != -EINPROGRESS && err != -EBUSY)
1006     aead_request_complete(req, err);
1007     @@ -144,7 +150,7 @@ static int chacha_decrypt(struct aead_request *req)
1008     dst = scatterwalk_ffwd(rctx->dst, req->dst, req->assoclen);
1009     }
1010    
1011     - skcipher_request_set_callback(&creq->req, aead_request_flags(req),
1012     + skcipher_request_set_callback(&creq->req, rctx->flags,
1013     chacha_decrypt_done, req);
1014     skcipher_request_set_tfm(&creq->req, ctx->chacha);
1015     skcipher_request_set_crypt(&creq->req, src, dst,
1016     @@ -188,7 +194,7 @@ static int poly_tail(struct aead_request *req)
1017     memcpy(&preq->tail.cryptlen, &len, sizeof(len));
1018     sg_set_buf(preq->src, &preq->tail, sizeof(preq->tail));
1019    
1020     - ahash_request_set_callback(&preq->req, aead_request_flags(req),
1021     + ahash_request_set_callback(&preq->req, rctx->flags,
1022     poly_tail_done, req);
1023     ahash_request_set_tfm(&preq->req, ctx->poly);
1024     ahash_request_set_crypt(&preq->req, preq->src,
1025     @@ -219,7 +225,7 @@ static int poly_cipherpad(struct aead_request *req)
1026     sg_init_table(preq->src, 1);
1027     sg_set_buf(preq->src, &preq->pad, padlen);
1028    
1029     - ahash_request_set_callback(&preq->req, aead_request_flags(req),
1030     + ahash_request_set_callback(&preq->req, rctx->flags,
1031     poly_cipherpad_done, req);
1032     ahash_request_set_tfm(&preq->req, ctx->poly);
1033     ahash_request_set_crypt(&preq->req, preq->src, NULL, padlen);
1034     @@ -250,7 +256,7 @@ static int poly_cipher(struct aead_request *req)
1035     sg_init_table(rctx->src, 2);
1036     crypt = scatterwalk_ffwd(rctx->src, crypt, req->assoclen);
1037    
1038     - ahash_request_set_callback(&preq->req, aead_request_flags(req),
1039     + ahash_request_set_callback(&preq->req, rctx->flags,
1040     poly_cipher_done, req);
1041     ahash_request_set_tfm(&preq->req, ctx->poly);
1042     ahash_request_set_crypt(&preq->req, crypt, NULL, rctx->cryptlen);
1043     @@ -280,7 +286,7 @@ static int poly_adpad(struct aead_request *req)
1044     sg_init_table(preq->src, 1);
1045     sg_set_buf(preq->src, preq->pad, padlen);
1046    
1047     - ahash_request_set_callback(&preq->req, aead_request_flags(req),
1048     + ahash_request_set_callback(&preq->req, rctx->flags,
1049     poly_adpad_done, req);
1050     ahash_request_set_tfm(&preq->req, ctx->poly);
1051     ahash_request_set_crypt(&preq->req, preq->src, NULL, padlen);
1052     @@ -304,7 +310,7 @@ static int poly_ad(struct aead_request *req)
1053     struct poly_req *preq = &rctx->u.poly;
1054     int err;
1055    
1056     - ahash_request_set_callback(&preq->req, aead_request_flags(req),
1057     + ahash_request_set_callback(&preq->req, rctx->flags,
1058     poly_ad_done, req);
1059     ahash_request_set_tfm(&preq->req, ctx->poly);
1060     ahash_request_set_crypt(&preq->req, req->src, NULL, rctx->assoclen);
1061     @@ -331,7 +337,7 @@ static int poly_setkey(struct aead_request *req)
1062     sg_init_table(preq->src, 1);
1063     sg_set_buf(preq->src, rctx->key, sizeof(rctx->key));
1064    
1065     - ahash_request_set_callback(&preq->req, aead_request_flags(req),
1066     + ahash_request_set_callback(&preq->req, rctx->flags,
1067     poly_setkey_done, req);
1068     ahash_request_set_tfm(&preq->req, ctx->poly);
1069     ahash_request_set_crypt(&preq->req, preq->src, NULL, sizeof(rctx->key));
1070     @@ -355,7 +361,7 @@ static int poly_init(struct aead_request *req)
1071     struct poly_req *preq = &rctx->u.poly;
1072     int err;
1073    
1074     - ahash_request_set_callback(&preq->req, aead_request_flags(req),
1075     + ahash_request_set_callback(&preq->req, rctx->flags,
1076     poly_init_done, req);
1077     ahash_request_set_tfm(&preq->req, ctx->poly);
1078    
1079     @@ -393,7 +399,7 @@ static int poly_genkey(struct aead_request *req)
1080    
1081     chacha_iv(creq->iv, req, 0);
1082    
1083     - skcipher_request_set_callback(&creq->req, aead_request_flags(req),
1084     + skcipher_request_set_callback(&creq->req, rctx->flags,
1085     poly_genkey_done, req);
1086     skcipher_request_set_tfm(&creq->req, ctx->chacha);
1087     skcipher_request_set_crypt(&creq->req, creq->src, creq->src,
1088     @@ -433,7 +439,7 @@ static int chacha_encrypt(struct aead_request *req)
1089     dst = scatterwalk_ffwd(rctx->dst, req->dst, req->assoclen);
1090     }
1091    
1092     - skcipher_request_set_callback(&creq->req, aead_request_flags(req),
1093     + skcipher_request_set_callback(&creq->req, rctx->flags,
1094     chacha_encrypt_done, req);
1095     skcipher_request_set_tfm(&creq->req, ctx->chacha);
1096     skcipher_request_set_crypt(&creq->req, src, dst,
1097     @@ -451,6 +457,7 @@ static int chachapoly_encrypt(struct aead_request *req)
1098     struct chachapoly_req_ctx *rctx = aead_request_ctx(req);
1099    
1100     rctx->cryptlen = req->cryptlen;
1101     + rctx->flags = aead_request_flags(req);
1102    
1103     /* encrypt call chain:
1104     * - chacha_encrypt/done()
1105     @@ -472,6 +479,7 @@ static int chachapoly_decrypt(struct aead_request *req)
1106     struct chachapoly_req_ctx *rctx = aead_request_ctx(req);
1107    
1108     rctx->cryptlen = req->cryptlen - POLY1305_DIGEST_SIZE;
1109     + rctx->flags = aead_request_flags(req);
1110    
1111     /* decrypt call chain:
1112     * - poly_genkey/done()
1113     diff --git a/crypto/ghash-generic.c b/crypto/ghash-generic.c
1114     index d9f192b953b2..591b52d3bdca 100644
1115     --- a/crypto/ghash-generic.c
1116     +++ b/crypto/ghash-generic.c
1117     @@ -34,6 +34,7 @@ static int ghash_setkey(struct crypto_shash *tfm,
1118     const u8 *key, unsigned int keylen)
1119     {
1120     struct ghash_ctx *ctx = crypto_shash_ctx(tfm);
1121     + be128 k;
1122    
1123     if (keylen != GHASH_BLOCK_SIZE) {
1124     crypto_shash_set_flags(tfm, CRYPTO_TFM_RES_BAD_KEY_LEN);
1125     @@ -42,7 +43,12 @@ static int ghash_setkey(struct crypto_shash *tfm,
1126    
1127     if (ctx->gf128)
1128     gf128mul_free_4k(ctx->gf128);
1129     - ctx->gf128 = gf128mul_init_4k_lle((be128 *)key);
1130     +
1131     + BUILD_BUG_ON(sizeof(k) != GHASH_BLOCK_SIZE);
1132     + memcpy(&k, key, GHASH_BLOCK_SIZE); /* avoid violating alignment rules */
1133     + ctx->gf128 = gf128mul_init_4k_lle(&k);
1134     + memzero_explicit(&k, GHASH_BLOCK_SIZE);
1135     +
1136     if (!ctx->gf128)
1137     return -ENOMEM;
1138    
1139     diff --git a/crypto/serpent_generic.c b/crypto/serpent_generic.c
1140     index 7c3382facc82..600bd288881d 100644
1141     --- a/crypto/serpent_generic.c
1142     +++ b/crypto/serpent_generic.c
1143     @@ -229,7 +229,13 @@
1144     x4 ^= x2; \
1145     })
1146    
1147     -static void __serpent_setkey_sbox(u32 r0, u32 r1, u32 r2, u32 r3, u32 r4, u32 *k)
1148     +/*
1149     + * both gcc and clang have misoptimized this function in the past,
1150     + * producing horrible object code from spilling temporary variables
1151     + * on the stack. Forcing this part out of line avoids that.
1152     + */
1153     +static noinline void __serpent_setkey_sbox(u32 r0, u32 r1, u32 r2,
1154     + u32 r3, u32 r4, u32 *k)
1155     {
1156     k += 100;
1157     S3(r3, r4, r0, r1, r2); store_and_load_keys(r1, r2, r4, r3, 28, 24);
1158     diff --git a/drivers/acpi/acpica/acevents.h b/drivers/acpi/acpica/acevents.h
1159     index 704bebbd35b0..298180bf7e3c 100644
1160     --- a/drivers/acpi/acpica/acevents.h
1161     +++ b/drivers/acpi/acpica/acevents.h
1162     @@ -69,7 +69,8 @@ acpi_status
1163     acpi_ev_mask_gpe(struct acpi_gpe_event_info *gpe_event_info, u8 is_masked);
1164    
1165     acpi_status
1166     -acpi_ev_add_gpe_reference(struct acpi_gpe_event_info *gpe_event_info);
1167     +acpi_ev_add_gpe_reference(struct acpi_gpe_event_info *gpe_event_info,
1168     + u8 clear_on_enable);
1169    
1170     acpi_status
1171     acpi_ev_remove_gpe_reference(struct acpi_gpe_event_info *gpe_event_info);
1172     diff --git a/drivers/acpi/acpica/evgpe.c b/drivers/acpi/acpica/evgpe.c
1173     index e10fec99a182..4b5d3b4c627a 100644
1174     --- a/drivers/acpi/acpica/evgpe.c
1175     +++ b/drivers/acpi/acpica/evgpe.c
1176     @@ -146,6 +146,7 @@ acpi_ev_mask_gpe(struct acpi_gpe_event_info *gpe_event_info, u8 is_masked)
1177     * FUNCTION: acpi_ev_add_gpe_reference
1178     *
1179     * PARAMETERS: gpe_event_info - Add a reference to this GPE
1180     + * clear_on_enable - Clear GPE status before enabling it
1181     *
1182     * RETURN: Status
1183     *
1184     @@ -155,7 +156,8 @@ acpi_ev_mask_gpe(struct acpi_gpe_event_info *gpe_event_info, u8 is_masked)
1185     ******************************************************************************/
1186    
1187     acpi_status
1188     -acpi_ev_add_gpe_reference(struct acpi_gpe_event_info *gpe_event_info)
1189     +acpi_ev_add_gpe_reference(struct acpi_gpe_event_info *gpe_event_info,
1190     + u8 clear_on_enable)
1191     {
1192     acpi_status status = AE_OK;
1193    
1194     @@ -170,6 +172,10 @@ acpi_ev_add_gpe_reference(struct acpi_gpe_event_info *gpe_event_info)
1195    
1196     /* Enable on first reference */
1197    
1198     + if (clear_on_enable) {
1199     + (void)acpi_hw_clear_gpe(gpe_event_info);
1200     + }
1201     +
1202     status = acpi_ev_update_gpe_enable_mask(gpe_event_info);
1203     if (ACPI_SUCCESS(status)) {
1204     status = acpi_ev_enable_gpe(gpe_event_info);
1205     diff --git a/drivers/acpi/acpica/evgpeblk.c b/drivers/acpi/acpica/evgpeblk.c
1206     index b253063b09d3..8d96270ed8c7 100644
1207     --- a/drivers/acpi/acpica/evgpeblk.c
1208     +++ b/drivers/acpi/acpica/evgpeblk.c
1209     @@ -453,7 +453,7 @@ acpi_ev_initialize_gpe_block(struct acpi_gpe_xrupt_info *gpe_xrupt_info,
1210     continue;
1211     }
1212    
1213     - status = acpi_ev_add_gpe_reference(gpe_event_info);
1214     + status = acpi_ev_add_gpe_reference(gpe_event_info, FALSE);
1215     if (ACPI_FAILURE(status)) {
1216     ACPI_EXCEPTION((AE_INFO, status,
1217     "Could not enable GPE 0x%02X",
1218     diff --git a/drivers/acpi/acpica/evxface.c b/drivers/acpi/acpica/evxface.c
1219     index febc332b00ac..841557bda641 100644
1220     --- a/drivers/acpi/acpica/evxface.c
1221     +++ b/drivers/acpi/acpica/evxface.c
1222     @@ -971,7 +971,7 @@ acpi_remove_gpe_handler(acpi_handle gpe_device,
1223     ACPI_GPE_DISPATCH_METHOD) ||
1224     (ACPI_GPE_DISPATCH_TYPE(handler->original_flags) ==
1225     ACPI_GPE_DISPATCH_NOTIFY)) && handler->originally_enabled) {
1226     - (void)acpi_ev_add_gpe_reference(gpe_event_info);
1227     + (void)acpi_ev_add_gpe_reference(gpe_event_info, FALSE);
1228     if (ACPI_GPE_IS_POLLING_NEEDED(gpe_event_info)) {
1229    
1230     /* Poll edge triggered GPEs to handle existing events */
1231     diff --git a/drivers/acpi/acpica/evxfgpe.c b/drivers/acpi/acpica/evxfgpe.c
1232     index b2d5f66cc1b0..4188731e7c40 100644
1233     --- a/drivers/acpi/acpica/evxfgpe.c
1234     +++ b/drivers/acpi/acpica/evxfgpe.c
1235     @@ -108,7 +108,7 @@ acpi_status acpi_enable_gpe(acpi_handle gpe_device, u32 gpe_number)
1236     if (gpe_event_info) {
1237     if (ACPI_GPE_DISPATCH_TYPE(gpe_event_info->flags) !=
1238     ACPI_GPE_DISPATCH_NONE) {
1239     - status = acpi_ev_add_gpe_reference(gpe_event_info);
1240     + status = acpi_ev_add_gpe_reference(gpe_event_info, TRUE);
1241     if (ACPI_SUCCESS(status) &&
1242     ACPI_GPE_IS_POLLING_NEEDED(gpe_event_info)) {
1243    
1244     diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
1245     index 01306c018398..ccc80ff57eb2 100644
1246     --- a/drivers/ata/libata-eh.c
1247     +++ b/drivers/ata/libata-eh.c
1248     @@ -1490,7 +1490,7 @@ static int ata_eh_read_log_10h(struct ata_device *dev,
1249     tf->hob_lbah = buf[10];
1250     tf->nsect = buf[12];
1251     tf->hob_nsect = buf[13];
1252     - if (ata_id_has_ncq_autosense(dev->id))
1253     + if (dev->class == ATA_DEV_ZAC && ata_id_has_ncq_autosense(dev->id))
1254     tf->auxiliary = buf[14] << 16 | buf[15] << 8 | buf[16];
1255    
1256     return 0;
1257     @@ -1737,7 +1737,8 @@ void ata_eh_analyze_ncq_error(struct ata_link *link)
1258     memcpy(&qc->result_tf, &tf, sizeof(tf));
1259     qc->result_tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_LBA | ATA_TFLAG_LBA48;
1260     qc->err_mask |= AC_ERR_DEV | AC_ERR_NCQ;
1261     - if ((qc->result_tf.command & ATA_SENSE) || qc->result_tf.auxiliary) {
1262     + if (dev->class == ATA_DEV_ZAC &&
1263     + ((qc->result_tf.command & ATA_SENSE) || qc->result_tf.auxiliary)) {
1264     char sense_key, asc, ascq;
1265    
1266     sense_key = (qc->result_tf.auxiliary >> 16) & 0xff;
1267     @@ -1791,10 +1792,11 @@ static unsigned int ata_eh_analyze_tf(struct ata_queued_cmd *qc,
1268     }
1269    
1270     switch (qc->dev->class) {
1271     - case ATA_DEV_ATA:
1272     case ATA_DEV_ZAC:
1273     if (stat & ATA_SENSE)
1274     ata_eh_request_sense(qc, qc->scsicmd);
1275     + /* fall through */
1276     + case ATA_DEV_ATA:
1277     if (err & ATA_ICRC)
1278     qc->err_mask |= AC_ERR_ATA_BUS;
1279     if (err & (ATA_UNC | ATA_AMNF))
1280     diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c
1281     index 87b562e49a43..c9687c8b2347 100644
1282     --- a/drivers/base/regmap/regmap-debugfs.c
1283     +++ b/drivers/base/regmap/regmap-debugfs.c
1284     @@ -575,6 +575,8 @@ void regmap_debugfs_init(struct regmap *map, const char *name)
1285     }
1286    
1287     if (!strcmp(name, "dummy")) {
1288     + kfree(map->debugfs_name);
1289     +
1290     map->debugfs_name = kasprintf(GFP_KERNEL, "dummy%d",
1291     dummy_index);
1292     name = map->debugfs_name;
1293     diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
1294     index 0360a90ad6b6..6c9f6988bc09 100644
1295     --- a/drivers/base/regmap/regmap.c
1296     +++ b/drivers/base/regmap/regmap.c
1297     @@ -1618,6 +1618,8 @@ static int _regmap_raw_write_impl(struct regmap *map, unsigned int reg,
1298     map->format.reg_bytes +
1299     map->format.pad_bytes,
1300     val, val_len);
1301     + else
1302     + ret = -ENOTSUPP;
1303    
1304     /* If that didn't work fall back on linearising by hand. */
1305     if (ret == -ENOTSUPP) {
1306     diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
1307     index a8de56f1936d..4a9a4d12721a 100644
1308     --- a/drivers/block/floppy.c
1309     +++ b/drivers/block/floppy.c
1310     @@ -2119,6 +2119,9 @@ static void setup_format_params(int track)
1311     raw_cmd->kernel_data = floppy_track_buffer;
1312     raw_cmd->length = 4 * F_SECT_PER_TRACK;
1313    
1314     + if (!F_SECT_PER_TRACK)
1315     + return;
1316     +
1317     /* allow for about 30ms for data transport per track */
1318     head_shift = (F_SECT_PER_TRACK + 5) / 6;
1319    
1320     @@ -3241,8 +3244,12 @@ static int set_geometry(unsigned int cmd, struct floppy_struct *g,
1321     int cnt;
1322    
1323     /* sanity checking for parameters. */
1324     - if (g->sect <= 0 ||
1325     - g->head <= 0 ||
1326     + if ((int)g->sect <= 0 ||
1327     + (int)g->head <= 0 ||
1328     + /* check for overflow in max_sector */
1329     + (int)(g->sect * g->head) <= 0 ||
1330     + /* check for zero in F_SECT_PER_TRACK */
1331     + (unsigned char)((g->sect << 2) >> FD_SIZECODE(g)) == 0 ||
1332     g->track <= 0 || g->track > UDP->tracks >> STRETCH(g) ||
1333     /* check if reserved bits are set */
1334     (g->stretch & ~(FD_STRETCH | FD_SWAPSIDES | FD_SECTBASEMASK)) != 0)
1335     @@ -3386,6 +3393,24 @@ static int fd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
1336     return 0;
1337     }
1338    
1339     +static bool valid_floppy_drive_params(const short autodetect[8],
1340     + int native_format)
1341     +{
1342     + size_t floppy_type_size = ARRAY_SIZE(floppy_type);
1343     + size_t i = 0;
1344     +
1345     + for (i = 0; i < 8; ++i) {
1346     + if (autodetect[i] < 0 ||
1347     + autodetect[i] >= floppy_type_size)
1348     + return false;
1349     + }
1350     +
1351     + if (native_format < 0 || native_format >= floppy_type_size)
1352     + return false;
1353     +
1354     + return true;
1355     +}
1356     +
1357     static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd,
1358     unsigned long param)
1359     {
1360     @@ -3512,6 +3537,9 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned int
1361     SUPBOUND(size, strlen((const char *)outparam) + 1);
1362     break;
1363     case FDSETDRVPRM:
1364     + if (!valid_floppy_drive_params(inparam.dp.autodetect,
1365     + inparam.dp.native_format))
1366     + return -EINVAL;
1367     *UDP = inparam.dp;
1368     break;
1369     case FDGETDRVPRM:
1370     @@ -3709,6 +3737,8 @@ static int compat_setdrvprm(int drive,
1371     return -EPERM;
1372     if (copy_from_user(&v, arg, sizeof(struct compat_floppy_drive_params)))
1373     return -EFAULT;
1374     + if (!valid_floppy_drive_params(v.autodetect, v.native_format))
1375     + return -EINVAL;
1376     mutex_lock(&floppy_mutex);
1377     UDP->cmos = v.cmos;
1378     UDP->max_dtr = v.max_dtr;
1379     diff --git a/drivers/block/null_blk_main.c b/drivers/block/null_blk_main.c
1380     index 093b614d6524..c5c0b7c89481 100644
1381     --- a/drivers/block/null_blk_main.c
1382     +++ b/drivers/block/null_blk_main.c
1383     @@ -321,11 +321,12 @@ static ssize_t nullb_device_power_store(struct config_item *item,
1384     set_bit(NULLB_DEV_FL_CONFIGURED, &dev->flags);
1385     dev->power = newp;
1386     } else if (dev->power && !newp) {
1387     - mutex_lock(&lock);
1388     - dev->power = newp;
1389     - null_del_dev(dev->nullb);
1390     - mutex_unlock(&lock);
1391     - clear_bit(NULLB_DEV_FL_UP, &dev->flags);
1392     + if (test_and_clear_bit(NULLB_DEV_FL_UP, &dev->flags)) {
1393     + mutex_lock(&lock);
1394     + dev->power = newp;
1395     + null_del_dev(dev->nullb);
1396     + mutex_unlock(&lock);
1397     + }
1398     clear_bit(NULLB_DEV_FL_CONFIGURED, &dev->flags);
1399     }
1400    
1401     diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
1402     index 40a4f95f6178..75cf605f54e5 100644
1403     --- a/drivers/bluetooth/btusb.c
1404     +++ b/drivers/bluetooth/btusb.c
1405     @@ -277,7 +277,9 @@ static const struct usb_device_id blacklist_table[] = {
1406     { USB_DEVICE(0x04ca, 0x3015), .driver_info = BTUSB_QCA_ROME },
1407     { USB_DEVICE(0x04ca, 0x3016), .driver_info = BTUSB_QCA_ROME },
1408     { USB_DEVICE(0x04ca, 0x301a), .driver_info = BTUSB_QCA_ROME },
1409     + { USB_DEVICE(0x13d3, 0x3491), .driver_info = BTUSB_QCA_ROME },
1410     { USB_DEVICE(0x13d3, 0x3496), .driver_info = BTUSB_QCA_ROME },
1411     + { USB_DEVICE(0x13d3, 0x3501), .driver_info = BTUSB_QCA_ROME },
1412    
1413     /* Broadcom BCM2035 */
1414     { USB_DEVICE(0x0a5c, 0x2009), .driver_info = BTUSB_BCM92035 },
1415     diff --git a/drivers/bluetooth/hci_bcsp.c b/drivers/bluetooth/hci_bcsp.c
1416     index 1a7f0c82fb36..66fe1e6dc631 100644
1417     --- a/drivers/bluetooth/hci_bcsp.c
1418     +++ b/drivers/bluetooth/hci_bcsp.c
1419     @@ -759,6 +759,11 @@ static int bcsp_close(struct hci_uart *hu)
1420     skb_queue_purge(&bcsp->rel);
1421     skb_queue_purge(&bcsp->unrel);
1422    
1423     + if (bcsp->rx_skb) {
1424     + kfree_skb(bcsp->rx_skb);
1425     + bcsp->rx_skb = NULL;
1426     + }
1427     +
1428     kfree(bcsp);
1429     return 0;
1430     }
1431     diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
1432     index d55c30f6981d..aaf5bfa9bd9c 100644
1433     --- a/drivers/clocksource/exynos_mct.c
1434     +++ b/drivers/clocksource/exynos_mct.c
1435     @@ -211,7 +211,7 @@ static void exynos4_frc_resume(struct clocksource *cs)
1436    
1437     static struct clocksource mct_frc = {
1438     .name = "mct-frc",
1439     - .rating = 400,
1440     + .rating = 450, /* use value higher than ARM arch timer */
1441     .read = exynos4_frc_read,
1442     .mask = CLOCKSOURCE_MASK(32),
1443     .flags = CLOCK_SOURCE_IS_CONTINUOUS,
1444     @@ -466,7 +466,7 @@ static int exynos4_mct_starting_cpu(unsigned int cpu)
1445     evt->set_state_oneshot_stopped = set_state_shutdown;
1446     evt->tick_resume = set_state_shutdown;
1447     evt->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
1448     - evt->rating = 450;
1449     + evt->rating = 500; /* use value higher than ARM arch timer */
1450    
1451     exynos4_mct_write(TICK_BASE_CNT, mevt->base + MCT_L_TCNTB_OFFSET);
1452    
1453     diff --git a/drivers/crypto/amcc/crypto4xx_alg.c b/drivers/crypto/amcc/crypto4xx_alg.c
1454     index 0c85a5123f85..1d87deca32ed 100644
1455     --- a/drivers/crypto/amcc/crypto4xx_alg.c
1456     +++ b/drivers/crypto/amcc/crypto4xx_alg.c
1457     @@ -76,12 +76,16 @@ static void set_dynamic_sa_command_1(struct dynamic_sa_ctl *sa, u32 cm,
1458     }
1459    
1460     static inline int crypto4xx_crypt(struct skcipher_request *req,
1461     - const unsigned int ivlen, bool decrypt)
1462     + const unsigned int ivlen, bool decrypt,
1463     + bool check_blocksize)
1464     {
1465     struct crypto_skcipher *cipher = crypto_skcipher_reqtfm(req);
1466     struct crypto4xx_ctx *ctx = crypto_skcipher_ctx(cipher);
1467     __le32 iv[AES_IV_SIZE];
1468    
1469     + if (check_blocksize && !IS_ALIGNED(req->cryptlen, AES_BLOCK_SIZE))
1470     + return -EINVAL;
1471     +
1472     if (ivlen)
1473     crypto4xx_memcpy_to_le32(iv, req->iv, ivlen);
1474    
1475     @@ -90,24 +94,34 @@ static inline int crypto4xx_crypt(struct skcipher_request *req,
1476     ctx->sa_len, 0, NULL);
1477     }
1478    
1479     -int crypto4xx_encrypt_noiv(struct skcipher_request *req)
1480     +int crypto4xx_encrypt_noiv_block(struct skcipher_request *req)
1481     +{
1482     + return crypto4xx_crypt(req, 0, false, true);
1483     +}
1484     +
1485     +int crypto4xx_encrypt_iv_stream(struct skcipher_request *req)
1486     +{
1487     + return crypto4xx_crypt(req, AES_IV_SIZE, false, false);
1488     +}
1489     +
1490     +int crypto4xx_decrypt_noiv_block(struct skcipher_request *req)
1491     {
1492     - return crypto4xx_crypt(req, 0, false);
1493     + return crypto4xx_crypt(req, 0, true, true);
1494     }
1495    
1496     -int crypto4xx_encrypt_iv(struct skcipher_request *req)
1497     +int crypto4xx_decrypt_iv_stream(struct skcipher_request *req)
1498     {
1499     - return crypto4xx_crypt(req, AES_IV_SIZE, false);
1500     + return crypto4xx_crypt(req, AES_IV_SIZE, true, false);
1501     }
1502    
1503     -int crypto4xx_decrypt_noiv(struct skcipher_request *req)
1504     +int crypto4xx_encrypt_iv_block(struct skcipher_request *req)
1505     {
1506     - return crypto4xx_crypt(req, 0, true);
1507     + return crypto4xx_crypt(req, AES_IV_SIZE, false, true);
1508     }
1509    
1510     -int crypto4xx_decrypt_iv(struct skcipher_request *req)
1511     +int crypto4xx_decrypt_iv_block(struct skcipher_request *req)
1512     {
1513     - return crypto4xx_crypt(req, AES_IV_SIZE, true);
1514     + return crypto4xx_crypt(req, AES_IV_SIZE, true, true);
1515     }
1516    
1517     /**
1518     @@ -278,8 +292,8 @@ crypto4xx_ctr_crypt(struct skcipher_request *req, bool encrypt)
1519     return ret;
1520     }
1521    
1522     - return encrypt ? crypto4xx_encrypt_iv(req)
1523     - : crypto4xx_decrypt_iv(req);
1524     + return encrypt ? crypto4xx_encrypt_iv_stream(req)
1525     + : crypto4xx_decrypt_iv_stream(req);
1526     }
1527    
1528     static int crypto4xx_sk_setup_fallback(struct crypto4xx_ctx *ctx,
1529     diff --git a/drivers/crypto/amcc/crypto4xx_core.c b/drivers/crypto/amcc/crypto4xx_core.c
1530     index d2ec9fd1b8bb..6386e1784fe4 100644
1531     --- a/drivers/crypto/amcc/crypto4xx_core.c
1532     +++ b/drivers/crypto/amcc/crypto4xx_core.c
1533     @@ -1153,8 +1153,8 @@ static struct crypto4xx_alg_common crypto4xx_alg[] = {
1534     .max_keysize = AES_MAX_KEY_SIZE,
1535     .ivsize = AES_IV_SIZE,
1536     .setkey = crypto4xx_setkey_aes_cbc,
1537     - .encrypt = crypto4xx_encrypt_iv,
1538     - .decrypt = crypto4xx_decrypt_iv,
1539     + .encrypt = crypto4xx_encrypt_iv_block,
1540     + .decrypt = crypto4xx_decrypt_iv_block,
1541     .init = crypto4xx_sk_init,
1542     .exit = crypto4xx_sk_exit,
1543     } },
1544     @@ -1173,8 +1173,8 @@ static struct crypto4xx_alg_common crypto4xx_alg[] = {
1545     .max_keysize = AES_MAX_KEY_SIZE,
1546     .ivsize = AES_IV_SIZE,
1547     .setkey = crypto4xx_setkey_aes_cfb,
1548     - .encrypt = crypto4xx_encrypt_iv,
1549     - .decrypt = crypto4xx_decrypt_iv,
1550     + .encrypt = crypto4xx_encrypt_iv_stream,
1551     + .decrypt = crypto4xx_decrypt_iv_stream,
1552     .init = crypto4xx_sk_init,
1553     .exit = crypto4xx_sk_exit,
1554     } },
1555     @@ -1186,7 +1186,7 @@ static struct crypto4xx_alg_common crypto4xx_alg[] = {
1556     .cra_flags = CRYPTO_ALG_NEED_FALLBACK |
1557     CRYPTO_ALG_ASYNC |
1558     CRYPTO_ALG_KERN_DRIVER_ONLY,
1559     - .cra_blocksize = AES_BLOCK_SIZE,
1560     + .cra_blocksize = 1,
1561     .cra_ctxsize = sizeof(struct crypto4xx_ctx),
1562     .cra_module = THIS_MODULE,
1563     },
1564     @@ -1206,7 +1206,7 @@ static struct crypto4xx_alg_common crypto4xx_alg[] = {
1565     .cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
1566     .cra_flags = CRYPTO_ALG_ASYNC |
1567     CRYPTO_ALG_KERN_DRIVER_ONLY,
1568     - .cra_blocksize = AES_BLOCK_SIZE,
1569     + .cra_blocksize = 1,
1570     .cra_ctxsize = sizeof(struct crypto4xx_ctx),
1571     .cra_module = THIS_MODULE,
1572     },
1573     @@ -1226,15 +1226,15 @@ static struct crypto4xx_alg_common crypto4xx_alg[] = {
1574     .cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
1575     .cra_flags = CRYPTO_ALG_ASYNC |
1576     CRYPTO_ALG_KERN_DRIVER_ONLY,
1577     - .cra_blocksize = AES_BLOCK_SIZE,
1578     + .cra_blocksize = 1,
1579     .cra_ctxsize = sizeof(struct crypto4xx_ctx),
1580     .cra_module = THIS_MODULE,
1581     },
1582     .min_keysize = AES_MIN_KEY_SIZE,
1583     .max_keysize = AES_MAX_KEY_SIZE,
1584     .setkey = crypto4xx_setkey_aes_ecb,
1585     - .encrypt = crypto4xx_encrypt_noiv,
1586     - .decrypt = crypto4xx_decrypt_noiv,
1587     + .encrypt = crypto4xx_encrypt_noiv_block,
1588     + .decrypt = crypto4xx_decrypt_noiv_block,
1589     .init = crypto4xx_sk_init,
1590     .exit = crypto4xx_sk_exit,
1591     } },
1592     @@ -1245,7 +1245,7 @@ static struct crypto4xx_alg_common crypto4xx_alg[] = {
1593     .cra_priority = CRYPTO4XX_CRYPTO_PRIORITY,
1594     .cra_flags = CRYPTO_ALG_ASYNC |
1595     CRYPTO_ALG_KERN_DRIVER_ONLY,
1596     - .cra_blocksize = AES_BLOCK_SIZE,
1597     + .cra_blocksize = 1,
1598     .cra_ctxsize = sizeof(struct crypto4xx_ctx),
1599     .cra_module = THIS_MODULE,
1600     },
1601     @@ -1253,8 +1253,8 @@ static struct crypto4xx_alg_common crypto4xx_alg[] = {
1602     .max_keysize = AES_MAX_KEY_SIZE,
1603     .ivsize = AES_IV_SIZE,
1604     .setkey = crypto4xx_setkey_aes_ofb,
1605     - .encrypt = crypto4xx_encrypt_iv,
1606     - .decrypt = crypto4xx_decrypt_iv,
1607     + .encrypt = crypto4xx_encrypt_iv_stream,
1608     + .decrypt = crypto4xx_decrypt_iv_stream,
1609     .init = crypto4xx_sk_init,
1610     .exit = crypto4xx_sk_exit,
1611     } },
1612     diff --git a/drivers/crypto/amcc/crypto4xx_core.h b/drivers/crypto/amcc/crypto4xx_core.h
1613     index e2ca56722f07..21a6bbcedc55 100644
1614     --- a/drivers/crypto/amcc/crypto4xx_core.h
1615     +++ b/drivers/crypto/amcc/crypto4xx_core.h
1616     @@ -179,10 +179,12 @@ int crypto4xx_setkey_rfc3686(struct crypto_skcipher *cipher,
1617     const u8 *key, unsigned int keylen);
1618     int crypto4xx_encrypt_ctr(struct skcipher_request *req);
1619     int crypto4xx_decrypt_ctr(struct skcipher_request *req);
1620     -int crypto4xx_encrypt_iv(struct skcipher_request *req);
1621     -int crypto4xx_decrypt_iv(struct skcipher_request *req);
1622     -int crypto4xx_encrypt_noiv(struct skcipher_request *req);
1623     -int crypto4xx_decrypt_noiv(struct skcipher_request *req);
1624     +int crypto4xx_encrypt_iv_stream(struct skcipher_request *req);
1625     +int crypto4xx_decrypt_iv_stream(struct skcipher_request *req);
1626     +int crypto4xx_encrypt_iv_block(struct skcipher_request *req);
1627     +int crypto4xx_decrypt_iv_block(struct skcipher_request *req);
1628     +int crypto4xx_encrypt_noiv_block(struct skcipher_request *req);
1629     +int crypto4xx_decrypt_noiv_block(struct skcipher_request *req);
1630     int crypto4xx_rfc3686_encrypt(struct skcipher_request *req);
1631     int crypto4xx_rfc3686_decrypt(struct skcipher_request *req);
1632     int crypto4xx_sha1_alg_init(struct crypto_tfm *tfm);
1633     diff --git a/drivers/crypto/amcc/crypto4xx_trng.c b/drivers/crypto/amcc/crypto4xx_trng.c
1634     index 53ab1f140a26..8a3ed4031206 100644
1635     --- a/drivers/crypto/amcc/crypto4xx_trng.c
1636     +++ b/drivers/crypto/amcc/crypto4xx_trng.c
1637     @@ -111,7 +111,6 @@ void ppc4xx_trng_probe(struct crypto4xx_core_device *core_dev)
1638     return;
1639    
1640     err_out:
1641     - of_node_put(trng);
1642     iounmap(dev->trng_base);
1643     kfree(rng);
1644     dev->trng_base = NULL;
1645     diff --git a/drivers/crypto/caam/caamalg.c b/drivers/crypto/caam/caamalg.c
1646     index 9bc54c3c2cb9..1907945f82b7 100644
1647     --- a/drivers/crypto/caam/caamalg.c
1648     +++ b/drivers/crypto/caam/caamalg.c
1649     @@ -887,6 +887,7 @@ static void ablkcipher_encrypt_done(struct device *jrdev, u32 *desc, u32 err,
1650     struct ablkcipher_request *req = context;
1651     struct ablkcipher_edesc *edesc;
1652     struct crypto_ablkcipher *ablkcipher = crypto_ablkcipher_reqtfm(req);
1653     + struct caam_ctx *ctx = crypto_ablkcipher_ctx(ablkcipher);
1654     int ivsize = crypto_ablkcipher_ivsize(ablkcipher);
1655    
1656     #ifdef DEBUG
1657     @@ -911,10 +912,11 @@ static void ablkcipher_encrypt_done(struct device *jrdev, u32 *desc, u32 err,
1658    
1659     /*
1660     * The crypto API expects us to set the IV (req->info) to the last
1661     - * ciphertext block. This is used e.g. by the CTS mode.
1662     + * ciphertext block when running in CBC mode.
1663     */
1664     - scatterwalk_map_and_copy(req->info, req->dst, req->nbytes - ivsize,
1665     - ivsize, 0);
1666     + if ((ctx->cdata.algtype & OP_ALG_AAI_MASK) == OP_ALG_AAI_CBC)
1667     + scatterwalk_map_and_copy(req->info, req->dst, req->nbytes -
1668     + ivsize, ivsize, 0);
1669    
1670     /* In case initial IV was generated, copy it in GIVCIPHER request */
1671     if (edesc->iv_dir == DMA_FROM_DEVICE) {
1672     @@ -1651,10 +1653,11 @@ static int ablkcipher_decrypt(struct ablkcipher_request *req)
1673    
1674     /*
1675     * The crypto API expects us to set the IV (req->info) to the last
1676     - * ciphertext block.
1677     + * ciphertext block when running in CBC mode.
1678     */
1679     - scatterwalk_map_and_copy(req->info, req->src, req->nbytes - ivsize,
1680     - ivsize, 0);
1681     + if ((ctx->cdata.algtype & OP_ALG_AAI_MASK) == OP_ALG_AAI_CBC)
1682     + scatterwalk_map_and_copy(req->info, req->src, req->nbytes -
1683     + ivsize, ivsize, 0);
1684    
1685     /* Create and submit job descriptor*/
1686     init_ablkcipher_job(ctx->sh_desc_dec, ctx->sh_desc_dec_dma, edesc, req);
1687     diff --git a/drivers/crypto/ccp/ccp-dev.c b/drivers/crypto/ccp/ccp-dev.c
1688     index 1b5035d56288..9b6d8972a565 100644
1689     --- a/drivers/crypto/ccp/ccp-dev.c
1690     +++ b/drivers/crypto/ccp/ccp-dev.c
1691     @@ -35,56 +35,62 @@ struct ccp_tasklet_data {
1692     };
1693    
1694     /* Human-readable error strings */
1695     +#define CCP_MAX_ERROR_CODE 64
1696     static char *ccp_error_codes[] = {
1697     "",
1698     - "ERR 01: ILLEGAL_ENGINE",
1699     - "ERR 02: ILLEGAL_KEY_ID",
1700     - "ERR 03: ILLEGAL_FUNCTION_TYPE",
1701     - "ERR 04: ILLEGAL_FUNCTION_MODE",
1702     - "ERR 05: ILLEGAL_FUNCTION_ENCRYPT",
1703     - "ERR 06: ILLEGAL_FUNCTION_SIZE",
1704     - "ERR 07: Zlib_MISSING_INIT_EOM",
1705     - "ERR 08: ILLEGAL_FUNCTION_RSVD",
1706     - "ERR 09: ILLEGAL_BUFFER_LENGTH",
1707     - "ERR 10: VLSB_FAULT",
1708     - "ERR 11: ILLEGAL_MEM_ADDR",
1709     - "ERR 12: ILLEGAL_MEM_SEL",
1710     - "ERR 13: ILLEGAL_CONTEXT_ID",
1711     - "ERR 14: ILLEGAL_KEY_ADDR",
1712     - "ERR 15: 0xF Reserved",
1713     - "ERR 16: Zlib_ILLEGAL_MULTI_QUEUE",
1714     - "ERR 17: Zlib_ILLEGAL_JOBID_CHANGE",
1715     - "ERR 18: CMD_TIMEOUT",
1716     - "ERR 19: IDMA0_AXI_SLVERR",
1717     - "ERR 20: IDMA0_AXI_DECERR",
1718     - "ERR 21: 0x15 Reserved",
1719     - "ERR 22: IDMA1_AXI_SLAVE_FAULT",
1720     - "ERR 23: IDMA1_AIXI_DECERR",
1721     - "ERR 24: 0x18 Reserved",
1722     - "ERR 25: ZLIBVHB_AXI_SLVERR",
1723     - "ERR 26: ZLIBVHB_AXI_DECERR",
1724     - "ERR 27: 0x1B Reserved",
1725     - "ERR 27: ZLIB_UNEXPECTED_EOM",
1726     - "ERR 27: ZLIB_EXTRA_DATA",
1727     - "ERR 30: ZLIB_BTYPE",
1728     - "ERR 31: ZLIB_UNDEFINED_SYMBOL",
1729     - "ERR 32: ZLIB_UNDEFINED_DISTANCE_S",
1730     - "ERR 33: ZLIB_CODE_LENGTH_SYMBOL",
1731     - "ERR 34: ZLIB _VHB_ILLEGAL_FETCH",
1732     - "ERR 35: ZLIB_UNCOMPRESSED_LEN",
1733     - "ERR 36: ZLIB_LIMIT_REACHED",
1734     - "ERR 37: ZLIB_CHECKSUM_MISMATCH0",
1735     - "ERR 38: ODMA0_AXI_SLVERR",
1736     - "ERR 39: ODMA0_AXI_DECERR",
1737     - "ERR 40: 0x28 Reserved",
1738     - "ERR 41: ODMA1_AXI_SLVERR",
1739     - "ERR 42: ODMA1_AXI_DECERR",
1740     - "ERR 43: LSB_PARITY_ERR",
1741     + "ILLEGAL_ENGINE",
1742     + "ILLEGAL_KEY_ID",
1743     + "ILLEGAL_FUNCTION_TYPE",
1744     + "ILLEGAL_FUNCTION_MODE",
1745     + "ILLEGAL_FUNCTION_ENCRYPT",
1746     + "ILLEGAL_FUNCTION_SIZE",
1747     + "Zlib_MISSING_INIT_EOM",
1748     + "ILLEGAL_FUNCTION_RSVD",
1749     + "ILLEGAL_BUFFER_LENGTH",
1750     + "VLSB_FAULT",
1751     + "ILLEGAL_MEM_ADDR",
1752     + "ILLEGAL_MEM_SEL",
1753     + "ILLEGAL_CONTEXT_ID",
1754     + "ILLEGAL_KEY_ADDR",
1755     + "0xF Reserved",
1756     + "Zlib_ILLEGAL_MULTI_QUEUE",
1757     + "Zlib_ILLEGAL_JOBID_CHANGE",
1758     + "CMD_TIMEOUT",
1759     + "IDMA0_AXI_SLVERR",
1760     + "IDMA0_AXI_DECERR",
1761     + "0x15 Reserved",
1762     + "IDMA1_AXI_SLAVE_FAULT",
1763     + "IDMA1_AIXI_DECERR",
1764     + "0x18 Reserved",
1765     + "ZLIBVHB_AXI_SLVERR",
1766     + "ZLIBVHB_AXI_DECERR",
1767     + "0x1B Reserved",
1768     + "ZLIB_UNEXPECTED_EOM",
1769     + "ZLIB_EXTRA_DATA",
1770     + "ZLIB_BTYPE",
1771     + "ZLIB_UNDEFINED_SYMBOL",
1772     + "ZLIB_UNDEFINED_DISTANCE_S",
1773     + "ZLIB_CODE_LENGTH_SYMBOL",
1774     + "ZLIB _VHB_ILLEGAL_FETCH",
1775     + "ZLIB_UNCOMPRESSED_LEN",
1776     + "ZLIB_LIMIT_REACHED",
1777     + "ZLIB_CHECKSUM_MISMATCH0",
1778     + "ODMA0_AXI_SLVERR",
1779     + "ODMA0_AXI_DECERR",
1780     + "0x28 Reserved",
1781     + "ODMA1_AXI_SLVERR",
1782     + "ODMA1_AXI_DECERR",
1783     };
1784    
1785     -void ccp_log_error(struct ccp_device *d, int e)
1786     +void ccp_log_error(struct ccp_device *d, unsigned int e)
1787     {
1788     - dev_err(d->dev, "CCP error: %s (0x%x)\n", ccp_error_codes[e], e);
1789     + if (WARN_ON(e >= CCP_MAX_ERROR_CODE))
1790     + return;
1791     +
1792     + if (e < ARRAY_SIZE(ccp_error_codes))
1793     + dev_err(d->dev, "CCP error %d: %s\n", e, ccp_error_codes[e]);
1794     + else
1795     + dev_err(d->dev, "CCP error %d: Unknown Error\n", e);
1796     }
1797    
1798     /* List of CCPs, CCP count, read-write access lock, and access functions
1799     diff --git a/drivers/crypto/ccp/ccp-dev.h b/drivers/crypto/ccp/ccp-dev.h
1800     index 6810b65c1939..7442b0422f8a 100644
1801     --- a/drivers/crypto/ccp/ccp-dev.h
1802     +++ b/drivers/crypto/ccp/ccp-dev.h
1803     @@ -632,7 +632,7 @@ struct ccp5_desc {
1804     void ccp_add_device(struct ccp_device *ccp);
1805     void ccp_del_device(struct ccp_device *ccp);
1806    
1807     -extern void ccp_log_error(struct ccp_device *, int);
1808     +extern void ccp_log_error(struct ccp_device *, unsigned int);
1809    
1810     struct ccp_device *ccp_alloc_struct(struct sp_device *sp);
1811     bool ccp_queues_suspended(struct ccp_device *ccp);
1812     diff --git a/drivers/crypto/ccp/ccp-ops.c b/drivers/crypto/ccp/ccp-ops.c
1813     index 0ea43cdeb05f..e212badd39fa 100644
1814     --- a/drivers/crypto/ccp/ccp-ops.c
1815     +++ b/drivers/crypto/ccp/ccp-ops.c
1816     @@ -625,6 +625,7 @@ static int ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q,
1817    
1818     unsigned long long *final;
1819     unsigned int dm_offset;
1820     + unsigned int jobid;
1821     unsigned int ilen;
1822     bool in_place = true; /* Default value */
1823     int ret;
1824     @@ -663,9 +664,11 @@ static int ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q,
1825     p_tag = scatterwalk_ffwd(sg_tag, p_inp, ilen);
1826     }
1827    
1828     + jobid = CCP_NEW_JOBID(cmd_q->ccp);
1829     +
1830     memset(&op, 0, sizeof(op));
1831     op.cmd_q = cmd_q;
1832     - op.jobid = CCP_NEW_JOBID(cmd_q->ccp);
1833     + op.jobid = jobid;
1834     op.sb_key = cmd_q->sb_key; /* Pre-allocated */
1835     op.sb_ctx = cmd_q->sb_ctx; /* Pre-allocated */
1836     op.init = 1;
1837     @@ -816,6 +819,13 @@ static int ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q,
1838     final[0] = cpu_to_be64(aes->aad_len * 8);
1839     final[1] = cpu_to_be64(ilen * 8);
1840    
1841     + memset(&op, 0, sizeof(op));
1842     + op.cmd_q = cmd_q;
1843     + op.jobid = jobid;
1844     + op.sb_key = cmd_q->sb_key; /* Pre-allocated */
1845     + op.sb_ctx = cmd_q->sb_ctx; /* Pre-allocated */
1846     + op.init = 1;
1847     + op.u.aes.type = aes->type;
1848     op.u.aes.mode = CCP_AES_MODE_GHASH;
1849     op.u.aes.action = CCP_AES_GHASHFINAL;
1850     op.src.type = CCP_MEMTYPE_SYSTEM;
1851     @@ -843,7 +853,8 @@ static int ccp_run_aes_gcm_cmd(struct ccp_cmd_queue *cmd_q,
1852     if (ret)
1853     goto e_tag;
1854    
1855     - ret = memcmp(tag.address, final_wa.address, AES_BLOCK_SIZE);
1856     + ret = crypto_memneq(tag.address, final_wa.address,
1857     + AES_BLOCK_SIZE) ? -EBADMSG : 0;
1858     ccp_dm_free(&tag);
1859     }
1860    
1861     diff --git a/drivers/crypto/inside-secure/safexcel_cipher.c b/drivers/crypto/inside-secure/safexcel_cipher.c
1862     index 3aef1d43e435..42a3830fbd19 100644
1863     --- a/drivers/crypto/inside-secure/safexcel_cipher.c
1864     +++ b/drivers/crypto/inside-secure/safexcel_cipher.c
1865     @@ -51,6 +51,8 @@ struct safexcel_cipher_ctx {
1866    
1867     struct safexcel_cipher_req {
1868     enum safexcel_cipher_direction direction;
1869     + /* Number of result descriptors associated to the request */
1870     + unsigned int rdescs;
1871     bool needs_inv;
1872     };
1873    
1874     @@ -333,7 +335,10 @@ static int safexcel_handle_req_result(struct safexcel_crypto_priv *priv, int rin
1875    
1876     *ret = 0;
1877    
1878     - do {
1879     + if (unlikely(!sreq->rdescs))
1880     + return 0;
1881     +
1882     + while (sreq->rdescs--) {
1883     rdesc = safexcel_ring_next_rptr(priv, &priv->ring[ring].rdr);
1884     if (IS_ERR(rdesc)) {
1885     dev_err(priv->dev,
1886     @@ -346,7 +351,7 @@ static int safexcel_handle_req_result(struct safexcel_crypto_priv *priv, int rin
1887     *ret = safexcel_rdesc_check_errors(priv, rdesc);
1888    
1889     ndesc++;
1890     - } while (!rdesc->last_seg);
1891     + }
1892    
1893     safexcel_complete(priv, ring);
1894    
1895     @@ -501,6 +506,7 @@ cdesc_rollback:
1896     static int safexcel_handle_inv_result(struct safexcel_crypto_priv *priv,
1897     int ring,
1898     struct crypto_async_request *base,
1899     + struct safexcel_cipher_req *sreq,
1900     bool *should_complete, int *ret)
1901     {
1902     struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(base->tfm);
1903     @@ -509,7 +515,10 @@ static int safexcel_handle_inv_result(struct safexcel_crypto_priv *priv,
1904    
1905     *ret = 0;
1906    
1907     - do {
1908     + if (unlikely(!sreq->rdescs))
1909     + return 0;
1910     +
1911     + while (sreq->rdescs--) {
1912     rdesc = safexcel_ring_next_rptr(priv, &priv->ring[ring].rdr);
1913     if (IS_ERR(rdesc)) {
1914     dev_err(priv->dev,
1915     @@ -522,7 +531,7 @@ static int safexcel_handle_inv_result(struct safexcel_crypto_priv *priv,
1916     *ret = safexcel_rdesc_check_errors(priv, rdesc);
1917    
1918     ndesc++;
1919     - } while (!rdesc->last_seg);
1920     + }
1921    
1922     safexcel_complete(priv, ring);
1923    
1924     @@ -564,7 +573,7 @@ static int safexcel_skcipher_handle_result(struct safexcel_crypto_priv *priv,
1925    
1926     if (sreq->needs_inv) {
1927     sreq->needs_inv = false;
1928     - err = safexcel_handle_inv_result(priv, ring, async,
1929     + err = safexcel_handle_inv_result(priv, ring, async, sreq,
1930     should_complete, ret);
1931     } else {
1932     err = safexcel_handle_req_result(priv, ring, async, req->src,
1933     @@ -587,7 +596,7 @@ static int safexcel_aead_handle_result(struct safexcel_crypto_priv *priv,
1934    
1935     if (sreq->needs_inv) {
1936     sreq->needs_inv = false;
1937     - err = safexcel_handle_inv_result(priv, ring, async,
1938     + err = safexcel_handle_inv_result(priv, ring, async, sreq,
1939     should_complete, ret);
1940     } else {
1941     err = safexcel_handle_req_result(priv, ring, async, req->src,
1942     @@ -633,6 +642,8 @@ static int safexcel_skcipher_send(struct crypto_async_request *async, int ring,
1943     ret = safexcel_send_req(async, ring, sreq, req->src,
1944     req->dst, req->cryptlen, 0, 0, req->iv,
1945     commands, results);
1946     +
1947     + sreq->rdescs = *results;
1948     return ret;
1949     }
1950    
1951     @@ -655,6 +666,7 @@ static int safexcel_aead_send(struct crypto_async_request *async, int ring,
1952     req->cryptlen, req->assoclen,
1953     crypto_aead_authsize(tfm), req->iv,
1954     commands, results);
1955     + sreq->rdescs = *results;
1956     return ret;
1957     }
1958    
1959     diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
1960     index 5849075d54c7..41b288bdcdbf 100644
1961     --- a/drivers/crypto/talitos.c
1962     +++ b/drivers/crypto/talitos.c
1963     @@ -1001,7 +1001,6 @@ static void ipsec_esp_encrypt_done(struct device *dev,
1964     unsigned int authsize = crypto_aead_authsize(authenc);
1965     unsigned int ivsize = crypto_aead_ivsize(authenc);
1966     struct talitos_edesc *edesc;
1967     - struct scatterlist *sg;
1968     void *icvdata;
1969    
1970     edesc = container_of(desc, struct talitos_edesc, desc);
1971     @@ -1015,9 +1014,8 @@ static void ipsec_esp_encrypt_done(struct device *dev,
1972     else
1973     icvdata = &edesc->link_tbl[edesc->src_nents +
1974     edesc->dst_nents + 2];
1975     - sg = sg_last(areq->dst, edesc->dst_nents);
1976     - memcpy((char *)sg_virt(sg) + sg->length - authsize,
1977     - icvdata, authsize);
1978     + sg_pcopy_from_buffer(areq->dst, edesc->dst_nents ? : 1, icvdata,
1979     + authsize, areq->assoclen + areq->cryptlen);
1980     }
1981    
1982     dma_unmap_single(dev, edesc->iv_dma, ivsize, DMA_TO_DEVICE);
1983     @@ -1035,7 +1033,6 @@ static void ipsec_esp_decrypt_swauth_done(struct device *dev,
1984     struct crypto_aead *authenc = crypto_aead_reqtfm(req);
1985     unsigned int authsize = crypto_aead_authsize(authenc);
1986     struct talitos_edesc *edesc;
1987     - struct scatterlist *sg;
1988     char *oicv, *icv;
1989     struct talitos_private *priv = dev_get_drvdata(dev);
1990     bool is_sec1 = has_ftr_sec1(priv);
1991     @@ -1045,9 +1042,18 @@ static void ipsec_esp_decrypt_swauth_done(struct device *dev,
1992     ipsec_esp_unmap(dev, edesc, req);
1993    
1994     if (!err) {
1995     + char icvdata[SHA512_DIGEST_SIZE];
1996     + int nents = edesc->dst_nents ? : 1;
1997     + unsigned int len = req->assoclen + req->cryptlen;
1998     +
1999     /* auth check */
2000     - sg = sg_last(req->dst, edesc->dst_nents ? : 1);
2001     - icv = (char *)sg_virt(sg) + sg->length - authsize;
2002     + if (nents > 1) {
2003     + sg_pcopy_to_buffer(req->dst, nents, icvdata, authsize,
2004     + len - authsize);
2005     + icv = icvdata;
2006     + } else {
2007     + icv = (char *)sg_virt(req->dst) + len - authsize;
2008     + }
2009    
2010     if (edesc->dma_len) {
2011     if (is_sec1)
2012     @@ -1463,7 +1469,6 @@ static int aead_decrypt(struct aead_request *req)
2013     struct talitos_ctx *ctx = crypto_aead_ctx(authenc);
2014     struct talitos_private *priv = dev_get_drvdata(ctx->dev);
2015     struct talitos_edesc *edesc;
2016     - struct scatterlist *sg;
2017     void *icvdata;
2018    
2019     req->cryptlen -= authsize;
2020     @@ -1497,9 +1502,8 @@ static int aead_decrypt(struct aead_request *req)
2021     else
2022     icvdata = &edesc->link_tbl[0];
2023    
2024     - sg = sg_last(req->src, edesc->src_nents ? : 1);
2025     -
2026     - memcpy(icvdata, (char *)sg_virt(sg) + sg->length - authsize, authsize);
2027     + sg_pcopy_to_buffer(req->src, edesc->src_nents ? : 1, icvdata, authsize,
2028     + req->assoclen + req->cryptlen - authsize);
2029    
2030     return ipsec_esp(edesc, req, ipsec_esp_decrypt_swauth_done);
2031     }
2032     @@ -1553,11 +1557,15 @@ static void ablkcipher_done(struct device *dev,
2033     int err)
2034     {
2035     struct ablkcipher_request *areq = context;
2036     + struct crypto_ablkcipher *cipher = crypto_ablkcipher_reqtfm(areq);
2037     + struct talitos_ctx *ctx = crypto_ablkcipher_ctx(cipher);
2038     + unsigned int ivsize = crypto_ablkcipher_ivsize(cipher);
2039     struct talitos_edesc *edesc;
2040    
2041     edesc = container_of(desc, struct talitos_edesc, desc);
2042    
2043     common_nonsnoop_unmap(dev, edesc, areq);
2044     + memcpy(areq->info, ctx->iv, ivsize);
2045    
2046     kfree(edesc);
2047    
2048     @@ -3185,7 +3193,10 @@ static struct talitos_crypto_alg *talitos_alg_alloc(struct device *dev,
2049     alg->cra_priority = t_alg->algt.priority;
2050     else
2051     alg->cra_priority = TALITOS_CRA_PRIORITY;
2052     - alg->cra_alignmask = 0;
2053     + if (has_ftr_sec1(priv))
2054     + alg->cra_alignmask = 3;
2055     + else
2056     + alg->cra_alignmask = 0;
2057     alg->cra_ctxsize = sizeof(struct talitos_ctx);
2058     alg->cra_flags |= CRYPTO_ALG_KERN_DRIVER_ONLY;
2059    
2060     diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c
2061     index 1c658ec3cbf4..3f5a01cb4ab4 100644
2062     --- a/drivers/dma/imx-sdma.c
2063     +++ b/drivers/dma/imx-sdma.c
2064     @@ -2039,27 +2039,6 @@ static int sdma_probe(struct platform_device *pdev)
2065     if (pdata && pdata->script_addrs)
2066     sdma_add_scripts(sdma, pdata->script_addrs);
2067    
2068     - if (pdata) {
2069     - ret = sdma_get_firmware(sdma, pdata->fw_name);
2070     - if (ret)
2071     - dev_warn(&pdev->dev, "failed to get firmware from platform data\n");
2072     - } else {
2073     - /*
2074     - * Because that device tree does not encode ROM script address,
2075     - * the RAM script in firmware is mandatory for device tree
2076     - * probe, otherwise it fails.
2077     - */
2078     - ret = of_property_read_string(np, "fsl,sdma-ram-script-name",
2079     - &fw_name);
2080     - if (ret)
2081     - dev_warn(&pdev->dev, "failed to get firmware name\n");
2082     - else {
2083     - ret = sdma_get_firmware(sdma, fw_name);
2084     - if (ret)
2085     - dev_warn(&pdev->dev, "failed to get firmware from device tree\n");
2086     - }
2087     - }
2088     -
2089     sdma->dma_device.dev = &pdev->dev;
2090    
2091     sdma->dma_device.device_alloc_chan_resources = sdma_alloc_chan_resources;
2092     @@ -2103,6 +2082,33 @@ static int sdma_probe(struct platform_device *pdev)
2093     of_node_put(spba_bus);
2094     }
2095    
2096     + /*
2097     + * Kick off firmware loading as the very last step:
2098     + * attempt to load firmware only if we're not on the error path, because
2099     + * the firmware callback requires a fully functional and allocated sdma
2100     + * instance.
2101     + */
2102     + if (pdata) {
2103     + ret = sdma_get_firmware(sdma, pdata->fw_name);
2104     + if (ret)
2105     + dev_warn(&pdev->dev, "failed to get firmware from platform data\n");
2106     + } else {
2107     + /*
2108     + * Because that device tree does not encode ROM script address,
2109     + * the RAM script in firmware is mandatory for device tree
2110     + * probe, otherwise it fails.
2111     + */
2112     + ret = of_property_read_string(np, "fsl,sdma-ram-script-name",
2113     + &fw_name);
2114     + if (ret) {
2115     + dev_warn(&pdev->dev, "failed to get firmware name\n");
2116     + } else {
2117     + ret = sdma_get_firmware(sdma, fw_name);
2118     + if (ret)
2119     + dev_warn(&pdev->dev, "failed to get firmware from device tree\n");
2120     + }
2121     + }
2122     +
2123     return 0;
2124    
2125     err_register:
2126     diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c
2127     index 20374b8248f0..d4545a9222a0 100644
2128     --- a/drivers/edac/edac_mc_sysfs.c
2129     +++ b/drivers/edac/edac_mc_sysfs.c
2130     @@ -26,7 +26,7 @@
2131     static int edac_mc_log_ue = 1;
2132     static int edac_mc_log_ce = 1;
2133     static int edac_mc_panic_on_ue;
2134     -static int edac_mc_poll_msec = 1000;
2135     +static unsigned int edac_mc_poll_msec = 1000;
2136    
2137     /* Getter functions for above */
2138     int edac_mc_get_log_ue(void)
2139     @@ -45,30 +45,30 @@ int edac_mc_get_panic_on_ue(void)
2140     }
2141    
2142     /* this is temporary */
2143     -int edac_mc_get_poll_msec(void)
2144     +unsigned int edac_mc_get_poll_msec(void)
2145     {
2146     return edac_mc_poll_msec;
2147     }
2148    
2149     static int edac_set_poll_msec(const char *val, const struct kernel_param *kp)
2150     {
2151     - unsigned long l;
2152     + unsigned int i;
2153     int ret;
2154    
2155     if (!val)
2156     return -EINVAL;
2157    
2158     - ret = kstrtoul(val, 0, &l);
2159     + ret = kstrtouint(val, 0, &i);
2160     if (ret)
2161     return ret;
2162    
2163     - if (l < 1000)
2164     + if (i < 1000)
2165     return -EINVAL;
2166    
2167     - *((unsigned long *)kp->arg) = l;
2168     + *((unsigned int *)kp->arg) = i;
2169    
2170     /* notify edac_mc engine to reset the poll period */
2171     - edac_mc_reset_delay_period(l);
2172     + edac_mc_reset_delay_period(i);
2173    
2174     return 0;
2175     }
2176     @@ -82,7 +82,7 @@ MODULE_PARM_DESC(edac_mc_log_ue,
2177     module_param(edac_mc_log_ce, int, 0644);
2178     MODULE_PARM_DESC(edac_mc_log_ce,
2179     "Log correctable error to console: 0=off 1=on");
2180     -module_param_call(edac_mc_poll_msec, edac_set_poll_msec, param_get_int,
2181     +module_param_call(edac_mc_poll_msec, edac_set_poll_msec, param_get_uint,
2182     &edac_mc_poll_msec, 0644);
2183     MODULE_PARM_DESC(edac_mc_poll_msec, "Polling period in milliseconds");
2184    
2185     @@ -404,6 +404,8 @@ static inline int nr_pages_per_csrow(struct csrow_info *csrow)
2186     static int edac_create_csrow_object(struct mem_ctl_info *mci,
2187     struct csrow_info *csrow, int index)
2188     {
2189     + int err;
2190     +
2191     csrow->dev.type = &csrow_attr_type;
2192     csrow->dev.bus = mci->bus;
2193     csrow->dev.groups = csrow_dev_groups;
2194     @@ -416,7 +418,11 @@ static int edac_create_csrow_object(struct mem_ctl_info *mci,
2195     edac_dbg(0, "creating (virtual) csrow node %s\n",
2196     dev_name(&csrow->dev));
2197    
2198     - return device_add(&csrow->dev);
2199     + err = device_add(&csrow->dev);
2200     + if (err)
2201     + put_device(&csrow->dev);
2202     +
2203     + return err;
2204     }
2205    
2206     /* Create a CSROW object under specifed edac_mc_device */
2207     diff --git a/drivers/edac/edac_module.h b/drivers/edac/edac_module.h
2208     index dec88dcea036..c9f0e73872a6 100644
2209     --- a/drivers/edac/edac_module.h
2210     +++ b/drivers/edac/edac_module.h
2211     @@ -36,7 +36,7 @@ extern int edac_mc_get_log_ue(void);
2212     extern int edac_mc_get_log_ce(void);
2213     extern int edac_mc_get_panic_on_ue(void);
2214     extern int edac_get_poll_msec(void);
2215     -extern int edac_mc_get_poll_msec(void);
2216     +extern unsigned int edac_mc_get_poll_msec(void);
2217    
2218     unsigned edac_dimm_info_location(struct dimm_info *dimm, char *buf,
2219     unsigned len);
2220     diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
2221     index 6fa430d98517..feabac40743e 100644
2222     --- a/drivers/gpio/gpio-omap.c
2223     +++ b/drivers/gpio/gpio-omap.c
2224     @@ -837,9 +837,9 @@ static void omap_gpio_irq_shutdown(struct irq_data *d)
2225    
2226     raw_spin_lock_irqsave(&bank->lock, flags);
2227     bank->irq_usage &= ~(BIT(offset));
2228     - omap_set_gpio_irqenable(bank, offset, 0);
2229     - omap_clear_gpio_irqstatus(bank, offset);
2230     omap_set_gpio_triggering(bank, offset, IRQ_TYPE_NONE);
2231     + omap_clear_gpio_irqstatus(bank, offset);
2232     + omap_set_gpio_irqenable(bank, offset, 0);
2233     if (!LINE_USED(bank->mod_usage, offset))
2234     omap_clear_gpio_debounce(bank, offset);
2235     omap_disable_gpio_module(bank, offset);
2236     @@ -881,8 +881,8 @@ static void omap_gpio_mask_irq(struct irq_data *d)
2237     unsigned long flags;
2238    
2239     raw_spin_lock_irqsave(&bank->lock, flags);
2240     - omap_set_gpio_irqenable(bank, offset, 0);
2241     omap_set_gpio_triggering(bank, offset, IRQ_TYPE_NONE);
2242     + omap_set_gpio_irqenable(bank, offset, 0);
2243     raw_spin_unlock_irqrestore(&bank->lock, flags);
2244     }
2245    
2246     @@ -894,9 +894,6 @@ static void omap_gpio_unmask_irq(struct irq_data *d)
2247     unsigned long flags;
2248    
2249     raw_spin_lock_irqsave(&bank->lock, flags);
2250     - if (trigger)
2251     - omap_set_gpio_triggering(bank, offset, trigger);
2252     -
2253     omap_set_gpio_irqenable(bank, offset, 1);
2254    
2255     /*
2256     @@ -904,9 +901,13 @@ static void omap_gpio_unmask_irq(struct irq_data *d)
2257     * is cleared, thus after the handler has run. OMAP4 needs this done
2258     * after enabing the interrupt to clear the wakeup status.
2259     */
2260     - if (bank->level_mask & BIT(offset))
2261     + if (bank->regs->leveldetect0 && bank->regs->wkup_en &&
2262     + trigger & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW))
2263     omap_clear_gpio_irqstatus(bank, offset);
2264    
2265     + if (trigger)
2266     + omap_set_gpio_triggering(bank, offset, trigger);
2267     +
2268     raw_spin_unlock_irqrestore(&bank->lock, flags);
2269     }
2270    
2271     @@ -1687,6 +1688,8 @@ static struct omap_gpio_reg_offs omap4_gpio_regs = {
2272     .clr_dataout = OMAP4_GPIO_CLEARDATAOUT,
2273     .irqstatus = OMAP4_GPIO_IRQSTATUS0,
2274     .irqstatus2 = OMAP4_GPIO_IRQSTATUS1,
2275     + .irqstatus_raw0 = OMAP4_GPIO_IRQSTATUSRAW0,
2276     + .irqstatus_raw1 = OMAP4_GPIO_IRQSTATUSRAW1,
2277     .irqenable = OMAP4_GPIO_IRQSTATUSSET0,
2278     .irqenable2 = OMAP4_GPIO_IRQSTATUSSET1,
2279     .set_irqenable = OMAP4_GPIO_IRQSTATUSSET0,
2280     diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
2281     index fd713326dcfc..4a48c7c47709 100644
2282     --- a/drivers/gpio/gpiolib.c
2283     +++ b/drivers/gpio/gpiolib.c
2284     @@ -2877,7 +2877,7 @@ int gpiod_get_array_value_complex(bool raw, bool can_sleep,
2285     int gpiod_get_raw_value(const struct gpio_desc *desc)
2286     {
2287     VALIDATE_DESC(desc);
2288     - /* Should be using gpio_get_value_cansleep() */
2289     + /* Should be using gpiod_get_raw_value_cansleep() */
2290     WARN_ON(desc->gdev->chip->can_sleep);
2291     return gpiod_get_raw_value_commit(desc);
2292     }
2293     @@ -2898,7 +2898,7 @@ int gpiod_get_value(const struct gpio_desc *desc)
2294     int value;
2295    
2296     VALIDATE_DESC(desc);
2297     - /* Should be using gpio_get_value_cansleep() */
2298     + /* Should be using gpiod_get_value_cansleep() */
2299     WARN_ON(desc->gdev->chip->can_sleep);
2300    
2301     value = gpiod_get_raw_value_commit(desc);
2302     @@ -3123,7 +3123,7 @@ int gpiod_set_array_value_complex(bool raw, bool can_sleep,
2303     void gpiod_set_raw_value(struct gpio_desc *desc, int value)
2304     {
2305     VALIDATE_DESC_VOID(desc);
2306     - /* Should be using gpiod_set_value_cansleep() */
2307     + /* Should be using gpiod_set_raw_value_cansleep() */
2308     WARN_ON(desc->gdev->chip->can_sleep);
2309     gpiod_set_raw_value_commit(desc, value);
2310     }
2311     @@ -3164,6 +3164,7 @@ static void gpiod_set_value_nocheck(struct gpio_desc *desc, int value)
2312     void gpiod_set_value(struct gpio_desc *desc, int value)
2313     {
2314     VALIDATE_DESC_VOID(desc);
2315     + /* Should be using gpiod_set_value_cansleep() */
2316     WARN_ON(desc->gdev->chip->can_sleep);
2317     gpiod_set_value_nocheck(desc, value);
2318     }
2319     diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
2320     index 5965f6383ada..e5e7e65934da 100644
2321     --- a/drivers/gpu/drm/drm_edid.c
2322     +++ b/drivers/gpu/drm/drm_edid.c
2323     @@ -1349,6 +1349,7 @@ MODULE_PARM_DESC(edid_fixup,
2324    
2325     static void drm_get_displayid(struct drm_connector *connector,
2326     struct edid *edid);
2327     +static int validate_displayid(u8 *displayid, int length, int idx);
2328    
2329     static int drm_edid_block_checksum(const u8 *raw_edid)
2330     {
2331     @@ -2932,16 +2933,46 @@ static u8 *drm_find_edid_extension(const struct edid *edid, int ext_id)
2332     return edid_ext;
2333     }
2334    
2335     -static u8 *drm_find_cea_extension(const struct edid *edid)
2336     -{
2337     - return drm_find_edid_extension(edid, CEA_EXT);
2338     -}
2339    
2340     static u8 *drm_find_displayid_extension(const struct edid *edid)
2341     {
2342     return drm_find_edid_extension(edid, DISPLAYID_EXT);
2343     }
2344    
2345     +static u8 *drm_find_cea_extension(const struct edid *edid)
2346     +{
2347     + int ret;
2348     + int idx = 1;
2349     + int length = EDID_LENGTH;
2350     + struct displayid_block *block;
2351     + u8 *cea;
2352     + u8 *displayid;
2353     +
2354     + /* Look for a top level CEA extension block */
2355     + cea = drm_find_edid_extension(edid, CEA_EXT);
2356     + if (cea)
2357     + return cea;
2358     +
2359     + /* CEA blocks can also be found embedded in a DisplayID block */
2360     + displayid = drm_find_displayid_extension(edid);
2361     + if (!displayid)
2362     + return NULL;
2363     +
2364     + ret = validate_displayid(displayid, length, idx);
2365     + if (ret)
2366     + return NULL;
2367     +
2368     + idx += sizeof(struct displayid_hdr);
2369     + for_each_displayid_db(displayid, block, idx, length) {
2370     + if (block->tag == DATA_BLOCK_CTA) {
2371     + cea = (u8 *)block;
2372     + break;
2373     + }
2374     + }
2375     +
2376     + return cea;
2377     +}
2378     +
2379     /*
2380     * Calculate the alternate clock for the CEA mode
2381     * (60Hz vs. 59.94Hz etc.)
2382     @@ -3665,13 +3696,38 @@ cea_revision(const u8 *cea)
2383     static int
2384     cea_db_offsets(const u8 *cea, int *start, int *end)
2385     {
2386     - /* Data block offset in CEA extension block */
2387     - *start = 4;
2388     - *end = cea[2];
2389     - if (*end == 0)
2390     - *end = 127;
2391     - if (*end < 4 || *end > 127)
2392     - return -ERANGE;
2393     + /* DisplayID CTA extension blocks and top-level CEA EDID
2394     + * block header definitions differ in the following bytes:
2395     + * 1) Byte 2 of the header specifies length differently,
2396     + * 2) Byte 3 is only present in the CEA top level block.
2397     + *
2398     + * The different definitions for byte 2 follow.
2399     + *
2400     + * DisplayID CTA extension block defines byte 2 as:
2401     + * Number of payload bytes
2402     + *
2403     + * CEA EDID block defines byte 2 as:
2404     + * Byte number (decimal) within this block where the 18-byte
2405     + * DTDs begin. If no non-DTD data is present in this extension
2406     + * block, the value should be set to 04h (the byte after next).
2407     + * If set to 00h, there are no DTDs present in this block and
2408     + * no non-DTD data.
2409     + */
2410     + if (cea[0] == DATA_BLOCK_CTA) {
2411     + *start = 3;
2412     + *end = *start + cea[2];
2413     + } else if (cea[0] == CEA_EXT) {
2414     + /* Data block offset in CEA extension block */
2415     + *start = 4;
2416     + *end = cea[2];
2417     + if (*end == 0)
2418     + *end = 127;
2419     + if (*end < 4 || *end > 127)
2420     + return -ERANGE;
2421     + } else {
2422     + return -ENOTSUPP;
2423     + }
2424     +
2425     return 0;
2426     }
2427    
2428     @@ -5218,6 +5274,9 @@ static int drm_parse_display_id(struct drm_connector *connector,
2429     case DATA_BLOCK_TYPE_1_DETAILED_TIMING:
2430     /* handled in mode gathering code. */
2431     break;
2432     + case DATA_BLOCK_CTA:
2433     + /* handled in the cea parser code. */
2434     + break;
2435     default:
2436     DRM_DEBUG_KMS("found DisplayID tag 0x%x, unhandled\n", block->tag);
2437     break;
2438     diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c
2439     index ecacb22834d7..719345074711 100644
2440     --- a/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c
2441     +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.c
2442     @@ -184,6 +184,25 @@ nvkm_i2c_fini(struct nvkm_subdev *subdev, bool suspend)
2443     return 0;
2444     }
2445    
2446     +static int
2447     +nvkm_i2c_preinit(struct nvkm_subdev *subdev)
2448     +{
2449     + struct nvkm_i2c *i2c = nvkm_i2c(subdev);
2450     + struct nvkm_i2c_bus *bus;
2451     + struct nvkm_i2c_pad *pad;
2452     +
2453     + /*
2454     + * We init our i2c busses as early as possible, since they may be
2455     + * needed by the vbios init scripts on some cards
2456     + */
2457     + list_for_each_entry(pad, &i2c->pad, head)
2458     + nvkm_i2c_pad_init(pad);
2459     + list_for_each_entry(bus, &i2c->bus, head)
2460     + nvkm_i2c_bus_init(bus);
2461     +
2462     + return 0;
2463     +}
2464     +
2465     static int
2466     nvkm_i2c_init(struct nvkm_subdev *subdev)
2467     {
2468     @@ -238,6 +257,7 @@ nvkm_i2c_dtor(struct nvkm_subdev *subdev)
2469     static const struct nvkm_subdev_func
2470     nvkm_i2c = {
2471     .dtor = nvkm_i2c_dtor,
2472     + .preinit = nvkm_i2c_preinit,
2473     .init = nvkm_i2c_init,
2474     .fini = nvkm_i2c_fini,
2475     .intr = nvkm_i2c_intr,
2476     diff --git a/drivers/gpu/ipu-v3/ipu-ic.c b/drivers/gpu/ipu-v3/ipu-ic.c
2477     index 67cc820253a9..fb79e118f26c 100644
2478     --- a/drivers/gpu/ipu-v3/ipu-ic.c
2479     +++ b/drivers/gpu/ipu-v3/ipu-ic.c
2480     @@ -257,7 +257,7 @@ static int init_csc(struct ipu_ic *ic,
2481     writel(param, base++);
2482    
2483     param = ((a[0] & 0x1fe0) >> 5) | (params->scale << 8) |
2484     - (params->sat << 9);
2485     + (params->sat << 10);
2486     writel(param, base++);
2487    
2488     param = ((a[1] & 0x1f) << 27) | ((c[0][1] & 0x1ff) << 18) |
2489     diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c
2490     index 0bdd85d486fe..9cd4705b74bd 100644
2491     --- a/drivers/hid/wacom_sys.c
2492     +++ b/drivers/hid/wacom_sys.c
2493     @@ -275,6 +275,9 @@ static void wacom_feature_mapping(struct hid_device *hdev,
2494     wacom_hid_usage_quirk(hdev, field, usage);
2495    
2496     switch (equivalent_usage) {
2497     + case WACOM_HID_WD_TOUCH_RING_SETTING:
2498     + wacom->generic_has_leds = true;
2499     + break;
2500     case HID_DG_CONTACTMAX:
2501     /* leave touch_max as is if predefined */
2502     if (!features->touch_max) {
2503     diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
2504     index d7c3f4ac2c04..0ae848369474 100644
2505     --- a/drivers/hid/wacom_wac.c
2506     +++ b/drivers/hid/wacom_wac.c
2507     @@ -1928,8 +1928,6 @@ static void wacom_wac_pad_usage_mapping(struct hid_device *hdev,
2508     features->device_type |= WACOM_DEVICETYPE_PAD;
2509     break;
2510     case WACOM_HID_WD_BUTTONCENTER:
2511     - wacom->generic_has_leds = true;
2512     - /* fall through */
2513     case WACOM_HID_WD_BUTTONHOME:
2514     case WACOM_HID_WD_BUTTONUP:
2515     case WACOM_HID_WD_BUTTONDOWN:
2516     @@ -2121,14 +2119,12 @@ static void wacom_wac_pad_report(struct hid_device *hdev,
2517     bool active = wacom_wac->hid_data.inrange_state != 0;
2518    
2519     /* report prox for expresskey events */
2520     - if ((wacom_equivalent_usage(field->physical) == HID_DG_TABLETFUNCTIONKEY) &&
2521     - wacom_wac->hid_data.pad_input_event_flag) {
2522     + if (wacom_wac->hid_data.pad_input_event_flag) {
2523     input_event(input, EV_ABS, ABS_MISC, active ? PAD_DEVICE_ID : 0);
2524     input_sync(input);
2525     if (!active)
2526     wacom_wac->hid_data.pad_input_event_flag = false;
2527     }
2528     -
2529     }
2530    
2531     static void wacom_wac_pen_usage_mapping(struct hid_device *hdev,
2532     @@ -2725,9 +2721,7 @@ static int wacom_wac_collection(struct hid_device *hdev, struct hid_report *repo
2533     if (report->type != HID_INPUT_REPORT)
2534     return -1;
2535    
2536     - if (WACOM_PAD_FIELD(field) && wacom->wacom_wac.pad_input)
2537     - wacom_wac_pad_report(hdev, report, field);
2538     - else if (WACOM_PEN_FIELD(field) && wacom->wacom_wac.pen_input)
2539     + if (WACOM_PEN_FIELD(field) && wacom->wacom_wac.pen_input)
2540     wacom_wac_pen_report(hdev, report);
2541     else if (WACOM_FINGER_FIELD(field) && wacom->wacom_wac.touch_input)
2542     wacom_wac_finger_report(hdev, report);
2543     @@ -2741,7 +2735,7 @@ void wacom_wac_report(struct hid_device *hdev, struct hid_report *report)
2544     struct wacom_wac *wacom_wac = &wacom->wacom_wac;
2545     struct hid_field *field;
2546     bool pad_in_hid_field = false, pen_in_hid_field = false,
2547     - finger_in_hid_field = false;
2548     + finger_in_hid_field = false, true_pad = false;
2549     int r;
2550     int prev_collection = -1;
2551    
2552     @@ -2757,6 +2751,8 @@ void wacom_wac_report(struct hid_device *hdev, struct hid_report *report)
2553     pen_in_hid_field = true;
2554     if (WACOM_FINGER_FIELD(field))
2555     finger_in_hid_field = true;
2556     + if (wacom_equivalent_usage(field->physical) == HID_DG_TABLETFUNCTIONKEY)
2557     + true_pad = true;
2558     }
2559    
2560     wacom_wac_battery_pre_report(hdev, report);
2561     @@ -2780,6 +2776,9 @@ void wacom_wac_report(struct hid_device *hdev, struct hid_report *report)
2562     }
2563    
2564     wacom_wac_battery_report(hdev, report);
2565     +
2566     + if (true_pad && wacom->wacom_wac.pad_input)
2567     + wacom_wac_pad_report(hdev, report, field);
2568     }
2569    
2570     static int wacom_bpt_touch(struct wacom_wac *wacom)
2571     @@ -3735,7 +3734,7 @@ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev,
2572     0, 5920, 4, 0);
2573     }
2574     input_abs_set_res(input_dev, ABS_MT_POSITION_X, 40);
2575     - input_abs_set_res(input_dev, ABS_MT_POSITION_X, 40);
2576     + input_abs_set_res(input_dev, ABS_MT_POSITION_Y, 40);
2577    
2578     /* fall through */
2579    
2580     diff --git a/drivers/hid/wacom_wac.h b/drivers/hid/wacom_wac.h
2581     index 295fd3718caa..f67d871841c0 100644
2582     --- a/drivers/hid/wacom_wac.h
2583     +++ b/drivers/hid/wacom_wac.h
2584     @@ -145,6 +145,7 @@
2585     #define WACOM_HID_WD_OFFSETBOTTOM (WACOM_HID_UP_WACOMDIGITIZER | 0x0d33)
2586     #define WACOM_HID_WD_DATAMODE (WACOM_HID_UP_WACOMDIGITIZER | 0x1002)
2587     #define WACOM_HID_WD_DIGITIZERINFO (WACOM_HID_UP_WACOMDIGITIZER | 0x1013)
2588     +#define WACOM_HID_WD_TOUCH_RING_SETTING (WACOM_HID_UP_WACOMDIGITIZER | 0x1032)
2589     #define WACOM_HID_UP_G9 0xff090000
2590     #define WACOM_HID_G9_PEN (WACOM_HID_UP_G9 | 0x02)
2591     #define WACOM_HID_G9_TOUCHSCREEN (WACOM_HID_UP_G9 | 0x11)
2592     diff --git a/drivers/hwtracing/intel_th/msu.c b/drivers/hwtracing/intel_th/msu.c
2593     index 8ff326c0c406..3cdf85b1ce4f 100644
2594     --- a/drivers/hwtracing/intel_th/msu.c
2595     +++ b/drivers/hwtracing/intel_th/msu.c
2596     @@ -632,7 +632,7 @@ static int msc_buffer_contig_alloc(struct msc *msc, unsigned long size)
2597     goto err_out;
2598    
2599     ret = -ENOMEM;
2600     - page = alloc_pages(GFP_KERNEL | __GFP_ZERO, order);
2601     + page = alloc_pages(GFP_KERNEL | __GFP_ZERO | GFP_DMA32, order);
2602     if (!page)
2603     goto err_free_sgt;
2604    
2605     diff --git a/drivers/hwtracing/intel_th/pci.c b/drivers/hwtracing/intel_th/pci.c
2606     index 70f2cb90adc5..e759ac0d48be 100644
2607     --- a/drivers/hwtracing/intel_th/pci.c
2608     +++ b/drivers/hwtracing/intel_th/pci.c
2609     @@ -170,6 +170,11 @@ static const struct pci_device_id intel_th_pci_id_table[] = {
2610     PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x02a6),
2611     .driver_data = (kernel_ulong_t)&intel_th_2x,
2612     },
2613     + {
2614     + /* Ice Lake NNPI */
2615     + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x45c5),
2616     + .driver_data = (kernel_ulong_t)&intel_th_2x,
2617     + },
2618     { 0 },
2619     };
2620    
2621     diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
2622     index 8cc4da62f050..53eccc0da8fd 100644
2623     --- a/drivers/infiniband/hw/mlx5/main.c
2624     +++ b/drivers/infiniband/hw/mlx5/main.c
2625     @@ -939,15 +939,19 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
2626     }
2627    
2628     if (MLX5_CAP_GEN(mdev, tag_matching)) {
2629     - props->tm_caps.max_rndv_hdr_size = MLX5_TM_MAX_RNDV_MSG_SIZE;
2630     props->tm_caps.max_num_tags =
2631     (1 << MLX5_CAP_GEN(mdev, log_tag_matching_list_sz)) - 1;
2632     - props->tm_caps.flags = IB_TM_CAP_RC;
2633     props->tm_caps.max_ops =
2634     1 << MLX5_CAP_GEN(mdev, log_max_qp_sz);
2635     props->tm_caps.max_sge = MLX5_TM_MAX_SGE;
2636     }
2637    
2638     + if (MLX5_CAP_GEN(mdev, tag_matching) &&
2639     + MLX5_CAP_GEN(mdev, rndv_offload_rc)) {
2640     + props->tm_caps.flags = IB_TM_CAP_RNDV_RC;
2641     + props->tm_caps.max_rndv_hdr_size = MLX5_TM_MAX_RNDV_MSG_SIZE;
2642     + }
2643     +
2644     if (MLX5_CAP_GEN(dev->mdev, cq_moderation)) {
2645     props->cq_caps.max_cq_moderation_count =
2646     MLX5_MAX_CQ_COUNT;
2647     diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c
2648     index 30f840f874b3..009615499b37 100644
2649     --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
2650     +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
2651     @@ -1997,6 +1997,7 @@ static int ipoib_get_vf_config(struct net_device *dev, int vf,
2652     return err;
2653    
2654     ivf->vf = vf;
2655     + memcpy(ivf->mac, dev->dev_addr, dev->addr_len);
2656    
2657     return 0;
2658     }
2659     diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
2660     index 0a6f7ca883e7..dd80ff6cc427 100644
2661     --- a/drivers/input/mouse/alps.c
2662     +++ b/drivers/input/mouse/alps.c
2663     @@ -24,6 +24,7 @@
2664    
2665     #include "psmouse.h"
2666     #include "alps.h"
2667     +#include "trackpoint.h"
2668    
2669     /*
2670     * Definitions for ALPS version 3 and 4 command mode protocol
2671     @@ -2864,6 +2865,23 @@ static const struct alps_protocol_info *alps_match_table(unsigned char *e7,
2672     return NULL;
2673     }
2674    
2675     +static bool alps_is_cs19_trackpoint(struct psmouse *psmouse)
2676     +{
2677     + u8 param[2] = { 0 };
2678     +
2679     + if (ps2_command(&psmouse->ps2dev,
2680     + param, MAKE_PS2_CMD(0, 2, TP_READ_ID)))
2681     + return false;
2682     +
2683     + /*
2684     + * param[0] contains the trackpoint device variant_id while
2685     + * param[1] contains the firmware_id. So far all alps
2686     + * trackpoint-only devices have their variant_ids equal
2687     + * TP_VARIANT_ALPS and their firmware_ids are in 0x20~0x2f range.
2688     + */
2689     + return param[0] == TP_VARIANT_ALPS && ((param[1] & 0xf0) == 0x20);
2690     +}
2691     +
2692     static int alps_identify(struct psmouse *psmouse, struct alps_data *priv)
2693     {
2694     const struct alps_protocol_info *protocol;
2695     @@ -3164,6 +3182,20 @@ int alps_detect(struct psmouse *psmouse, bool set_properties)
2696     if (error)
2697     return error;
2698    
2699     + /*
2700     + * ALPS cs19 is a trackpoint-only device, and uses different
2701     + * protocol than DualPoint ones, so we return -EINVAL here and let
2702     + * trackpoint.c drive this device. If the trackpoint driver is not
2703     + * enabled, the device will fall back to a bare PS/2 mouse.
2704     + * If ps2_command() fails here, we depend on the immediately
2705     + * followed psmouse_reset() to reset the device to normal state.
2706     + */
2707     + if (alps_is_cs19_trackpoint(psmouse)) {
2708     + psmouse_dbg(psmouse,
2709     + "ALPS CS19 trackpoint-only device detected, ignoring\n");
2710     + return -EINVAL;
2711     + }
2712     +
2713     /*
2714     * Reset the device to make sure it is fully operational:
2715     * on some laptops, like certain Dell Latitudes, we may
2716     diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
2717     index 68fd8232d44c..af7d48431b85 100644
2718     --- a/drivers/input/mouse/synaptics.c
2719     +++ b/drivers/input/mouse/synaptics.c
2720     @@ -179,6 +179,7 @@ static const char * const smbus_pnp_ids[] = {
2721     "LEN0093", /* T480 */
2722     "LEN0096", /* X280 */
2723     "LEN0097", /* X280 -> ALPS trackpoint */
2724     + "LEN009b", /* T580 */
2725     "LEN200f", /* T450s */
2726     "LEN2054", /* E480 */
2727     "LEN2055", /* E580 */
2728     diff --git a/drivers/input/tablet/gtco.c b/drivers/input/tablet/gtco.c
2729     index 4b8b9d7aa75e..35031228a6d0 100644
2730     --- a/drivers/input/tablet/gtco.c
2731     +++ b/drivers/input/tablet/gtco.c
2732     @@ -78,6 +78,7 @@ Scott Hill shill@gtcocalcomp.com
2733    
2734     /* Max size of a single report */
2735     #define REPORT_MAX_SIZE 10
2736     +#define MAX_COLLECTION_LEVELS 10
2737    
2738    
2739     /* Bitmask whether pen is in range */
2740     @@ -223,8 +224,7 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
2741     char maintype = 'x';
2742     char globtype[12];
2743     int indent = 0;
2744     - char indentstr[10] = "";
2745     -
2746     + char indentstr[MAX_COLLECTION_LEVELS + 1] = { 0 };
2747    
2748     dev_dbg(ddev, "======>>>>>>PARSE<<<<<<======\n");
2749    
2750     @@ -350,6 +350,13 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
2751     case TAG_MAIN_COL_START:
2752     maintype = 'S';
2753    
2754     + if (indent == MAX_COLLECTION_LEVELS) {
2755     + dev_err(ddev, "Collection level %d would exceed limit of %d\n",
2756     + indent + 1,
2757     + MAX_COLLECTION_LEVELS);
2758     + break;
2759     + }
2760     +
2761     if (data == 0) {
2762     dev_dbg(ddev, "======>>>>>> Physical\n");
2763     strcpy(globtype, "Physical");
2764     @@ -369,8 +376,15 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
2765     break;
2766    
2767     case TAG_MAIN_COL_END:
2768     - dev_dbg(ddev, "<<<<<<======\n");
2769     maintype = 'E';
2770     +
2771     + if (indent == 0) {
2772     + dev_err(ddev, "Collection level already at zero\n");
2773     + break;
2774     + }
2775     +
2776     + dev_dbg(ddev, "<<<<<<======\n");
2777     +
2778     indent--;
2779     for (x = 0; x < indent; x++)
2780     indentstr[x] = '-';
2781     diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
2782     index 8c15c5980299..bc14825edc9c 100644
2783     --- a/drivers/iommu/iommu.c
2784     +++ b/drivers/iommu/iommu.c
2785     @@ -211,18 +211,21 @@ static int iommu_insert_resv_region(struct iommu_resv_region *new,
2786     pos = pos->next;
2787     } else if ((start >= a) && (end <= b)) {
2788     if (new->type == type)
2789     - goto done;
2790     + return 0;
2791     else
2792     pos = pos->next;
2793     } else {
2794     if (new->type == type) {
2795     phys_addr_t new_start = min(a, start);
2796     phys_addr_t new_end = max(b, end);
2797     + int ret;
2798    
2799     list_del(&entry->list);
2800     entry->start = new_start;
2801     entry->length = new_end - new_start + 1;
2802     - iommu_insert_resv_region(entry, regions);
2803     + ret = iommu_insert_resv_region(entry, regions);
2804     + kfree(entry);
2805     + return ret;
2806     } else {
2807     pos = pos->next;
2808     }
2809     @@ -235,7 +238,6 @@ insert:
2810     return -ENOMEM;
2811    
2812     list_add_tail(&region->list, pos);
2813     -done:
2814     return 0;
2815     }
2816    
2817     diff --git a/drivers/irqchip/irq-meson-gpio.c b/drivers/irqchip/irq-meson-gpio.c
2818     index 7b531fd075b8..7599b10ecf09 100644
2819     --- a/drivers/irqchip/irq-meson-gpio.c
2820     +++ b/drivers/irqchip/irq-meson-gpio.c
2821     @@ -73,6 +73,7 @@ static const struct of_device_id meson_irq_gpio_matches[] = {
2822     { .compatible = "amlogic,meson-gxbb-gpio-intc", .data = &gxbb_params },
2823     { .compatible = "amlogic,meson-gxl-gpio-intc", .data = &gxl_params },
2824     { .compatible = "amlogic,meson-axg-gpio-intc", .data = &axg_params },
2825     + { .compatible = "amlogic,meson-g12a-gpio-intc", .data = &axg_params },
2826     { }
2827     };
2828    
2829     diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c
2830     index 95be6e36c7dd..80710c62ac29 100644
2831     --- a/drivers/lightnvm/pblk-core.c
2832     +++ b/drivers/lightnvm/pblk-core.c
2833     @@ -288,14 +288,16 @@ void pblk_free_rqd(struct pblk *pblk, struct nvm_rq *rqd, int type)
2834     void pblk_bio_free_pages(struct pblk *pblk, struct bio *bio, int off,
2835     int nr_pages)
2836     {
2837     - struct bio_vec bv;
2838     - int i;
2839     -
2840     - WARN_ON(off + nr_pages != bio->bi_vcnt);
2841     -
2842     - for (i = off; i < nr_pages + off; i++) {
2843     - bv = bio->bi_io_vec[i];
2844     - mempool_free(bv.bv_page, &pblk->page_bio_pool);
2845     + struct bio_vec *bv;
2846     + struct page *page;
2847     + int i, e, nbv = 0;
2848     +
2849     + for (i = 0; i < bio->bi_vcnt; i++) {
2850     + bv = &bio->bi_io_vec[i];
2851     + page = bv->bv_page;
2852     + for (e = 0; e < bv->bv_len; e += PBLK_EXPOSED_PAGE_SIZE, nbv++)
2853     + if (nbv >= off)
2854     + mempool_free(page++, &pblk->page_bio_pool);
2855     }
2856     }
2857    
2858     diff --git a/drivers/md/bcache/alloc.c b/drivers/md/bcache/alloc.c
2859     index de85b3af3b39..9c3beb1e382b 100644
2860     --- a/drivers/md/bcache/alloc.c
2861     +++ b/drivers/md/bcache/alloc.c
2862     @@ -393,6 +393,11 @@ long bch_bucket_alloc(struct cache *ca, unsigned int reserve, bool wait)
2863     struct bucket *b;
2864     long r;
2865    
2866     +
2867     + /* No allocation if CACHE_SET_IO_DISABLE bit is set */
2868     + if (unlikely(test_bit(CACHE_SET_IO_DISABLE, &ca->set->flags)))
2869     + return -1;
2870     +
2871     /* fastpath */
2872     if (fifo_pop(&ca->free[RESERVE_NONE], r) ||
2873     fifo_pop(&ca->free[reserve], r))
2874     @@ -484,6 +489,10 @@ int __bch_bucket_alloc_set(struct cache_set *c, unsigned int reserve,
2875     {
2876     int i;
2877    
2878     + /* No allocation if CACHE_SET_IO_DISABLE bit is set */
2879     + if (unlikely(test_bit(CACHE_SET_IO_DISABLE, &c->flags)))
2880     + return -1;
2881     +
2882     lockdep_assert_held(&c->bucket_lock);
2883     BUG_ON(!n || n > c->caches_loaded || n > 8);
2884    
2885     diff --git a/drivers/md/bcache/bcache.h b/drivers/md/bcache/bcache.h
2886     index 954dad29e6e8..83f0b91aeb90 100644
2887     --- a/drivers/md/bcache/bcache.h
2888     +++ b/drivers/md/bcache/bcache.h
2889     @@ -708,8 +708,6 @@ struct cache_set {
2890    
2891     #define BUCKET_HASH_BITS 12
2892     struct hlist_head bucket_hash[1 << BUCKET_HASH_BITS];
2893     -
2894     - DECLARE_HEAP(struct btree *, flush_btree);
2895     };
2896    
2897     struct bbio {
2898     diff --git a/drivers/md/bcache/io.c b/drivers/md/bcache/io.c
2899     index c25097968319..4d93f07f63e5 100644
2900     --- a/drivers/md/bcache/io.c
2901     +++ b/drivers/md/bcache/io.c
2902     @@ -58,6 +58,18 @@ void bch_count_backing_io_errors(struct cached_dev *dc, struct bio *bio)
2903    
2904     WARN_ONCE(!dc, "NULL pointer of struct cached_dev");
2905    
2906     + /*
2907     + * Read-ahead requests on a degrading and recovering md raid
2908     + * (e.g. raid6) device might be failured immediately by md
2909     + * raid code, which is not a real hardware media failure. So
2910     + * we shouldn't count failed REQ_RAHEAD bio to dc->io_errors.
2911     + */
2912     + if (bio->bi_opf & REQ_RAHEAD) {
2913     + pr_warn_ratelimited("%s: Read-ahead I/O failed on backing device, ignore",
2914     + dc->backing_dev_name);
2915     + return;
2916     + }
2917     +
2918     errors = atomic_add_return(1, &dc->io_errors);
2919     if (errors < dc->error_limit)
2920     pr_err("%s: IO error on backing device, unrecoverable",
2921     diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c
2922     index f880e5eba8dd..ec1e35a62934 100644
2923     --- a/drivers/md/bcache/journal.c
2924     +++ b/drivers/md/bcache/journal.c
2925     @@ -390,12 +390,6 @@ err:
2926     }
2927    
2928     /* Journalling */
2929     -#define journal_max_cmp(l, r) \
2930     - (fifo_idx(&c->journal.pin, btree_current_write(l)->journal) < \
2931     - fifo_idx(&(c)->journal.pin, btree_current_write(r)->journal))
2932     -#define journal_min_cmp(l, r) \
2933     - (fifo_idx(&c->journal.pin, btree_current_write(l)->journal) > \
2934     - fifo_idx(&(c)->journal.pin, btree_current_write(r)->journal))
2935    
2936     static void btree_flush_write(struct cache_set *c)
2937     {
2938     @@ -403,35 +397,25 @@ static void btree_flush_write(struct cache_set *c)
2939     * Try to find the btree node with that references the oldest journal
2940     * entry, best is our current candidate and is locked if non NULL:
2941     */
2942     - struct btree *b;
2943     - int i;
2944     + struct btree *b, *best;
2945     + unsigned int i;
2946    
2947     atomic_long_inc(&c->flush_write);
2948     -
2949     retry:
2950     - spin_lock(&c->journal.lock);
2951     - if (heap_empty(&c->flush_btree)) {
2952     - for_each_cached_btree(b, c, i)
2953     - if (btree_current_write(b)->journal) {
2954     - if (!heap_full(&c->flush_btree))
2955     - heap_add(&c->flush_btree, b,
2956     - journal_max_cmp);
2957     - else if (journal_max_cmp(b,
2958     - heap_peek(&c->flush_btree))) {
2959     - c->flush_btree.data[0] = b;
2960     - heap_sift(&c->flush_btree, 0,
2961     - journal_max_cmp);
2962     - }
2963     + best = NULL;
2964     +
2965     + for_each_cached_btree(b, c, i)
2966     + if (btree_current_write(b)->journal) {
2967     + if (!best)
2968     + best = b;
2969     + else if (journal_pin_cmp(c,
2970     + btree_current_write(best)->journal,
2971     + btree_current_write(b)->journal)) {
2972     + best = b;
2973     }
2974     + }
2975    
2976     - for (i = c->flush_btree.used / 2 - 1; i >= 0; --i)
2977     - heap_sift(&c->flush_btree, i, journal_min_cmp);
2978     - }
2979     -
2980     - b = NULL;
2981     - heap_pop(&c->flush_btree, b, journal_min_cmp);
2982     - spin_unlock(&c->journal.lock);
2983     -
2984     + b = best;
2985     if (b) {
2986     mutex_lock(&b->write_lock);
2987     if (!btree_current_write(b)->journal) {
2988     @@ -810,6 +794,10 @@ atomic_t *bch_journal(struct cache_set *c,
2989     struct journal_write *w;
2990     atomic_t *ret;
2991    
2992     + /* No journaling if CACHE_SET_IO_DISABLE set already */
2993     + if (unlikely(test_bit(CACHE_SET_IO_DISABLE, &c->flags)))
2994     + return NULL;
2995     +
2996     if (!CACHE_SYNC(&c->sb))
2997     return NULL;
2998    
2999     @@ -854,7 +842,6 @@ void bch_journal_free(struct cache_set *c)
3000     free_pages((unsigned long) c->journal.w[1].data, JSET_BITS);
3001     free_pages((unsigned long) c->journal.w[0].data, JSET_BITS);
3002     free_fifo(&c->journal.pin);
3003     - free_heap(&c->flush_btree);
3004     }
3005    
3006     int bch_journal_alloc(struct cache_set *c)
3007     @@ -869,8 +856,7 @@ int bch_journal_alloc(struct cache_set *c)
3008     j->w[0].c = c;
3009     j->w[1].c = c;
3010    
3011     - if (!(init_heap(&c->flush_btree, 128, GFP_KERNEL)) ||
3012     - !(init_fifo(&j->pin, JOURNAL_PIN, GFP_KERNEL)) ||
3013     + if (!(init_fifo(&j->pin, JOURNAL_PIN, GFP_KERNEL)) ||
3014     !(j->w[0].data = (void *) __get_free_pages(GFP_KERNEL, JSET_BITS)) ||
3015     !(j->w[1].data = (void *) __get_free_pages(GFP_KERNEL, JSET_BITS)))
3016     return -ENOMEM;
3017     diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
3018     index 2409507d7bff..e6c7a84bb1df 100644
3019     --- a/drivers/md/bcache/super.c
3020     +++ b/drivers/md/bcache/super.c
3021     @@ -1180,18 +1180,16 @@ static void cached_dev_free(struct closure *cl)
3022     {
3023     struct cached_dev *dc = container_of(cl, struct cached_dev, disk.cl);
3024    
3025     - mutex_lock(&bch_register_lock);
3026     -
3027     if (test_and_clear_bit(BCACHE_DEV_WB_RUNNING, &dc->disk.flags))
3028     cancel_writeback_rate_update_dwork(dc);
3029    
3030     if (!IS_ERR_OR_NULL(dc->writeback_thread))
3031     kthread_stop(dc->writeback_thread);
3032     - if (dc->writeback_write_wq)
3033     - destroy_workqueue(dc->writeback_write_wq);
3034     if (!IS_ERR_OR_NULL(dc->status_update_thread))
3035     kthread_stop(dc->status_update_thread);
3036    
3037     + mutex_lock(&bch_register_lock);
3038     +
3039     if (atomic_read(&dc->running))
3040     bd_unlink_disk_holder(dc->bdev, dc->disk.disk);
3041     bcache_device_free(&dc->disk);
3042     @@ -1425,8 +1423,6 @@ int bch_flash_dev_create(struct cache_set *c, uint64_t size)
3043    
3044     bool bch_cached_dev_error(struct cached_dev *dc)
3045     {
3046     - struct cache_set *c;
3047     -
3048     if (!dc || test_bit(BCACHE_DEV_CLOSING, &dc->disk.flags))
3049     return false;
3050    
3051     @@ -1437,21 +1433,6 @@ bool bch_cached_dev_error(struct cached_dev *dc)
3052     pr_err("stop %s: too many IO errors on backing device %s\n",
3053     dc->disk.disk->disk_name, dc->backing_dev_name);
3054    
3055     - /*
3056     - * If the cached device is still attached to a cache set,
3057     - * even dc->io_disable is true and no more I/O requests
3058     - * accepted, cache device internal I/O (writeback scan or
3059     - * garbage collection) may still prevent bcache device from
3060     - * being stopped. So here CACHE_SET_IO_DISABLE should be
3061     - * set to c->flags too, to make the internal I/O to cache
3062     - * device rejected and stopped immediately.
3063     - * If c is NULL, that means the bcache device is not attached
3064     - * to any cache set, then no CACHE_SET_IO_DISABLE bit to set.
3065     - */
3066     - c = dc->disk.c;
3067     - if (c && test_and_set_bit(CACHE_SET_IO_DISABLE, &c->flags))
3068     - pr_info("CACHE_SET_IO_DISABLE already set");
3069     -
3070     bcache_device_stop(&dc->disk);
3071     return true;
3072     }
3073     @@ -1552,7 +1533,7 @@ static void cache_set_flush(struct closure *cl)
3074     kobject_put(&c->internal);
3075     kobject_del(&c->kobj);
3076    
3077     - if (c->gc_thread)
3078     + if (!IS_ERR_OR_NULL(c->gc_thread))
3079     kthread_stop(c->gc_thread);
3080    
3081     if (!IS_ERR_OR_NULL(c->root))
3082     diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
3083     index 541454b4f479..5bb81e564ce8 100644
3084     --- a/drivers/md/bcache/sysfs.c
3085     +++ b/drivers/md/bcache/sysfs.c
3086     @@ -175,7 +175,7 @@ SHOW(__bch_cached_dev)
3087     var_print(writeback_percent);
3088     sysfs_hprint(writeback_rate,
3089     wb ? atomic_long_read(&dc->writeback_rate.rate) << 9 : 0);
3090     - sysfs_hprint(io_errors, atomic_read(&dc->io_errors));
3091     + sysfs_printf(io_errors, "%i", atomic_read(&dc->io_errors));
3092     sysfs_printf(io_error_limit, "%i", dc->error_limit);
3093     sysfs_printf(io_disable, "%i", dc->io_disable);
3094     var_print(writeback_rate_update_seconds);
3095     @@ -426,7 +426,7 @@ static struct attribute *bch_cached_dev_files[] = {
3096     &sysfs_writeback_rate_p_term_inverse,
3097     &sysfs_writeback_rate_minimum,
3098     &sysfs_writeback_rate_debug,
3099     - &sysfs_errors,
3100     + &sysfs_io_errors,
3101     &sysfs_io_error_limit,
3102     &sysfs_io_disable,
3103     &sysfs_dirty_data,
3104     diff --git a/drivers/md/bcache/util.h b/drivers/md/bcache/util.h
3105     index 00aab6abcfe4..b1f5b7aea872 100644
3106     --- a/drivers/md/bcache/util.h
3107     +++ b/drivers/md/bcache/util.h
3108     @@ -113,8 +113,6 @@ do { \
3109    
3110     #define heap_full(h) ((h)->used == (h)->size)
3111    
3112     -#define heap_empty(h) ((h)->used == 0)
3113     -
3114     #define DECLARE_FIFO(type, name) \
3115     struct { \
3116     size_t front, back, size, mask; \
3117     diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
3118     index 08c3a9f9676c..ba5395fd386d 100644
3119     --- a/drivers/md/bcache/writeback.c
3120     +++ b/drivers/md/bcache/writeback.c
3121     @@ -708,6 +708,10 @@ static int bch_writeback_thread(void *arg)
3122     }
3123     }
3124    
3125     + if (dc->writeback_write_wq) {
3126     + flush_workqueue(dc->writeback_write_wq);
3127     + destroy_workqueue(dc->writeback_write_wq);
3128     + }
3129     cached_dev_put(dc);
3130     wait_for_kthread_stop();
3131    
3132     @@ -803,6 +807,7 @@ int bch_cached_dev_writeback_start(struct cached_dev *dc)
3133     "bcache_writeback");
3134     if (IS_ERR(dc->writeback_thread)) {
3135     cached_dev_put(dc);
3136     + destroy_workqueue(dc->writeback_write_wq);
3137     return PTR_ERR(dc->writeback_thread);
3138     }
3139    
3140     diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
3141     index dc385b70e4c3..b1d0ae2dbd3d 100644
3142     --- a/drivers/md/dm-bufio.c
3143     +++ b/drivers/md/dm-bufio.c
3144     @@ -1602,9 +1602,7 @@ dm_bufio_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
3145     unsigned long freed;
3146    
3147     c = container_of(shrink, struct dm_bufio_client, shrinker);
3148     - if (sc->gfp_mask & __GFP_FS)
3149     - dm_bufio_lock(c);
3150     - else if (!dm_bufio_trylock(c))
3151     + if (!dm_bufio_trylock(c))
3152     return SHRINK_STOP;
3153    
3154     freed = __scan(c, sc->nr_to_scan, sc->gfp_mask);
3155     diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c
3156     index d8334cd45d7c..4cdde7a02e94 100644
3157     --- a/drivers/md/dm-zoned-metadata.c
3158     +++ b/drivers/md/dm-zoned-metadata.c
3159     @@ -1593,30 +1593,6 @@ struct dm_zone *dmz_get_zone_for_reclaim(struct dmz_metadata *zmd)
3160     return zone;
3161     }
3162    
3163     -/*
3164     - * Activate a zone (increment its reference count).
3165     - */
3166     -void dmz_activate_zone(struct dm_zone *zone)
3167     -{
3168     - set_bit(DMZ_ACTIVE, &zone->flags);
3169     - atomic_inc(&zone->refcount);
3170     -}
3171     -
3172     -/*
3173     - * Deactivate a zone. This decrement the zone reference counter
3174     - * and clears the active state of the zone once the count reaches 0,
3175     - * indicating that all BIOs to the zone have completed. Returns
3176     - * true if the zone was deactivated.
3177     - */
3178     -void dmz_deactivate_zone(struct dm_zone *zone)
3179     -{
3180     - if (atomic_dec_and_test(&zone->refcount)) {
3181     - WARN_ON(!test_bit(DMZ_ACTIVE, &zone->flags));
3182     - clear_bit_unlock(DMZ_ACTIVE, &zone->flags);
3183     - smp_mb__after_atomic();
3184     - }
3185     -}
3186     -
3187     /*
3188     * Get the zone mapping a chunk, if the chunk is mapped already.
3189     * If no mapping exist and the operation is WRITE, a zone is
3190     diff --git a/drivers/md/dm-zoned.h b/drivers/md/dm-zoned.h
3191     index 12419f0bfe78..ed8de49c9a08 100644
3192     --- a/drivers/md/dm-zoned.h
3193     +++ b/drivers/md/dm-zoned.h
3194     @@ -115,7 +115,6 @@ enum {
3195     DMZ_BUF,
3196    
3197     /* Zone internal state */
3198     - DMZ_ACTIVE,
3199     DMZ_RECLAIM,
3200     DMZ_SEQ_WRITE_ERR,
3201     };
3202     @@ -128,7 +127,6 @@ enum {
3203     #define dmz_is_empty(z) ((z)->wp_block == 0)
3204     #define dmz_is_offline(z) test_bit(DMZ_OFFLINE, &(z)->flags)
3205     #define dmz_is_readonly(z) test_bit(DMZ_READ_ONLY, &(z)->flags)
3206     -#define dmz_is_active(z) test_bit(DMZ_ACTIVE, &(z)->flags)
3207     #define dmz_in_reclaim(z) test_bit(DMZ_RECLAIM, &(z)->flags)
3208     #define dmz_seq_write_err(z) test_bit(DMZ_SEQ_WRITE_ERR, &(z)->flags)
3209    
3210     @@ -188,8 +186,30 @@ void dmz_unmap_zone(struct dmz_metadata *zmd, struct dm_zone *zone);
3211     unsigned int dmz_nr_rnd_zones(struct dmz_metadata *zmd);
3212     unsigned int dmz_nr_unmap_rnd_zones(struct dmz_metadata *zmd);
3213    
3214     -void dmz_activate_zone(struct dm_zone *zone);
3215     -void dmz_deactivate_zone(struct dm_zone *zone);
3216     +/*
3217     + * Activate a zone (increment its reference count).
3218     + */
3219     +static inline void dmz_activate_zone(struct dm_zone *zone)
3220     +{
3221     + atomic_inc(&zone->refcount);
3222     +}
3223     +
3224     +/*
3225     + * Deactivate a zone. This decrement the zone reference counter
3226     + * indicating that all BIOs to the zone have completed when the count is 0.
3227     + */
3228     +static inline void dmz_deactivate_zone(struct dm_zone *zone)
3229     +{
3230     + atomic_dec(&zone->refcount);
3231     +}
3232     +
3233     +/*
3234     + * Test if a zone is active, that is, has a refcount > 0.
3235     + */
3236     +static inline bool dmz_is_active(struct dm_zone *zone)
3237     +{
3238     + return atomic_read(&zone->refcount);
3239     +}
3240    
3241     int dmz_lock_zone_reclaim(struct dm_zone *zone);
3242     void dmz_unlock_zone_reclaim(struct dm_zone *zone);
3243     diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
3244     index f237d6f30752..a147619498df 100644
3245     --- a/drivers/md/raid5.c
3246     +++ b/drivers/md/raid5.c
3247     @@ -7670,7 +7670,7 @@ abort:
3248     static int raid5_add_disk(struct mddev *mddev, struct md_rdev *rdev)
3249     {
3250     struct r5conf *conf = mddev->private;
3251     - int err = -EEXIST;
3252     + int ret, err = -EEXIST;
3253     int disk;
3254     struct disk_info *p;
3255     int first = 0;
3256     @@ -7685,7 +7685,14 @@ static int raid5_add_disk(struct mddev *mddev, struct md_rdev *rdev)
3257     * The array is in readonly mode if journal is missing, so no
3258     * write requests running. We should be safe
3259     */
3260     - log_init(conf, rdev, false);
3261     + ret = log_init(conf, rdev, false);
3262     + if (ret)
3263     + return ret;
3264     +
3265     + ret = r5l_start(conf->log);
3266     + if (ret)
3267     + return ret;
3268     +
3269     return 0;
3270     }
3271     if (mddev->recovery_disabled == conf->recovery_disabled)
3272     diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c
3273     index 9226dca44e90..93d250db0b6f 100644
3274     --- a/drivers/media/common/videobuf2/videobuf2-core.c
3275     +++ b/drivers/media/common/videobuf2/videobuf2-core.c
3276     @@ -207,6 +207,10 @@ static int __vb2_buf_mem_alloc(struct vb2_buffer *vb)
3277     for (plane = 0; plane < vb->num_planes; ++plane) {
3278     unsigned long size = PAGE_ALIGN(vb->planes[plane].length);
3279    
3280     + /* Did it wrap around? */
3281     + if (size < vb->planes[plane].length)
3282     + goto free;
3283     +
3284     mem_priv = call_ptr_memop(vb, alloc,
3285     q->alloc_devs[plane] ? : q->dev,
3286     q->dma_attrs, size, q->dma_dir, q->gfp_flags);
3287     diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
3288     index 015e737095cd..e9bfea986cc4 100644
3289     --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
3290     +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
3291     @@ -59,7 +59,7 @@ static int vb2_dma_sg_alloc_compacted(struct vb2_dma_sg_buf *buf,
3292     gfp_t gfp_flags)
3293     {
3294     unsigned int last_page = 0;
3295     - int size = buf->size;
3296     + unsigned long size = buf->size;
3297    
3298     while (size > 0) {
3299     struct page *pages;
3300     diff --git a/drivers/media/dvb-frontends/tua6100.c b/drivers/media/dvb-frontends/tua6100.c
3301     index b233b7be0b84..e6aaf4973aef 100644
3302     --- a/drivers/media/dvb-frontends/tua6100.c
3303     +++ b/drivers/media/dvb-frontends/tua6100.c
3304     @@ -75,8 +75,8 @@ static int tua6100_set_params(struct dvb_frontend *fe)
3305     struct i2c_msg msg1 = { .addr = priv->i2c_address, .flags = 0, .buf = reg1, .len = 4 };
3306     struct i2c_msg msg2 = { .addr = priv->i2c_address, .flags = 0, .buf = reg2, .len = 3 };
3307    
3308     -#define _R 4
3309     -#define _P 32
3310     +#define _R_VAL 4
3311     +#define _P_VAL 32
3312     #define _ri 4000000
3313    
3314     // setup register 0
3315     @@ -91,14 +91,14 @@ static int tua6100_set_params(struct dvb_frontend *fe)
3316     else
3317     reg1[1] = 0x0c;
3318    
3319     - if (_P == 64)
3320     + if (_P_VAL == 64)
3321     reg1[1] |= 0x40;
3322     if (c->frequency >= 1525000)
3323     reg1[1] |= 0x80;
3324    
3325     // register 2
3326     - reg2[1] = (_R >> 8) & 0x03;
3327     - reg2[2] = _R;
3328     + reg2[1] = (_R_VAL >> 8) & 0x03;
3329     + reg2[2] = _R_VAL;
3330     if (c->frequency < 1455000)
3331     reg2[1] |= 0x1c;
3332     else if (c->frequency < 1630000)
3333     @@ -110,18 +110,18 @@ static int tua6100_set_params(struct dvb_frontend *fe)
3334     * The N divisor ratio (note: c->frequency is in kHz, but we
3335     * need it in Hz)
3336     */
3337     - prediv = (c->frequency * _R) / (_ri / 1000);
3338     - div = prediv / _P;
3339     + prediv = (c->frequency * _R_VAL) / (_ri / 1000);
3340     + div = prediv / _P_VAL;
3341     reg1[1] |= (div >> 9) & 0x03;
3342     reg1[2] = div >> 1;
3343     reg1[3] = (div << 7);
3344     - priv->frequency = ((div * _P) * (_ri / 1000)) / _R;
3345     + priv->frequency = ((div * _P_VAL) * (_ri / 1000)) / _R_VAL;
3346    
3347     // Finally, calculate and store the value for A
3348     - reg1[3] |= (prediv - (div*_P)) & 0x7f;
3349     + reg1[3] |= (prediv - (div*_P_VAL)) & 0x7f;
3350    
3351     -#undef _R
3352     -#undef _P
3353     +#undef _R_VAL
3354     +#undef _P_VAL
3355     #undef _ri
3356    
3357     if (fe->ops.i2c_gate_ctrl)
3358     diff --git a/drivers/media/i2c/Makefile b/drivers/media/i2c/Makefile
3359     index a94eb03d10d4..520b3c3bf48c 100644
3360     --- a/drivers/media/i2c/Makefile
3361     +++ b/drivers/media/i2c/Makefile
3362     @@ -36,7 +36,7 @@ obj-$(CONFIG_VIDEO_ADV748X) += adv748x/
3363     obj-$(CONFIG_VIDEO_ADV7604) += adv7604.o
3364     obj-$(CONFIG_VIDEO_ADV7842) += adv7842.o
3365     obj-$(CONFIG_VIDEO_AD9389B) += ad9389b.o
3366     -obj-$(CONFIG_VIDEO_ADV7511) += adv7511.o
3367     +obj-$(CONFIG_VIDEO_ADV7511) += adv7511-v4l2.o
3368     obj-$(CONFIG_VIDEO_VPX3220) += vpx3220.o
3369     obj-$(CONFIG_VIDEO_VS6624) += vs6624.o
3370     obj-$(CONFIG_VIDEO_BT819) += bt819.o
3371     diff --git a/drivers/media/i2c/adv7511-v4l2.c b/drivers/media/i2c/adv7511-v4l2.c
3372     new file mode 100644
3373     index 000000000000..6869bb593a68
3374     --- /dev/null
3375     +++ b/drivers/media/i2c/adv7511-v4l2.c
3376     @@ -0,0 +1,1997 @@
3377     +// SPDX-License-Identifier: GPL-2.0-only
3378     +/*
3379     + * Analog Devices ADV7511 HDMI Transmitter Device Driver
3380     + *
3381     + * Copyright 2013 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
3382     + */
3383     +
3384     +/*
3385     + * This file is named adv7511-v4l2.c so it doesn't conflict with the Analog
3386     + * Device ADV7511 (config fragment CONFIG_DRM_I2C_ADV7511).
3387     + */
3388     +
3389     +
3390     +#include <linux/kernel.h>
3391     +#include <linux/module.h>
3392     +#include <linux/slab.h>
3393     +#include <linux/i2c.h>
3394     +#include <linux/delay.h>
3395     +#include <linux/videodev2.h>
3396     +#include <linux/gpio.h>
3397     +#include <linux/workqueue.h>
3398     +#include <linux/hdmi.h>
3399     +#include <linux/v4l2-dv-timings.h>
3400     +#include <media/v4l2-device.h>
3401     +#include <media/v4l2-common.h>
3402     +#include <media/v4l2-ctrls.h>
3403     +#include <media/v4l2-dv-timings.h>
3404     +#include <media/i2c/adv7511.h>
3405     +#include <media/cec.h>
3406     +
3407     +static int debug;
3408     +module_param(debug, int, 0644);
3409     +MODULE_PARM_DESC(debug, "debug level (0-2)");
3410     +
3411     +MODULE_DESCRIPTION("Analog Devices ADV7511 HDMI Transmitter Device Driver");
3412     +MODULE_AUTHOR("Hans Verkuil");
3413     +MODULE_LICENSE("GPL v2");
3414     +
3415     +#define MASK_ADV7511_EDID_RDY_INT 0x04
3416     +#define MASK_ADV7511_MSEN_INT 0x40
3417     +#define MASK_ADV7511_HPD_INT 0x80
3418     +
3419     +#define MASK_ADV7511_HPD_DETECT 0x40
3420     +#define MASK_ADV7511_MSEN_DETECT 0x20
3421     +#define MASK_ADV7511_EDID_RDY 0x10
3422     +
3423     +#define EDID_MAX_RETRIES (8)
3424     +#define EDID_DELAY 250
3425     +#define EDID_MAX_SEGM 8
3426     +
3427     +#define ADV7511_MAX_WIDTH 1920
3428     +#define ADV7511_MAX_HEIGHT 1200
3429     +#define ADV7511_MIN_PIXELCLOCK 20000000
3430     +#define ADV7511_MAX_PIXELCLOCK 225000000
3431     +
3432     +#define ADV7511_MAX_ADDRS (3)
3433     +
3434     +/*
3435     +**********************************************************************
3436     +*
3437     +* Arrays with configuration parameters for the ADV7511
3438     +*
3439     +**********************************************************************
3440     +*/
3441     +
3442     +struct i2c_reg_value {
3443     + unsigned char reg;
3444     + unsigned char value;
3445     +};
3446     +
3447     +struct adv7511_state_edid {
3448     + /* total number of blocks */
3449     + u32 blocks;
3450     + /* Number of segments read */
3451     + u32 segments;
3452     + u8 data[EDID_MAX_SEGM * 256];
3453     + /* Number of EDID read retries left */
3454     + unsigned read_retries;
3455     + bool complete;
3456     +};
3457     +
3458     +struct adv7511_state {
3459     + struct adv7511_platform_data pdata;
3460     + struct v4l2_subdev sd;
3461     + struct media_pad pad;
3462     + struct v4l2_ctrl_handler hdl;
3463     + int chip_revision;
3464     + u8 i2c_edid_addr;
3465     + u8 i2c_pktmem_addr;
3466     + u8 i2c_cec_addr;
3467     +
3468     + struct i2c_client *i2c_cec;
3469     + struct cec_adapter *cec_adap;
3470     + u8 cec_addr[ADV7511_MAX_ADDRS];
3471     + u8 cec_valid_addrs;
3472     + bool cec_enabled_adap;
3473     +
3474     + /* Is the adv7511 powered on? */
3475     + bool power_on;
3476     + /* Did we receive hotplug and rx-sense signals? */
3477     + bool have_monitor;
3478     + bool enabled_irq;
3479     + /* timings from s_dv_timings */
3480     + struct v4l2_dv_timings dv_timings;
3481     + u32 fmt_code;
3482     + u32 colorspace;
3483     + u32 ycbcr_enc;
3484     + u32 quantization;
3485     + u32 xfer_func;
3486     + u32 content_type;
3487     + /* controls */
3488     + struct v4l2_ctrl *hdmi_mode_ctrl;
3489     + struct v4l2_ctrl *hotplug_ctrl;
3490     + struct v4l2_ctrl *rx_sense_ctrl;
3491     + struct v4l2_ctrl *have_edid0_ctrl;
3492     + struct v4l2_ctrl *rgb_quantization_range_ctrl;
3493     + struct v4l2_ctrl *content_type_ctrl;
3494     + struct i2c_client *i2c_edid;
3495     + struct i2c_client *i2c_pktmem;
3496     + struct adv7511_state_edid edid;
3497     + /* Running counter of the number of detected EDIDs (for debugging) */
3498     + unsigned edid_detect_counter;
3499     + struct workqueue_struct *work_queue;
3500     + struct delayed_work edid_handler; /* work entry */
3501     +};
3502     +
3503     +static void adv7511_check_monitor_present_status(struct v4l2_subdev *sd);
3504     +static bool adv7511_check_edid_status(struct v4l2_subdev *sd);
3505     +static void adv7511_setup(struct v4l2_subdev *sd);
3506     +static int adv7511_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq);
3507     +static int adv7511_s_clock_freq(struct v4l2_subdev *sd, u32 freq);
3508     +
3509     +
3510     +static const struct v4l2_dv_timings_cap adv7511_timings_cap = {
3511     + .type = V4L2_DV_BT_656_1120,
3512     + /* keep this initialization for compatibility with GCC < 4.4.6 */
3513     + .reserved = { 0 },
3514     + V4L2_INIT_BT_TIMINGS(640, ADV7511_MAX_WIDTH, 350, ADV7511_MAX_HEIGHT,
3515     + ADV7511_MIN_PIXELCLOCK, ADV7511_MAX_PIXELCLOCK,
3516     + V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
3517     + V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
3518     + V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
3519     + V4L2_DV_BT_CAP_CUSTOM)
3520     +};
3521     +
3522     +static inline struct adv7511_state *get_adv7511_state(struct v4l2_subdev *sd)
3523     +{
3524     + return container_of(sd, struct adv7511_state, sd);
3525     +}
3526     +
3527     +static inline struct v4l2_subdev *to_sd(struct v4l2_ctrl *ctrl)
3528     +{
3529     + return &container_of(ctrl->handler, struct adv7511_state, hdl)->sd;
3530     +}
3531     +
3532     +/* ------------------------ I2C ----------------------------------------------- */
3533     +
3534     +static s32 adv_smbus_read_byte_data_check(struct i2c_client *client,
3535     + u8 command, bool check)
3536     +{
3537     + union i2c_smbus_data data;
3538     +
3539     + if (!i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3540     + I2C_SMBUS_READ, command,
3541     + I2C_SMBUS_BYTE_DATA, &data))
3542     + return data.byte;
3543     + if (check)
3544     + v4l_err(client, "error reading %02x, %02x\n",
3545     + client->addr, command);
3546     + return -1;
3547     +}
3548     +
3549     +static s32 adv_smbus_read_byte_data(struct i2c_client *client, u8 command)
3550     +{
3551     + int i;
3552     + for (i = 0; i < 3; i++) {
3553     + int ret = adv_smbus_read_byte_data_check(client, command, true);
3554     + if (ret >= 0) {
3555     + if (i)
3556     + v4l_err(client, "read ok after %d retries\n", i);
3557     + return ret;
3558     + }
3559     + }
3560     + v4l_err(client, "read failed\n");
3561     + return -1;
3562     +}
3563     +
3564     +static int adv7511_rd(struct v4l2_subdev *sd, u8 reg)
3565     +{
3566     + struct i2c_client *client = v4l2_get_subdevdata(sd);
3567     +
3568     + return adv_smbus_read_byte_data(client, reg);
3569     +}
3570     +
3571     +static int adv7511_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
3572     +{
3573     + struct i2c_client *client = v4l2_get_subdevdata(sd);
3574     + int ret;
3575     + int i;
3576     +
3577     + for (i = 0; i < 3; i++) {
3578     + ret = i2c_smbus_write_byte_data(client, reg, val);
3579     + if (ret == 0)
3580     + return 0;
3581     + }
3582     + v4l2_err(sd, "%s: i2c write error\n", __func__);
3583     + return ret;
3584     +}
3585     +
3586     +/* To set specific bits in the register, a clear-mask is given (to be AND-ed),
3587     + and then the value-mask (to be OR-ed). */
3588     +static inline void adv7511_wr_and_or(struct v4l2_subdev *sd, u8 reg, u8 clr_mask, u8 val_mask)
3589     +{
3590     + adv7511_wr(sd, reg, (adv7511_rd(sd, reg) & clr_mask) | val_mask);
3591     +}
3592     +
3593     +static int adv_smbus_read_i2c_block_data(struct i2c_client *client,
3594     + u8 command, unsigned length, u8 *values)
3595     +{
3596     + union i2c_smbus_data data;
3597     + int ret;
3598     +
3599     + if (length > I2C_SMBUS_BLOCK_MAX)
3600     + length = I2C_SMBUS_BLOCK_MAX;
3601     + data.block[0] = length;
3602     +
3603     + ret = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
3604     + I2C_SMBUS_READ, command,
3605     + I2C_SMBUS_I2C_BLOCK_DATA, &data);
3606     + memcpy(values, data.block + 1, length);
3607     + return ret;
3608     +}
3609     +
3610     +static void adv7511_edid_rd(struct v4l2_subdev *sd, uint16_t len, uint8_t *buf)
3611     +{
3612     + struct adv7511_state *state = get_adv7511_state(sd);
3613     + int i;
3614     + int err = 0;
3615     +
3616     + v4l2_dbg(1, debug, sd, "%s:\n", __func__);
3617     +
3618     + for (i = 0; !err && i < len; i += I2C_SMBUS_BLOCK_MAX)
3619     + err = adv_smbus_read_i2c_block_data(state->i2c_edid, i,
3620     + I2C_SMBUS_BLOCK_MAX, buf + i);
3621     + if (err)
3622     + v4l2_err(sd, "%s: i2c read error\n", __func__);
3623     +}
3624     +
3625     +static inline int adv7511_cec_read(struct v4l2_subdev *sd, u8 reg)
3626     +{
3627     + struct adv7511_state *state = get_adv7511_state(sd);
3628     +
3629     + return i2c_smbus_read_byte_data(state->i2c_cec, reg);
3630     +}
3631     +
3632     +static int adv7511_cec_write(struct v4l2_subdev *sd, u8 reg, u8 val)
3633     +{
3634     + struct adv7511_state *state = get_adv7511_state(sd);
3635     + int ret;
3636     + int i;
3637     +
3638     + for (i = 0; i < 3; i++) {
3639     + ret = i2c_smbus_write_byte_data(state->i2c_cec, reg, val);
3640     + if (ret == 0)
3641     + return 0;
3642     + }
3643     + v4l2_err(sd, "%s: I2C Write Problem\n", __func__);
3644     + return ret;
3645     +}
3646     +
3647     +static inline int adv7511_cec_write_and_or(struct v4l2_subdev *sd, u8 reg, u8 mask,
3648     + u8 val)
3649     +{
3650     + return adv7511_cec_write(sd, reg, (adv7511_cec_read(sd, reg) & mask) | val);
3651     +}
3652     +
3653     +static int adv7511_pktmem_rd(struct v4l2_subdev *sd, u8 reg)
3654     +{
3655     + struct adv7511_state *state = get_adv7511_state(sd);
3656     +
3657     + return adv_smbus_read_byte_data(state->i2c_pktmem, reg);
3658     +}
3659     +
3660     +static int adv7511_pktmem_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
3661     +{
3662     + struct adv7511_state *state = get_adv7511_state(sd);
3663     + int ret;
3664     + int i;
3665     +
3666     + for (i = 0; i < 3; i++) {
3667     + ret = i2c_smbus_write_byte_data(state->i2c_pktmem, reg, val);
3668     + if (ret == 0)
3669     + return 0;
3670     + }
3671     + v4l2_err(sd, "%s: i2c write error\n", __func__);
3672     + return ret;
3673     +}
3674     +
3675     +/* To set specific bits in the register, a clear-mask is given (to be AND-ed),
3676     + and then the value-mask (to be OR-ed). */
3677     +static inline void adv7511_pktmem_wr_and_or(struct v4l2_subdev *sd, u8 reg, u8 clr_mask, u8 val_mask)
3678     +{
3679     + adv7511_pktmem_wr(sd, reg, (adv7511_pktmem_rd(sd, reg) & clr_mask) | val_mask);
3680     +}
3681     +
3682     +static inline bool adv7511_have_hotplug(struct v4l2_subdev *sd)
3683     +{
3684     + return adv7511_rd(sd, 0x42) & MASK_ADV7511_HPD_DETECT;
3685     +}
3686     +
3687     +static inline bool adv7511_have_rx_sense(struct v4l2_subdev *sd)
3688     +{
3689     + return adv7511_rd(sd, 0x42) & MASK_ADV7511_MSEN_DETECT;
3690     +}
3691     +
3692     +static void adv7511_csc_conversion_mode(struct v4l2_subdev *sd, u8 mode)
3693     +{
3694     + adv7511_wr_and_or(sd, 0x18, 0x9f, (mode & 0x3)<<5);
3695     +}
3696     +
3697     +static void adv7511_csc_coeff(struct v4l2_subdev *sd,
3698     + u16 A1, u16 A2, u16 A3, u16 A4,
3699     + u16 B1, u16 B2, u16 B3, u16 B4,
3700     + u16 C1, u16 C2, u16 C3, u16 C4)
3701     +{
3702     + /* A */
3703     + adv7511_wr_and_or(sd, 0x18, 0xe0, A1>>8);
3704     + adv7511_wr(sd, 0x19, A1);
3705     + adv7511_wr_and_or(sd, 0x1A, 0xe0, A2>>8);
3706     + adv7511_wr(sd, 0x1B, A2);
3707     + adv7511_wr_and_or(sd, 0x1c, 0xe0, A3>>8);
3708     + adv7511_wr(sd, 0x1d, A3);
3709     + adv7511_wr_and_or(sd, 0x1e, 0xe0, A4>>8);
3710     + adv7511_wr(sd, 0x1f, A4);
3711     +
3712     + /* B */
3713     + adv7511_wr_and_or(sd, 0x20, 0xe0, B1>>8);
3714     + adv7511_wr(sd, 0x21, B1);
3715     + adv7511_wr_and_or(sd, 0x22, 0xe0, B2>>8);
3716     + adv7511_wr(sd, 0x23, B2);
3717     + adv7511_wr_and_or(sd, 0x24, 0xe0, B3>>8);
3718     + adv7511_wr(sd, 0x25, B3);
3719     + adv7511_wr_and_or(sd, 0x26, 0xe0, B4>>8);
3720     + adv7511_wr(sd, 0x27, B4);
3721     +
3722     + /* C */
3723     + adv7511_wr_and_or(sd, 0x28, 0xe0, C1>>8);
3724     + adv7511_wr(sd, 0x29, C1);
3725     + adv7511_wr_and_or(sd, 0x2A, 0xe0, C2>>8);
3726     + adv7511_wr(sd, 0x2B, C2);
3727     + adv7511_wr_and_or(sd, 0x2C, 0xe0, C3>>8);
3728     + adv7511_wr(sd, 0x2D, C3);
3729     + adv7511_wr_and_or(sd, 0x2E, 0xe0, C4>>8);
3730     + adv7511_wr(sd, 0x2F, C4);
3731     +}
3732     +
3733     +static void adv7511_csc_rgb_full2limit(struct v4l2_subdev *sd, bool enable)
3734     +{
3735     + if (enable) {
3736     + u8 csc_mode = 0;
3737     + adv7511_csc_conversion_mode(sd, csc_mode);
3738     + adv7511_csc_coeff(sd,
3739     + 4096-564, 0, 0, 256,
3740     + 0, 4096-564, 0, 256,
3741     + 0, 0, 4096-564, 256);
3742     + /* enable CSC */
3743     + adv7511_wr_and_or(sd, 0x18, 0x7f, 0x80);
3744     + /* AVI infoframe: Limited range RGB (16-235) */
3745     + adv7511_wr_and_or(sd, 0x57, 0xf3, 0x04);
3746     + } else {
3747     + /* disable CSC */
3748     + adv7511_wr_and_or(sd, 0x18, 0x7f, 0x0);
3749     + /* AVI infoframe: Full range RGB (0-255) */
3750     + adv7511_wr_and_or(sd, 0x57, 0xf3, 0x08);
3751     + }
3752     +}
3753     +
3754     +static void adv7511_set_rgb_quantization_mode(struct v4l2_subdev *sd, struct v4l2_ctrl *ctrl)
3755     +{
3756     + struct adv7511_state *state = get_adv7511_state(sd);
3757     +
3758     + /* Only makes sense for RGB formats */
3759     + if (state->fmt_code != MEDIA_BUS_FMT_RGB888_1X24) {
3760     + /* so just keep quantization */
3761     + adv7511_csc_rgb_full2limit(sd, false);
3762     + return;
3763     + }
3764     +
3765     + switch (ctrl->val) {
3766     + case V4L2_DV_RGB_RANGE_AUTO:
3767     + /* automatic */
3768     + if (state->dv_timings.bt.flags & V4L2_DV_FL_IS_CE_VIDEO) {
3769     + /* CE format, RGB limited range (16-235) */
3770     + adv7511_csc_rgb_full2limit(sd, true);
3771     + } else {
3772     + /* not CE format, RGB full range (0-255) */
3773     + adv7511_csc_rgb_full2limit(sd, false);
3774     + }
3775     + break;
3776     + case V4L2_DV_RGB_RANGE_LIMITED:
3777     + /* RGB limited range (16-235) */
3778     + adv7511_csc_rgb_full2limit(sd, true);
3779     + break;
3780     + case V4L2_DV_RGB_RANGE_FULL:
3781     + /* RGB full range (0-255) */
3782     + adv7511_csc_rgb_full2limit(sd, false);
3783     + break;
3784     + }
3785     +}
3786     +
3787     +/* ------------------------------ CTRL OPS ------------------------------ */
3788     +
3789     +static int adv7511_s_ctrl(struct v4l2_ctrl *ctrl)
3790     +{
3791     + struct v4l2_subdev *sd = to_sd(ctrl);
3792     + struct adv7511_state *state = get_adv7511_state(sd);
3793     +
3794     + v4l2_dbg(1, debug, sd, "%s: ctrl id: %d, ctrl->val %d\n", __func__, ctrl->id, ctrl->val);
3795     +
3796     + if (state->hdmi_mode_ctrl == ctrl) {
3797     + /* Set HDMI or DVI-D */
3798     + adv7511_wr_and_or(sd, 0xaf, 0xfd, ctrl->val == V4L2_DV_TX_MODE_HDMI ? 0x02 : 0x00);
3799     + return 0;
3800     + }
3801     + if (state->rgb_quantization_range_ctrl == ctrl) {
3802     + adv7511_set_rgb_quantization_mode(sd, ctrl);
3803     + return 0;
3804     + }
3805     + if (state->content_type_ctrl == ctrl) {
3806     + u8 itc, cn;
3807     +
3808     + state->content_type = ctrl->val;
3809     + itc = state->content_type != V4L2_DV_IT_CONTENT_TYPE_NO_ITC;
3810     + cn = itc ? state->content_type : V4L2_DV_IT_CONTENT_TYPE_GRAPHICS;
3811     + adv7511_wr_and_or(sd, 0x57, 0x7f, itc << 7);
3812     + adv7511_wr_and_or(sd, 0x59, 0xcf, cn << 4);
3813     + return 0;
3814     + }
3815     +
3816     + return -EINVAL;
3817     +}
3818     +
3819     +static const struct v4l2_ctrl_ops adv7511_ctrl_ops = {
3820     + .s_ctrl = adv7511_s_ctrl,
3821     +};
3822     +
3823     +/* ---------------------------- CORE OPS ------------------------------------------- */
3824     +
3825     +#ifdef CONFIG_VIDEO_ADV_DEBUG
3826     +static void adv7511_inv_register(struct v4l2_subdev *sd)
3827     +{
3828     + struct adv7511_state *state = get_adv7511_state(sd);
3829     +
3830     + v4l2_info(sd, "0x000-0x0ff: Main Map\n");
3831     + if (state->i2c_cec)
3832     + v4l2_info(sd, "0x100-0x1ff: CEC Map\n");
3833     +}
3834     +
3835     +static int adv7511_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
3836     +{
3837     + struct adv7511_state *state = get_adv7511_state(sd);
3838     +
3839     + reg->size = 1;
3840     + switch (reg->reg >> 8) {
3841     + case 0:
3842     + reg->val = adv7511_rd(sd, reg->reg & 0xff);
3843     + break;
3844     + case 1:
3845     + if (state->i2c_cec) {
3846     + reg->val = adv7511_cec_read(sd, reg->reg & 0xff);
3847     + break;
3848     + }
3849     + /* fall through */
3850     + default:
3851     + v4l2_info(sd, "Register %03llx not supported\n", reg->reg);
3852     + adv7511_inv_register(sd);
3853     + break;
3854     + }
3855     + return 0;
3856     +}
3857     +
3858     +static int adv7511_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg)
3859     +{
3860     + struct adv7511_state *state = get_adv7511_state(sd);
3861     +
3862     + switch (reg->reg >> 8) {
3863     + case 0:
3864     + adv7511_wr(sd, reg->reg & 0xff, reg->val & 0xff);
3865     + break;
3866     + case 1:
3867     + if (state->i2c_cec) {
3868     + adv7511_cec_write(sd, reg->reg & 0xff, reg->val & 0xff);
3869     + break;
3870     + }
3871     + /* fall through */
3872     + default:
3873     + v4l2_info(sd, "Register %03llx not supported\n", reg->reg);
3874     + adv7511_inv_register(sd);
3875     + break;
3876     + }
3877     + return 0;
3878     +}
3879     +#endif
3880     +
3881     +struct adv7511_cfg_read_infoframe {
3882     + const char *desc;
3883     + u8 present_reg;
3884     + u8 present_mask;
3885     + u8 header[3];
3886     + u16 payload_addr;
3887     +};
3888     +
3889     +static u8 hdmi_infoframe_checksum(u8 *ptr, size_t size)
3890     +{
3891     + u8 csum = 0;
3892     + size_t i;
3893     +
3894     + /* compute checksum */
3895     + for (i = 0; i < size; i++)
3896     + csum += ptr[i];
3897     +
3898     + return 256 - csum;
3899     +}
3900     +
3901     +static void log_infoframe(struct v4l2_subdev *sd, const struct adv7511_cfg_read_infoframe *cri)
3902     +{
3903     + struct i2c_client *client = v4l2_get_subdevdata(sd);
3904     + struct device *dev = &client->dev;
3905     + union hdmi_infoframe frame;
3906     + u8 buffer[32];
3907     + u8 len;
3908     + int i;
3909     +
3910     + if (!(adv7511_rd(sd, cri->present_reg) & cri->present_mask)) {
3911     + v4l2_info(sd, "%s infoframe not transmitted\n", cri->desc);
3912     + return;
3913     + }
3914     +
3915     + memcpy(buffer, cri->header, sizeof(cri->header));
3916     +
3917     + len = buffer[2];
3918     +
3919     + if (len + 4 > sizeof(buffer)) {
3920     + v4l2_err(sd, "%s: invalid %s infoframe length %d\n", __func__, cri->desc, len);
3921     + return;
3922     + }
3923     +
3924     + if (cri->payload_addr >= 0x100) {
3925     + for (i = 0; i < len; i++)
3926     + buffer[i + 4] = adv7511_pktmem_rd(sd, cri->payload_addr + i - 0x100);
3927     + } else {
3928     + for (i = 0; i < len; i++)
3929     + buffer[i + 4] = adv7511_rd(sd, cri->payload_addr + i);
3930     + }
3931     + buffer[3] = 0;
3932     + buffer[3] = hdmi_infoframe_checksum(buffer, len + 4);
3933     +
3934     + if (hdmi_infoframe_unpack(&frame, buffer) < 0) {
3935     + v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__, cri->desc);
3936     + return;
3937     + }
3938     +
3939     + hdmi_infoframe_log(KERN_INFO, dev, &frame);
3940     +}
3941     +
3942     +static void adv7511_log_infoframes(struct v4l2_subdev *sd)
3943     +{
3944     + static const struct adv7511_cfg_read_infoframe cri[] = {
3945     + { "AVI", 0x44, 0x10, { 0x82, 2, 13 }, 0x55 },
3946     + { "Audio", 0x44, 0x08, { 0x84, 1, 10 }, 0x73 },
3947     + { "SDP", 0x40, 0x40, { 0x83, 1, 25 }, 0x103 },
3948     + };
3949     + int i;
3950     +
3951     + for (i = 0; i < ARRAY_SIZE(cri); i++)
3952     + log_infoframe(sd, &cri[i]);
3953     +}
3954     +
3955     +static int adv7511_log_status(struct v4l2_subdev *sd)
3956     +{
3957     + struct adv7511_state *state = get_adv7511_state(sd);
3958     + struct adv7511_state_edid *edid = &state->edid;
3959     + int i;
3960     +
3961     + static const char * const states[] = {
3962     + "in reset",
3963     + "reading EDID",
3964     + "idle",
3965     + "initializing HDCP",
3966     + "HDCP enabled",
3967     + "initializing HDCP repeater",
3968     + "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"
3969     + };
3970     + static const char * const errors[] = {
3971     + "no error",
3972     + "bad receiver BKSV",
3973     + "Ri mismatch",
3974     + "Pj mismatch",
3975     + "i2c error",
3976     + "timed out",
3977     + "max repeater cascade exceeded",
3978     + "hash check failed",
3979     + "too many devices",
3980     + "9", "A", "B", "C", "D", "E", "F"
3981     + };
3982     +
3983     + v4l2_info(sd, "power %s\n", state->power_on ? "on" : "off");
3984     + v4l2_info(sd, "%s hotplug, %s Rx Sense, %s EDID (%d block(s))\n",
3985     + (adv7511_rd(sd, 0x42) & MASK_ADV7511_HPD_DETECT) ? "detected" : "no",
3986     + (adv7511_rd(sd, 0x42) & MASK_ADV7511_MSEN_DETECT) ? "detected" : "no",
3987     + edid->segments ? "found" : "no",
3988     + edid->blocks);
3989     + v4l2_info(sd, "%s output %s\n",
3990     + (adv7511_rd(sd, 0xaf) & 0x02) ?
3991     + "HDMI" : "DVI-D",
3992     + (adv7511_rd(sd, 0xa1) & 0x3c) ?
3993     + "disabled" : "enabled");
3994     + v4l2_info(sd, "state: %s, error: %s, detect count: %u, msk/irq: %02x/%02x\n",
3995     + states[adv7511_rd(sd, 0xc8) & 0xf],
3996     + errors[adv7511_rd(sd, 0xc8) >> 4], state->edid_detect_counter,
3997     + adv7511_rd(sd, 0x94), adv7511_rd(sd, 0x96));
3998     + v4l2_info(sd, "RGB quantization: %s range\n", adv7511_rd(sd, 0x18) & 0x80 ? "limited" : "full");
3999     + if (adv7511_rd(sd, 0xaf) & 0x02) {
4000     + /* HDMI only */
4001     + u8 manual_cts = adv7511_rd(sd, 0x0a) & 0x80;
4002     + u32 N = (adv7511_rd(sd, 0x01) & 0xf) << 16 |
4003     + adv7511_rd(sd, 0x02) << 8 |
4004     + adv7511_rd(sd, 0x03);
4005     + u8 vic_detect = adv7511_rd(sd, 0x3e) >> 2;
4006     + u8 vic_sent = adv7511_rd(sd, 0x3d) & 0x3f;
4007     + u32 CTS;
4008     +
4009     + if (manual_cts)
4010     + CTS = (adv7511_rd(sd, 0x07) & 0xf) << 16 |
4011     + adv7511_rd(sd, 0x08) << 8 |
4012     + adv7511_rd(sd, 0x09);
4013     + else
4014     + CTS = (adv7511_rd(sd, 0x04) & 0xf) << 16 |
4015     + adv7511_rd(sd, 0x05) << 8 |
4016     + adv7511_rd(sd, 0x06);
4017     + v4l2_info(sd, "CTS %s mode: N %d, CTS %d\n",
4018     + manual_cts ? "manual" : "automatic", N, CTS);
4019     + v4l2_info(sd, "VIC: detected %d, sent %d\n",
4020     + vic_detect, vic_sent);
4021     + adv7511_log_infoframes(sd);
4022     + }
4023     + if (state->dv_timings.type == V4L2_DV_BT_656_1120)
4024     + v4l2_print_dv_timings(sd->name, "timings: ",
4025     + &state->dv_timings, false);
4026     + else
4027     + v4l2_info(sd, "no timings set\n");
4028     + v4l2_info(sd, "i2c edid addr: 0x%x\n", state->i2c_edid_addr);
4029     +
4030     + if (state->i2c_cec == NULL)
4031     + return 0;
4032     +
4033     + v4l2_info(sd, "i2c cec addr: 0x%x\n", state->i2c_cec_addr);
4034     +
4035     + v4l2_info(sd, "CEC: %s\n", state->cec_enabled_adap ?
4036     + "enabled" : "disabled");
4037     + if (state->cec_enabled_adap) {
4038     + for (i = 0; i < ADV7511_MAX_ADDRS; i++) {
4039     + bool is_valid = state->cec_valid_addrs & (1 << i);
4040     +
4041     + if (is_valid)
4042     + v4l2_info(sd, "CEC Logical Address: 0x%x\n",
4043     + state->cec_addr[i]);
4044     + }
4045     + }
4046     + v4l2_info(sd, "i2c pktmem addr: 0x%x\n", state->i2c_pktmem_addr);
4047     + return 0;
4048     +}
4049     +
4050     +/* Power up/down adv7511 */
4051     +static int adv7511_s_power(struct v4l2_subdev *sd, int on)
4052     +{
4053     + struct adv7511_state *state = get_adv7511_state(sd);
4054     + const int retries = 20;
4055     + int i;
4056     +
4057     + v4l2_dbg(1, debug, sd, "%s: power %s\n", __func__, on ? "on" : "off");
4058     +
4059     + state->power_on = on;
4060     +
4061     + if (!on) {
4062     + /* Power down */
4063     + adv7511_wr_and_or(sd, 0x41, 0xbf, 0x40);
4064     + return true;
4065     + }
4066     +
4067     + /* Power up */
4068     + /* The adv7511 does not always come up immediately.
4069     + Retry multiple times. */
4070     + for (i = 0; i < retries; i++) {
4071     + adv7511_wr_and_or(sd, 0x41, 0xbf, 0x0);
4072     + if ((adv7511_rd(sd, 0x41) & 0x40) == 0)
4073     + break;
4074     + adv7511_wr_and_or(sd, 0x41, 0xbf, 0x40);
4075     + msleep(10);
4076     + }
4077     + if (i == retries) {
4078     + v4l2_dbg(1, debug, sd, "%s: failed to powerup the adv7511!\n", __func__);
4079     + adv7511_s_power(sd, 0);
4080     + return false;
4081     + }
4082     + if (i > 1)
4083     + v4l2_dbg(1, debug, sd, "%s: needed %d retries to powerup the adv7511\n", __func__, i);
4084     +
4085     + /* Reserved registers that must be set */
4086     + adv7511_wr(sd, 0x98, 0x03);
4087     + adv7511_wr_and_or(sd, 0x9a, 0xfe, 0x70);
4088     + adv7511_wr(sd, 0x9c, 0x30);
4089     + adv7511_wr_and_or(sd, 0x9d, 0xfc, 0x01);
4090     + adv7511_wr(sd, 0xa2, 0xa4);
4091     + adv7511_wr(sd, 0xa3, 0xa4);
4092     + adv7511_wr(sd, 0xe0, 0xd0);
4093     + adv7511_wr(sd, 0xf9, 0x00);
4094     +
4095     + adv7511_wr(sd, 0x43, state->i2c_edid_addr);
4096     + adv7511_wr(sd, 0x45, state->i2c_pktmem_addr);
4097     +
4098     + /* Set number of attempts to read the EDID */
4099     + adv7511_wr(sd, 0xc9, 0xf);
4100     + return true;
4101     +}
4102     +
4103     +#if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
4104     +static int adv7511_cec_adap_enable(struct cec_adapter *adap, bool enable)
4105     +{
4106     + struct adv7511_state *state = cec_get_drvdata(adap);
4107     + struct v4l2_subdev *sd = &state->sd;
4108     +
4109     + if (state->i2c_cec == NULL)
4110     + return -EIO;
4111     +
4112     + if (!state->cec_enabled_adap && enable) {
4113     + /* power up cec section */
4114     + adv7511_cec_write_and_or(sd, 0x4e, 0xfc, 0x01);
4115     + /* legacy mode and clear all rx buffers */
4116     + adv7511_cec_write(sd, 0x4a, 0x00);
4117     + adv7511_cec_write(sd, 0x4a, 0x07);
4118     + adv7511_cec_write_and_or(sd, 0x11, 0xfe, 0); /* initially disable tx */
4119     + /* enabled irqs: */
4120     + /* tx: ready */
4121     + /* tx: arbitration lost */
4122     + /* tx: retry timeout */
4123     + /* rx: ready 1 */
4124     + if (state->enabled_irq)
4125     + adv7511_wr_and_or(sd, 0x95, 0xc0, 0x39);
4126     + } else if (state->cec_enabled_adap && !enable) {
4127     + if (state->enabled_irq)
4128     + adv7511_wr_and_or(sd, 0x95, 0xc0, 0x00);
4129     + /* disable address mask 1-3 */
4130     + adv7511_cec_write_and_or(sd, 0x4b, 0x8f, 0x00);
4131     + /* power down cec section */
4132     + adv7511_cec_write_and_or(sd, 0x4e, 0xfc, 0x00);
4133     + state->cec_valid_addrs = 0;
4134     + }
4135     + state->cec_enabled_adap = enable;
4136     + return 0;
4137     +}
4138     +
4139     +static int adv7511_cec_adap_log_addr(struct cec_adapter *adap, u8 addr)
4140     +{
4141     + struct adv7511_state *state = cec_get_drvdata(adap);
4142     + struct v4l2_subdev *sd = &state->sd;
4143     + unsigned int i, free_idx = ADV7511_MAX_ADDRS;
4144     +
4145     + if (!state->cec_enabled_adap)
4146     + return addr == CEC_LOG_ADDR_INVALID ? 0 : -EIO;
4147     +
4148     + if (addr == CEC_LOG_ADDR_INVALID) {
4149     + adv7511_cec_write_and_or(sd, 0x4b, 0x8f, 0);
4150     + state->cec_valid_addrs = 0;
4151     + return 0;
4152     + }
4153     +
4154     + for (i = 0; i < ADV7511_MAX_ADDRS; i++) {
4155     + bool is_valid = state->cec_valid_addrs & (1 << i);
4156     +
4157     + if (free_idx == ADV7511_MAX_ADDRS && !is_valid)
4158     + free_idx = i;
4159     + if (is_valid && state->cec_addr[i] == addr)
4160     + return 0;
4161     + }
4162     + if (i == ADV7511_MAX_ADDRS) {
4163     + i = free_idx;
4164     + if (i == ADV7511_MAX_ADDRS)
4165     + return -ENXIO;
4166     + }
4167     + state->cec_addr[i] = addr;
4168     + state->cec_valid_addrs |= 1 << i;
4169     +
4170     + switch (i) {
4171     + case 0:
4172     + /* enable address mask 0 */
4173     + adv7511_cec_write_and_or(sd, 0x4b, 0xef, 0x10);
4174     + /* set address for mask 0 */
4175     + adv7511_cec_write_and_or(sd, 0x4c, 0xf0, addr);
4176     + break;
4177     + case 1:
4178     + /* enable address mask 1 */
4179     + adv7511_cec_write_and_or(sd, 0x4b, 0xdf, 0x20);
4180     + /* set address for mask 1 */
4181     + adv7511_cec_write_and_or(sd, 0x4c, 0x0f, addr << 4);
4182     + break;
4183     + case 2:
4184     + /* enable address mask 2 */
4185     + adv7511_cec_write_and_or(sd, 0x4b, 0xbf, 0x40);
4186     + /* set address for mask 1 */
4187     + adv7511_cec_write_and_or(sd, 0x4d, 0xf0, addr);
4188     + break;
4189     + }
4190     + return 0;
4191     +}
4192     +
4193     +static int adv7511_cec_adap_transmit(struct cec_adapter *adap, u8 attempts,
4194     + u32 signal_free_time, struct cec_msg *msg)
4195     +{
4196     + struct adv7511_state *state = cec_get_drvdata(adap);
4197     + struct v4l2_subdev *sd = &state->sd;
4198     + u8 len = msg->len;
4199     + unsigned int i;
4200     +
4201     + v4l2_dbg(1, debug, sd, "%s: len %d\n", __func__, len);
4202     +
4203     + if (len > 16) {
4204     + v4l2_err(sd, "%s: len exceeded 16 (%d)\n", __func__, len);
4205     + return -EINVAL;
4206     + }
4207     +
4208     + /*
4209     + * The number of retries is the number of attempts - 1, but retry
4210     + * at least once. It's not clear if a value of 0 is allowed, so
4211     + * let's do at least one retry.
4212     + */
4213     + adv7511_cec_write_and_or(sd, 0x12, ~0x70, max(1, attempts - 1) << 4);
4214     +
4215     + /* clear cec tx irq status */
4216     + adv7511_wr(sd, 0x97, 0x38);
4217     +
4218     + /* write data */
4219     + for (i = 0; i < len; i++)
4220     + adv7511_cec_write(sd, i, msg->msg[i]);
4221     +
4222     + /* set length (data + header) */
4223     + adv7511_cec_write(sd, 0x10, len);
4224     + /* start transmit, enable tx */
4225     + adv7511_cec_write(sd, 0x11, 0x01);
4226     + return 0;
4227     +}
4228     +
4229     +static void adv_cec_tx_raw_status(struct v4l2_subdev *sd, u8 tx_raw_status)
4230     +{
4231     + struct adv7511_state *state = get_adv7511_state(sd);
4232     +
4233     + if ((adv7511_cec_read(sd, 0x11) & 0x01) == 0) {
4234     + v4l2_dbg(1, debug, sd, "%s: tx raw: tx disabled\n", __func__);
4235     + return;
4236     + }
4237     +
4238     + if (tx_raw_status & 0x10) {
4239     + v4l2_dbg(1, debug, sd,
4240     + "%s: tx raw: arbitration lost\n", __func__);
4241     + cec_transmit_done(state->cec_adap, CEC_TX_STATUS_ARB_LOST,
4242     + 1, 0, 0, 0);
4243     + return;
4244     + }
4245     + if (tx_raw_status & 0x08) {
4246     + u8 status;
4247     + u8 nack_cnt;
4248     + u8 low_drive_cnt;
4249     +
4250     + v4l2_dbg(1, debug, sd, "%s: tx raw: retry failed\n", __func__);
4251     + /*
4252     + * We set this status bit since this hardware performs
4253     + * retransmissions.
4254     + */
4255     + status = CEC_TX_STATUS_MAX_RETRIES;
4256     + nack_cnt = adv7511_cec_read(sd, 0x14) & 0xf;
4257     + if (nack_cnt)
4258     + status |= CEC_TX_STATUS_NACK;
4259     + low_drive_cnt = adv7511_cec_read(sd, 0x14) >> 4;
4260     + if (low_drive_cnt)
4261     + status |= CEC_TX_STATUS_LOW_DRIVE;
4262     + cec_transmit_done(state->cec_adap, status,
4263     + 0, nack_cnt, low_drive_cnt, 0);
4264     + return;
4265     + }
4266     + if (tx_raw_status & 0x20) {
4267     + v4l2_dbg(1, debug, sd, "%s: tx raw: ready ok\n", __func__);
4268     + cec_transmit_done(state->cec_adap, CEC_TX_STATUS_OK, 0, 0, 0, 0);
4269     + return;
4270     + }
4271     +}
4272     +
4273     +static const struct cec_adap_ops adv7511_cec_adap_ops = {
4274     + .adap_enable = adv7511_cec_adap_enable,
4275     + .adap_log_addr = adv7511_cec_adap_log_addr,
4276     + .adap_transmit = adv7511_cec_adap_transmit,
4277     +};
4278     +#endif
4279     +
4280     +/* Enable interrupts */
4281     +static void adv7511_set_isr(struct v4l2_subdev *sd, bool enable)
4282     +{
4283     + struct adv7511_state *state = get_adv7511_state(sd);
4284     + u8 irqs = MASK_ADV7511_HPD_INT | MASK_ADV7511_MSEN_INT;
4285     + u8 irqs_rd;
4286     + int retries = 100;
4287     +
4288     + v4l2_dbg(2, debug, sd, "%s: %s\n", __func__, enable ? "enable" : "disable");
4289     +
4290     + if (state->enabled_irq == enable)
4291     + return;
4292     + state->enabled_irq = enable;
4293     +
4294     + /* The datasheet says that the EDID ready interrupt should be
4295     + disabled if there is no hotplug. */
4296     + if (!enable)
4297     + irqs = 0;
4298     + else if (adv7511_have_hotplug(sd))
4299     + irqs |= MASK_ADV7511_EDID_RDY_INT;
4300     +
4301     + /*
4302     + * This i2c write can fail (approx. 1 in 1000 writes). But it
4303     + * is essential that this register is correct, so retry it
4304     + * multiple times.
4305     + *
4306     + * Note that the i2c write does not report an error, but the readback
4307     + * clearly shows the wrong value.
4308     + */
4309     + do {
4310     + adv7511_wr(sd, 0x94, irqs);
4311     + irqs_rd = adv7511_rd(sd, 0x94);
4312     + } while (retries-- && irqs_rd != irqs);
4313     +
4314     + if (irqs_rd != irqs)
4315     + v4l2_err(sd, "Could not set interrupts: hw failure?\n");
4316     +
4317     + adv7511_wr_and_or(sd, 0x95, 0xc0,
4318     + (state->cec_enabled_adap && enable) ? 0x39 : 0x00);
4319     +}
4320     +
4321     +/* Interrupt handler */
4322     +static int adv7511_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
4323     +{
4324     + u8 irq_status;
4325     + u8 cec_irq;
4326     +
4327     + /* disable interrupts to prevent a race condition */
4328     + adv7511_set_isr(sd, false);
4329     + irq_status = adv7511_rd(sd, 0x96);
4330     + cec_irq = adv7511_rd(sd, 0x97);
4331     + /* clear detected interrupts */
4332     + adv7511_wr(sd, 0x96, irq_status);
4333     + adv7511_wr(sd, 0x97, cec_irq);
4334     +
4335     + v4l2_dbg(1, debug, sd, "%s: irq 0x%x, cec-irq 0x%x\n", __func__,
4336     + irq_status, cec_irq);
4337     +
4338     + if (irq_status & (MASK_ADV7511_HPD_INT | MASK_ADV7511_MSEN_INT))
4339     + adv7511_check_monitor_present_status(sd);
4340     + if (irq_status & MASK_ADV7511_EDID_RDY_INT)
4341     + adv7511_check_edid_status(sd);
4342     +
4343     +#if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
4344     + if (cec_irq & 0x38)
4345     + adv_cec_tx_raw_status(sd, cec_irq);
4346     +
4347     + if (cec_irq & 1) {
4348     + struct adv7511_state *state = get_adv7511_state(sd);
4349     + struct cec_msg msg;
4350     +
4351     + msg.len = adv7511_cec_read(sd, 0x25) & 0x1f;
4352     +
4353     + v4l2_dbg(1, debug, sd, "%s: cec msg len %d\n", __func__,
4354     + msg.len);
4355     +
4356     + if (msg.len > 16)
4357     + msg.len = 16;
4358     +
4359     + if (msg.len) {
4360     + u8 i;
4361     +
4362     + for (i = 0; i < msg.len; i++)
4363     + msg.msg[i] = adv7511_cec_read(sd, i + 0x15);
4364     +
4365     + adv7511_cec_write(sd, 0x4a, 0); /* toggle to re-enable rx 1 */
4366     + adv7511_cec_write(sd, 0x4a, 1);
4367     + cec_received_msg(state->cec_adap, &msg);
4368     + }
4369     + }
4370     +#endif
4371     +
4372     + /* enable interrupts */
4373     + adv7511_set_isr(sd, true);
4374     +
4375     + if (handled)
4376     + *handled = true;
4377     + return 0;
4378     +}
4379     +
4380     +static const struct v4l2_subdev_core_ops adv7511_core_ops = {
4381     + .log_status = adv7511_log_status,
4382     +#ifdef CONFIG_VIDEO_ADV_DEBUG
4383     + .g_register = adv7511_g_register,
4384     + .s_register = adv7511_s_register,
4385     +#endif
4386     + .s_power = adv7511_s_power,
4387     + .interrupt_service_routine = adv7511_isr,
4388     +};
4389     +
4390     +/* ------------------------------ VIDEO OPS ------------------------------ */
4391     +
4392     +/* Enable/disable adv7511 output */
4393     +static int adv7511_s_stream(struct v4l2_subdev *sd, int enable)
4394     +{
4395     + struct adv7511_state *state = get_adv7511_state(sd);
4396     +
4397     + v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
4398     + adv7511_wr_and_or(sd, 0xa1, ~0x3c, (enable ? 0 : 0x3c));
4399     + if (enable) {
4400     + adv7511_check_monitor_present_status(sd);
4401     + } else {
4402     + adv7511_s_power(sd, 0);
4403     + state->have_monitor = false;
4404     + }
4405     + return 0;
4406     +}
4407     +
4408     +static int adv7511_s_dv_timings(struct v4l2_subdev *sd,
4409     + struct v4l2_dv_timings *timings)
4410     +{
4411     + struct adv7511_state *state = get_adv7511_state(sd);
4412     + struct v4l2_bt_timings *bt = &timings->bt;
4413     + u32 fps;
4414     +
4415     + v4l2_dbg(1, debug, sd, "%s:\n", __func__);
4416     +
4417     + /* quick sanity check */
4418     + if (!v4l2_valid_dv_timings(timings, &adv7511_timings_cap, NULL, NULL))
4419     + return -EINVAL;
4420     +
4421     + /* Fill the optional fields .standards and .flags in struct v4l2_dv_timings
4422     + if the format is one of the CEA or DMT timings. */
4423     + v4l2_find_dv_timings_cap(timings, &adv7511_timings_cap, 0, NULL, NULL);
4424     +
4425     + /* save timings */
4426     + state->dv_timings = *timings;
4427     +
4428     + /* set h/vsync polarities */
4429     + adv7511_wr_and_or(sd, 0x17, 0x9f,
4430     + ((bt->polarities & V4L2_DV_VSYNC_POS_POL) ? 0 : 0x40) |
4431     + ((bt->polarities & V4L2_DV_HSYNC_POS_POL) ? 0 : 0x20));
4432     +
4433     + fps = (u32)bt->pixelclock / (V4L2_DV_BT_FRAME_WIDTH(bt) * V4L2_DV_BT_FRAME_HEIGHT(bt));
4434     + switch (fps) {
4435     + case 24:
4436     + adv7511_wr_and_or(sd, 0xfb, 0xf9, 1 << 1);
4437     + break;
4438     + case 25:
4439     + adv7511_wr_and_or(sd, 0xfb, 0xf9, 2 << 1);
4440     + break;
4441     + case 30:
4442     + adv7511_wr_and_or(sd, 0xfb, 0xf9, 3 << 1);
4443     + break;
4444     + default:
4445     + adv7511_wr_and_or(sd, 0xfb, 0xf9, 0);
4446     + break;
4447     + }
4448     +
4449     + /* update quantization range based on new dv_timings */
4450     + adv7511_set_rgb_quantization_mode(sd, state->rgb_quantization_range_ctrl);
4451     +
4452     + return 0;
4453     +}
4454     +
4455     +static int adv7511_g_dv_timings(struct v4l2_subdev *sd,
4456     + struct v4l2_dv_timings *timings)
4457     +{
4458     + struct adv7511_state *state = get_adv7511_state(sd);
4459     +
4460     + v4l2_dbg(1, debug, sd, "%s:\n", __func__);
4461     +
4462     + if (!timings)
4463     + return -EINVAL;
4464     +
4465     + *timings = state->dv_timings;
4466     +
4467     + return 0;
4468     +}
4469     +
4470     +static int adv7511_enum_dv_timings(struct v4l2_subdev *sd,
4471     + struct v4l2_enum_dv_timings *timings)
4472     +{
4473     + if (timings->pad != 0)
4474     + return -EINVAL;
4475     +
4476     + return v4l2_enum_dv_timings_cap(timings, &adv7511_timings_cap, NULL, NULL);
4477     +}
4478     +
4479     +static int adv7511_dv_timings_cap(struct v4l2_subdev *sd,
4480     + struct v4l2_dv_timings_cap *cap)
4481     +{
4482     + if (cap->pad != 0)
4483     + return -EINVAL;
4484     +
4485     + *cap = adv7511_timings_cap;
4486     + return 0;
4487     +}
4488     +
4489     +static const struct v4l2_subdev_video_ops adv7511_video_ops = {
4490     + .s_stream = adv7511_s_stream,
4491     + .s_dv_timings = adv7511_s_dv_timings,
4492     + .g_dv_timings = adv7511_g_dv_timings,
4493     +};
4494     +
4495     +/* ------------------------------ AUDIO OPS ------------------------------ */
4496     +static int adv7511_s_audio_stream(struct v4l2_subdev *sd, int enable)
4497     +{
4498     + v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
4499     +
4500     + if (enable)
4501     + adv7511_wr_and_or(sd, 0x4b, 0x3f, 0x80);
4502     + else
4503     + adv7511_wr_and_or(sd, 0x4b, 0x3f, 0x40);
4504     +
4505     + return 0;
4506     +}
4507     +
4508     +static int adv7511_s_clock_freq(struct v4l2_subdev *sd, u32 freq)
4509     +{
4510     + u32 N;
4511     +
4512     + switch (freq) {
4513     + case 32000: N = 4096; break;
4514     + case 44100: N = 6272; break;
4515     + case 48000: N = 6144; break;
4516     + case 88200: N = 12544; break;
4517     + case 96000: N = 12288; break;
4518     + case 176400: N = 25088; break;
4519     + case 192000: N = 24576; break;
4520     + default:
4521     + return -EINVAL;
4522     + }
4523     +
4524     + /* Set N (used with CTS to regenerate the audio clock) */
4525     + adv7511_wr(sd, 0x01, (N >> 16) & 0xf);
4526     + adv7511_wr(sd, 0x02, (N >> 8) & 0xff);
4527     + adv7511_wr(sd, 0x03, N & 0xff);
4528     +
4529     + return 0;
4530     +}
4531     +
4532     +static int adv7511_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq)
4533     +{
4534     + u32 i2s_sf;
4535     +
4536     + switch (freq) {
4537     + case 32000: i2s_sf = 0x30; break;
4538     + case 44100: i2s_sf = 0x00; break;
4539     + case 48000: i2s_sf = 0x20; break;
4540     + case 88200: i2s_sf = 0x80; break;
4541     + case 96000: i2s_sf = 0xa0; break;
4542     + case 176400: i2s_sf = 0xc0; break;
4543     + case 192000: i2s_sf = 0xe0; break;
4544     + default:
4545     + return -EINVAL;
4546     + }
4547     +
4548     + /* Set sampling frequency for I2S audio to 48 kHz */
4549     + adv7511_wr_and_or(sd, 0x15, 0xf, i2s_sf);
4550     +
4551     + return 0;
4552     +}
4553     +
4554     +static int adv7511_s_routing(struct v4l2_subdev *sd, u32 input, u32 output, u32 config)
4555     +{
4556     + /* Only 2 channels in use for application */
4557     + adv7511_wr_and_or(sd, 0x73, 0xf8, 0x1);
4558     + /* Speaker mapping */
4559     + adv7511_wr(sd, 0x76, 0x00);
4560     +
4561     + /* 16 bit audio word length */
4562     + adv7511_wr_and_or(sd, 0x14, 0xf0, 0x02);
4563     +
4564     + return 0;
4565     +}
4566     +
4567     +static const struct v4l2_subdev_audio_ops adv7511_audio_ops = {
4568     + .s_stream = adv7511_s_audio_stream,
4569     + .s_clock_freq = adv7511_s_clock_freq,
4570     + .s_i2s_clock_freq = adv7511_s_i2s_clock_freq,
4571     + .s_routing = adv7511_s_routing,
4572     +};
4573     +
4574     +/* ---------------------------- PAD OPS ------------------------------------- */
4575     +
4576     +static int adv7511_get_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid)
4577     +{
4578     + struct adv7511_state *state = get_adv7511_state(sd);
4579     +
4580     + memset(edid->reserved, 0, sizeof(edid->reserved));
4581     +
4582     + if (edid->pad != 0)
4583     + return -EINVAL;
4584     +
4585     + if (edid->start_block == 0 && edid->blocks == 0) {
4586     + edid->blocks = state->edid.segments * 2;
4587     + return 0;
4588     + }
4589     +
4590     + if (state->edid.segments == 0)
4591     + return -ENODATA;
4592     +
4593     + if (edid->start_block >= state->edid.segments * 2)
4594     + return -EINVAL;
4595     +
4596     + if (edid->start_block + edid->blocks > state->edid.segments * 2)
4597     + edid->blocks = state->edid.segments * 2 - edid->start_block;
4598     +
4599     + memcpy(edid->edid, &state->edid.data[edid->start_block * 128],
4600     + 128 * edid->blocks);
4601     +
4602     + return 0;
4603     +}
4604     +
4605     +static int adv7511_enum_mbus_code(struct v4l2_subdev *sd,
4606     + struct v4l2_subdev_pad_config *cfg,
4607     + struct v4l2_subdev_mbus_code_enum *code)
4608     +{
4609     + if (code->pad != 0)
4610     + return -EINVAL;
4611     +
4612     + switch (code->index) {
4613     + case 0:
4614     + code->code = MEDIA_BUS_FMT_RGB888_1X24;
4615     + break;
4616     + case 1:
4617     + code->code = MEDIA_BUS_FMT_YUYV8_1X16;
4618     + break;
4619     + case 2:
4620     + code->code = MEDIA_BUS_FMT_UYVY8_1X16;
4621     + break;
4622     + default:
4623     + return -EINVAL;
4624     + }
4625     + return 0;
4626     +}
4627     +
4628     +static void adv7511_fill_format(struct adv7511_state *state,
4629     + struct v4l2_mbus_framefmt *format)
4630     +{
4631     + format->width = state->dv_timings.bt.width;
4632     + format->height = state->dv_timings.bt.height;
4633     + format->field = V4L2_FIELD_NONE;
4634     +}
4635     +
4636     +static int adv7511_get_fmt(struct v4l2_subdev *sd,
4637     + struct v4l2_subdev_pad_config *cfg,
4638     + struct v4l2_subdev_format *format)
4639     +{
4640     + struct adv7511_state *state = get_adv7511_state(sd);
4641     +
4642     + if (format->pad != 0)
4643     + return -EINVAL;
4644     +
4645     + memset(&format->format, 0, sizeof(format->format));
4646     + adv7511_fill_format(state, &format->format);
4647     +
4648     + if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
4649     + struct v4l2_mbus_framefmt *fmt;
4650     +
4651     + fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
4652     + format->format.code = fmt->code;
4653     + format->format.colorspace = fmt->colorspace;
4654     + format->format.ycbcr_enc = fmt->ycbcr_enc;
4655     + format->format.quantization = fmt->quantization;
4656     + format->format.xfer_func = fmt->xfer_func;
4657     + } else {
4658     + format->format.code = state->fmt_code;
4659     + format->format.colorspace = state->colorspace;
4660     + format->format.ycbcr_enc = state->ycbcr_enc;
4661     + format->format.quantization = state->quantization;
4662     + format->format.xfer_func = state->xfer_func;
4663     + }
4664     +
4665     + return 0;
4666     +}
4667     +
4668     +static int adv7511_set_fmt(struct v4l2_subdev *sd,
4669     + struct v4l2_subdev_pad_config *cfg,
4670     + struct v4l2_subdev_format *format)
4671     +{
4672     + struct adv7511_state *state = get_adv7511_state(sd);
4673     + /*
4674     + * Bitfield namings come the CEA-861-F standard, table 8 "Auxiliary
4675     + * Video Information (AVI) InfoFrame Format"
4676     + *
4677     + * c = Colorimetry
4678     + * ec = Extended Colorimetry
4679     + * y = RGB or YCbCr
4680     + * q = RGB Quantization Range
4681     + * yq = YCC Quantization Range
4682     + */
4683     + u8 c = HDMI_COLORIMETRY_NONE;
4684     + u8 ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
4685     + u8 y = HDMI_COLORSPACE_RGB;
4686     + u8 q = HDMI_QUANTIZATION_RANGE_DEFAULT;
4687     + u8 yq = HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
4688     + u8 itc = state->content_type != V4L2_DV_IT_CONTENT_TYPE_NO_ITC;
4689     + u8 cn = itc ? state->content_type : V4L2_DV_IT_CONTENT_TYPE_GRAPHICS;
4690     +
4691     + if (format->pad != 0)
4692     + return -EINVAL;
4693     + switch (format->format.code) {
4694     + case MEDIA_BUS_FMT_UYVY8_1X16:
4695     + case MEDIA_BUS_FMT_YUYV8_1X16:
4696     + case MEDIA_BUS_FMT_RGB888_1X24:
4697     + break;
4698     + default:
4699     + return -EINVAL;
4700     + }
4701     +
4702     + adv7511_fill_format(state, &format->format);
4703     + if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
4704     + struct v4l2_mbus_framefmt *fmt;
4705     +
4706     + fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
4707     + fmt->code = format->format.code;
4708     + fmt->colorspace = format->format.colorspace;
4709     + fmt->ycbcr_enc = format->format.ycbcr_enc;
4710     + fmt->quantization = format->format.quantization;
4711     + fmt->xfer_func = format->format.xfer_func;
4712     + return 0;
4713     + }
4714     +
4715     + switch (format->format.code) {
4716     + case MEDIA_BUS_FMT_UYVY8_1X16:
4717     + adv7511_wr_and_or(sd, 0x15, 0xf0, 0x01);
4718     + adv7511_wr_and_or(sd, 0x16, 0x03, 0xb8);
4719     + y = HDMI_COLORSPACE_YUV422;
4720     + break;
4721     + case MEDIA_BUS_FMT_YUYV8_1X16:
4722     + adv7511_wr_and_or(sd, 0x15, 0xf0, 0x01);
4723     + adv7511_wr_and_or(sd, 0x16, 0x03, 0xbc);
4724     + y = HDMI_COLORSPACE_YUV422;
4725     + break;
4726     + case MEDIA_BUS_FMT_RGB888_1X24:
4727     + default:
4728     + adv7511_wr_and_or(sd, 0x15, 0xf0, 0x00);
4729     + adv7511_wr_and_or(sd, 0x16, 0x03, 0x00);
4730     + break;
4731     + }
4732     + state->fmt_code = format->format.code;
4733     + state->colorspace = format->format.colorspace;
4734     + state->ycbcr_enc = format->format.ycbcr_enc;
4735     + state->quantization = format->format.quantization;
4736     + state->xfer_func = format->format.xfer_func;
4737     +
4738     + switch (format->format.colorspace) {
4739     + case V4L2_COLORSPACE_OPRGB:
4740     + c = HDMI_COLORIMETRY_EXTENDED;
4741     + ec = y ? HDMI_EXTENDED_COLORIMETRY_OPYCC_601 :
4742     + HDMI_EXTENDED_COLORIMETRY_OPRGB;
4743     + break;
4744     + case V4L2_COLORSPACE_SMPTE170M:
4745     + c = y ? HDMI_COLORIMETRY_ITU_601 : HDMI_COLORIMETRY_NONE;
4746     + if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_XV601) {
4747     + c = HDMI_COLORIMETRY_EXTENDED;
4748     + ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
4749     + }
4750     + break;
4751     + case V4L2_COLORSPACE_REC709:
4752     + c = y ? HDMI_COLORIMETRY_ITU_709 : HDMI_COLORIMETRY_NONE;
4753     + if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_XV709) {
4754     + c = HDMI_COLORIMETRY_EXTENDED;
4755     + ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_709;
4756     + }
4757     + break;
4758     + case V4L2_COLORSPACE_SRGB:
4759     + c = y ? HDMI_COLORIMETRY_EXTENDED : HDMI_COLORIMETRY_NONE;
4760     + ec = y ? HDMI_EXTENDED_COLORIMETRY_S_YCC_601 :
4761     + HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
4762     + break;
4763     + case V4L2_COLORSPACE_BT2020:
4764     + c = HDMI_COLORIMETRY_EXTENDED;
4765     + if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_BT2020_CONST_LUM)
4766     + ec = 5; /* Not yet available in hdmi.h */
4767     + else
4768     + ec = 6; /* Not yet available in hdmi.h */
4769     + break;
4770     + default:
4771     + break;
4772     + }
4773     +
4774     + /*
4775     + * CEA-861-F says that for RGB formats the YCC range must match the
4776     + * RGB range, although sources should ignore the YCC range.
4777     + *
4778     + * The RGB quantization range shouldn't be non-zero if the EDID doesn't
4779     + * have the Q bit set in the Video Capabilities Data Block, however this
4780     + * isn't checked at the moment. The assumption is that the application
4781     + * knows the EDID and can detect this.
4782     + *
4783     + * The same is true for the YCC quantization range: non-standard YCC
4784     + * quantization ranges should only be sent if the EDID has the YQ bit
4785     + * set in the Video Capabilities Data Block.
4786     + */
4787     + switch (format->format.quantization) {
4788     + case V4L2_QUANTIZATION_FULL_RANGE:
4789     + q = y ? HDMI_QUANTIZATION_RANGE_DEFAULT :
4790     + HDMI_QUANTIZATION_RANGE_FULL;
4791     + yq = q ? q - 1 : HDMI_YCC_QUANTIZATION_RANGE_FULL;
4792     + break;
4793     + case V4L2_QUANTIZATION_LIM_RANGE:
4794     + q = y ? HDMI_QUANTIZATION_RANGE_DEFAULT :
4795     + HDMI_QUANTIZATION_RANGE_LIMITED;
4796     + yq = q ? q - 1 : HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
4797     + break;
4798     + }
4799     +
4800     + adv7511_wr_and_or(sd, 0x4a, 0xbf, 0);
4801     + adv7511_wr_and_or(sd, 0x55, 0x9f, y << 5);
4802     + adv7511_wr_and_or(sd, 0x56, 0x3f, c << 6);
4803     + adv7511_wr_and_or(sd, 0x57, 0x83, (ec << 4) | (q << 2) | (itc << 7));
4804     + adv7511_wr_and_or(sd, 0x59, 0x0f, (yq << 6) | (cn << 4));
4805     + adv7511_wr_and_or(sd, 0x4a, 0xff, 1);
4806     + adv7511_set_rgb_quantization_mode(sd, state->rgb_quantization_range_ctrl);
4807     +
4808     + return 0;
4809     +}
4810     +
4811     +static const struct v4l2_subdev_pad_ops adv7511_pad_ops = {
4812     + .get_edid = adv7511_get_edid,
4813     + .enum_mbus_code = adv7511_enum_mbus_code,
4814     + .get_fmt = adv7511_get_fmt,
4815     + .set_fmt = adv7511_set_fmt,
4816     + .enum_dv_timings = adv7511_enum_dv_timings,
4817     + .dv_timings_cap = adv7511_dv_timings_cap,
4818     +};
4819     +
4820     +/* --------------------- SUBDEV OPS --------------------------------------- */
4821     +
4822     +static const struct v4l2_subdev_ops adv7511_ops = {
4823     + .core = &adv7511_core_ops,
4824     + .pad = &adv7511_pad_ops,
4825     + .video = &adv7511_video_ops,
4826     + .audio = &adv7511_audio_ops,
4827     +};
4828     +
4829     +/* ----------------------------------------------------------------------- */
4830     +static void adv7511_dbg_dump_edid(int lvl, int debug, struct v4l2_subdev *sd, int segment, u8 *buf)
4831     +{
4832     + if (debug >= lvl) {
4833     + int i, j;
4834     + v4l2_dbg(lvl, debug, sd, "edid segment %d\n", segment);
4835     + for (i = 0; i < 256; i += 16) {
4836     + u8 b[128];
4837     + u8 *bp = b;
4838     + if (i == 128)
4839     + v4l2_dbg(lvl, debug, sd, "\n");
4840     + for (j = i; j < i + 16; j++) {
4841     + sprintf(bp, "0x%02x, ", buf[j]);
4842     + bp += 6;
4843     + }
4844     + bp[0] = '\0';
4845     + v4l2_dbg(lvl, debug, sd, "%s\n", b);
4846     + }
4847     + }
4848     +}
4849     +
4850     +static void adv7511_notify_no_edid(struct v4l2_subdev *sd)
4851     +{
4852     + struct adv7511_state *state = get_adv7511_state(sd);
4853     + struct adv7511_edid_detect ed;
4854     +
4855     + /* We failed to read the EDID, so send an event for this. */
4856     + ed.present = false;
4857     + ed.segment = adv7511_rd(sd, 0xc4);
4858     + ed.phys_addr = CEC_PHYS_ADDR_INVALID;
4859     + cec_s_phys_addr(state->cec_adap, ed.phys_addr, false);
4860     + v4l2_subdev_notify(sd, ADV7511_EDID_DETECT, (void *)&ed);
4861     + v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, 0x0);
4862     +}
4863     +
4864     +static void adv7511_edid_handler(struct work_struct *work)
4865     +{
4866     + struct delayed_work *dwork = to_delayed_work(work);
4867     + struct adv7511_state *state = container_of(dwork, struct adv7511_state, edid_handler);
4868     + struct v4l2_subdev *sd = &state->sd;
4869     +
4870     + v4l2_dbg(1, debug, sd, "%s:\n", __func__);
4871     +
4872     + if (adv7511_check_edid_status(sd)) {
4873     + /* Return if we received the EDID. */
4874     + return;
4875     + }
4876     +
4877     + if (adv7511_have_hotplug(sd)) {
4878     + /* We must retry reading the EDID several times, it is possible
4879     + * that initially the EDID couldn't be read due to i2c errors
4880     + * (DVI connectors are particularly prone to this problem). */
4881     + if (state->edid.read_retries) {
4882     + state->edid.read_retries--;
4883     + v4l2_dbg(1, debug, sd, "%s: edid read failed\n", __func__);
4884     + state->have_monitor = false;
4885     + adv7511_s_power(sd, false);
4886     + adv7511_s_power(sd, true);
4887     + queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
4888     + return;
4889     + }
4890     + }
4891     +
4892     + /* We failed to read the EDID, so send an event for this. */
4893     + adv7511_notify_no_edid(sd);
4894     + v4l2_dbg(1, debug, sd, "%s: no edid found\n", __func__);
4895     +}
4896     +
4897     +static void adv7511_audio_setup(struct v4l2_subdev *sd)
4898     +{
4899     + v4l2_dbg(1, debug, sd, "%s\n", __func__);
4900     +
4901     + adv7511_s_i2s_clock_freq(sd, 48000);
4902     + adv7511_s_clock_freq(sd, 48000);
4903     + adv7511_s_routing(sd, 0, 0, 0);
4904     +}
4905     +
4906     +/* Configure hdmi transmitter. */
4907     +static void adv7511_setup(struct v4l2_subdev *sd)
4908     +{
4909     + struct adv7511_state *state = get_adv7511_state(sd);
4910     + v4l2_dbg(1, debug, sd, "%s\n", __func__);
4911     +
4912     + /* Input format: RGB 4:4:4 */
4913     + adv7511_wr_and_or(sd, 0x15, 0xf0, 0x0);
4914     + /* Output format: RGB 4:4:4 */
4915     + adv7511_wr_and_or(sd, 0x16, 0x7f, 0x0);
4916     + /* 1st order interpolation 4:2:2 -> 4:4:4 up conversion, Aspect ratio: 16:9 */
4917     + adv7511_wr_and_or(sd, 0x17, 0xf9, 0x06);
4918     + /* Disable pixel repetition */
4919     + adv7511_wr_and_or(sd, 0x3b, 0x9f, 0x0);
4920     + /* Disable CSC */
4921     + adv7511_wr_and_or(sd, 0x18, 0x7f, 0x0);
4922     + /* Output format: RGB 4:4:4, Active Format Information is valid,
4923     + * underscanned */
4924     + adv7511_wr_and_or(sd, 0x55, 0x9c, 0x12);
4925     + /* AVI Info frame packet enable, Audio Info frame disable */
4926     + adv7511_wr_and_or(sd, 0x44, 0xe7, 0x10);
4927     + /* Colorimetry, Active format aspect ratio: same as picure. */
4928     + adv7511_wr(sd, 0x56, 0xa8);
4929     + /* No encryption */
4930     + adv7511_wr_and_or(sd, 0xaf, 0xed, 0x0);
4931     +
4932     + /* Positive clk edge capture for input video clock */
4933     + adv7511_wr_and_or(sd, 0xba, 0x1f, 0x60);
4934     +
4935     + adv7511_audio_setup(sd);
4936     +
4937     + v4l2_ctrl_handler_setup(&state->hdl);
4938     +}
4939     +
4940     +static void adv7511_notify_monitor_detect(struct v4l2_subdev *sd)
4941     +{
4942     + struct adv7511_monitor_detect mdt;
4943     + struct adv7511_state *state = get_adv7511_state(sd);
4944     +
4945     + mdt.present = state->have_monitor;
4946     + v4l2_subdev_notify(sd, ADV7511_MONITOR_DETECT, (void *)&mdt);
4947     +}
4948     +
4949     +static void adv7511_check_monitor_present_status(struct v4l2_subdev *sd)
4950     +{
4951     + struct adv7511_state *state = get_adv7511_state(sd);
4952     + /* read hotplug and rx-sense state */
4953     + u8 status = adv7511_rd(sd, 0x42);
4954     +
4955     + v4l2_dbg(1, debug, sd, "%s: status: 0x%x%s%s\n",
4956     + __func__,
4957     + status,
4958     + status & MASK_ADV7511_HPD_DETECT ? ", hotplug" : "",
4959     + status & MASK_ADV7511_MSEN_DETECT ? ", rx-sense" : "");
4960     +
4961     + /* update read only ctrls */
4962     + v4l2_ctrl_s_ctrl(state->hotplug_ctrl, adv7511_have_hotplug(sd) ? 0x1 : 0x0);
4963     + v4l2_ctrl_s_ctrl(state->rx_sense_ctrl, adv7511_have_rx_sense(sd) ? 0x1 : 0x0);
4964     +
4965     + if ((status & MASK_ADV7511_HPD_DETECT) && ((status & MASK_ADV7511_MSEN_DETECT) || state->edid.segments)) {
4966     + v4l2_dbg(1, debug, sd, "%s: hotplug and (rx-sense or edid)\n", __func__);
4967     + if (!state->have_monitor) {
4968     + v4l2_dbg(1, debug, sd, "%s: monitor detected\n", __func__);
4969     + state->have_monitor = true;
4970     + adv7511_set_isr(sd, true);
4971     + if (!adv7511_s_power(sd, true)) {
4972     + v4l2_dbg(1, debug, sd, "%s: monitor detected, powerup failed\n", __func__);
4973     + return;
4974     + }
4975     + adv7511_setup(sd);
4976     + adv7511_notify_monitor_detect(sd);
4977     + state->edid.read_retries = EDID_MAX_RETRIES;
4978     + queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
4979     + }
4980     + } else if (status & MASK_ADV7511_HPD_DETECT) {
4981     + v4l2_dbg(1, debug, sd, "%s: hotplug detected\n", __func__);
4982     + state->edid.read_retries = EDID_MAX_RETRIES;
4983     + queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
4984     + } else if (!(status & MASK_ADV7511_HPD_DETECT)) {
4985     + v4l2_dbg(1, debug, sd, "%s: hotplug not detected\n", __func__);
4986     + if (state->have_monitor) {
4987     + v4l2_dbg(1, debug, sd, "%s: monitor not detected\n", __func__);
4988     + state->have_monitor = false;
4989     + adv7511_notify_monitor_detect(sd);
4990     + }
4991     + adv7511_s_power(sd, false);
4992     + memset(&state->edid, 0, sizeof(struct adv7511_state_edid));
4993     + adv7511_notify_no_edid(sd);
4994     + }
4995     +}
4996     +
4997     +static bool edid_block_verify_crc(u8 *edid_block)
4998     +{
4999     + u8 sum = 0;
5000     + int i;
5001     +
5002     + for (i = 0; i < 128; i++)
5003     + sum += edid_block[i];
5004     + return sum == 0;
5005     +}
5006     +
5007     +static bool edid_verify_crc(struct v4l2_subdev *sd, u32 segment)
5008     +{
5009     + struct adv7511_state *state = get_adv7511_state(sd);
5010     + u32 blocks = state->edid.blocks;
5011     + u8 *data = state->edid.data;
5012     +
5013     + if (!edid_block_verify_crc(&data[segment * 256]))
5014     + return false;
5015     + if ((segment + 1) * 2 <= blocks)
5016     + return edid_block_verify_crc(&data[segment * 256 + 128]);
5017     + return true;
5018     +}
5019     +
5020     +static bool edid_verify_header(struct v4l2_subdev *sd, u32 segment)
5021     +{
5022     + static const u8 hdmi_header[] = {
5023     + 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
5024     + };
5025     + struct adv7511_state *state = get_adv7511_state(sd);
5026     + u8 *data = state->edid.data;
5027     +
5028     + if (segment != 0)
5029     + return true;
5030     + return !memcmp(data, hdmi_header, sizeof(hdmi_header));
5031     +}
5032     +
5033     +static bool adv7511_check_edid_status(struct v4l2_subdev *sd)
5034     +{
5035     + struct adv7511_state *state = get_adv7511_state(sd);
5036     + u8 edidRdy = adv7511_rd(sd, 0xc5);
5037     +
5038     + v4l2_dbg(1, debug, sd, "%s: edid ready (retries: %d)\n",
5039     + __func__, EDID_MAX_RETRIES - state->edid.read_retries);
5040     +
5041     + if (state->edid.complete)
5042     + return true;
5043     +
5044     + if (edidRdy & MASK_ADV7511_EDID_RDY) {
5045     + int segment = adv7511_rd(sd, 0xc4);
5046     + struct adv7511_edid_detect ed;
5047     +
5048     + if (segment >= EDID_MAX_SEGM) {
5049     + v4l2_err(sd, "edid segment number too big\n");
5050     + return false;
5051     + }
5052     + v4l2_dbg(1, debug, sd, "%s: got segment %d\n", __func__, segment);
5053     + adv7511_edid_rd(sd, 256, &state->edid.data[segment * 256]);
5054     + adv7511_dbg_dump_edid(2, debug, sd, segment, &state->edid.data[segment * 256]);
5055     + if (segment == 0) {
5056     + state->edid.blocks = state->edid.data[0x7e] + 1;
5057     + v4l2_dbg(1, debug, sd, "%s: %d blocks in total\n", __func__, state->edid.blocks);
5058     + }
5059     + if (!edid_verify_crc(sd, segment) ||
5060     + !edid_verify_header(sd, segment)) {
5061     + /* edid crc error, force reread of edid segment */
5062     + v4l2_err(sd, "%s: edid crc or header error\n", __func__);
5063     + state->have_monitor = false;
5064     + adv7511_s_power(sd, false);
5065     + adv7511_s_power(sd, true);
5066     + return false;
5067     + }
5068     + /* one more segment read ok */
5069     + state->edid.segments = segment + 1;
5070     + v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, 0x1);
5071     + if (((state->edid.data[0x7e] >> 1) + 1) > state->edid.segments) {
5072     + /* Request next EDID segment */
5073     + v4l2_dbg(1, debug, sd, "%s: request segment %d\n", __func__, state->edid.segments);
5074     + adv7511_wr(sd, 0xc9, 0xf);
5075     + adv7511_wr(sd, 0xc4, state->edid.segments);
5076     + state->edid.read_retries = EDID_MAX_RETRIES;
5077     + queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
5078     + return false;
5079     + }
5080     +
5081     + v4l2_dbg(1, debug, sd, "%s: edid complete with %d segment(s)\n", __func__, state->edid.segments);
5082     + state->edid.complete = true;
5083     + ed.phys_addr = cec_get_edid_phys_addr(state->edid.data,
5084     + state->edid.segments * 256,
5085     + NULL);
5086     + /* report when we have all segments
5087     + but report only for segment 0
5088     + */
5089     + ed.present = true;
5090     + ed.segment = 0;
5091     + state->edid_detect_counter++;
5092     + cec_s_phys_addr(state->cec_adap, ed.phys_addr, false);
5093     + v4l2_subdev_notify(sd, ADV7511_EDID_DETECT, (void *)&ed);
5094     + return ed.present;
5095     + }
5096     +
5097     + return false;
5098     +}
5099     +
5100     +static int adv7511_registered(struct v4l2_subdev *sd)
5101     +{
5102     + struct adv7511_state *state = get_adv7511_state(sd);
5103     + struct i2c_client *client = v4l2_get_subdevdata(sd);
5104     + int err;
5105     +
5106     + err = cec_register_adapter(state->cec_adap, &client->dev);
5107     + if (err)
5108     + cec_delete_adapter(state->cec_adap);
5109     + return err;
5110     +}
5111     +
5112     +static void adv7511_unregistered(struct v4l2_subdev *sd)
5113     +{
5114     + struct adv7511_state *state = get_adv7511_state(sd);
5115     +
5116     + cec_unregister_adapter(state->cec_adap);
5117     +}
5118     +
5119     +static const struct v4l2_subdev_internal_ops adv7511_int_ops = {
5120     + .registered = adv7511_registered,
5121     + .unregistered = adv7511_unregistered,
5122     +};
5123     +
5124     +/* ----------------------------------------------------------------------- */
5125     +/* Setup ADV7511 */
5126     +static void adv7511_init_setup(struct v4l2_subdev *sd)
5127     +{
5128     + struct adv7511_state *state = get_adv7511_state(sd);
5129     + struct adv7511_state_edid *edid = &state->edid;
5130     + u32 cec_clk = state->pdata.cec_clk;
5131     + u8 ratio;
5132     +
5133     + v4l2_dbg(1, debug, sd, "%s\n", __func__);
5134     +
5135     + /* clear all interrupts */
5136     + adv7511_wr(sd, 0x96, 0xff);
5137     + adv7511_wr(sd, 0x97, 0xff);
5138     + /*
5139     + * Stop HPD from resetting a lot of registers.
5140     + * It might leave the chip in a partly un-initialized state,
5141     + * in particular with regards to hotplug bounces.
5142     + */
5143     + adv7511_wr_and_or(sd, 0xd6, 0x3f, 0xc0);
5144     + memset(edid, 0, sizeof(struct adv7511_state_edid));
5145     + state->have_monitor = false;
5146     + adv7511_set_isr(sd, false);
5147     + adv7511_s_stream(sd, false);
5148     + adv7511_s_audio_stream(sd, false);
5149     +
5150     + if (state->i2c_cec == NULL)
5151     + return;
5152     +
5153     + v4l2_dbg(1, debug, sd, "%s: cec_clk %d\n", __func__, cec_clk);
5154     +
5155     + /* cec soft reset */
5156     + adv7511_cec_write(sd, 0x50, 0x01);
5157     + adv7511_cec_write(sd, 0x50, 0x00);
5158     +
5159     + /* legacy mode */
5160     + adv7511_cec_write(sd, 0x4a, 0x00);
5161     + adv7511_cec_write(sd, 0x4a, 0x07);
5162     +
5163     + if (cec_clk % 750000 != 0)
5164     + v4l2_err(sd, "%s: cec_clk %d, not multiple of 750 Khz\n",
5165     + __func__, cec_clk);
5166     +
5167     + ratio = (cec_clk / 750000) - 1;
5168     + adv7511_cec_write(sd, 0x4e, ratio << 2);
5169     +}
5170     +
5171     +static int adv7511_probe(struct i2c_client *client, const struct i2c_device_id *id)
5172     +{
5173     + struct adv7511_state *state;
5174     + struct adv7511_platform_data *pdata = client->dev.platform_data;
5175     + struct v4l2_ctrl_handler *hdl;
5176     + struct v4l2_subdev *sd;
5177     + u8 chip_id[2];
5178     + int err = -EIO;
5179     +
5180     + /* Check if the adapter supports the needed features */
5181     + if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
5182     + return -EIO;
5183     +
5184     + state = devm_kzalloc(&client->dev, sizeof(struct adv7511_state), GFP_KERNEL);
5185     + if (!state)
5186     + return -ENOMEM;
5187     +
5188     + /* Platform data */
5189     + if (!pdata) {
5190     + v4l_err(client, "No platform data!\n");
5191     + return -ENODEV;
5192     + }
5193     + memcpy(&state->pdata, pdata, sizeof(state->pdata));
5194     + state->fmt_code = MEDIA_BUS_FMT_RGB888_1X24;
5195     + state->colorspace = V4L2_COLORSPACE_SRGB;
5196     +
5197     + sd = &state->sd;
5198     +
5199     + v4l2_dbg(1, debug, sd, "detecting adv7511 client on address 0x%x\n",
5200     + client->addr << 1);
5201     +
5202     + v4l2_i2c_subdev_init(sd, client, &adv7511_ops);
5203     + sd->internal_ops = &adv7511_int_ops;
5204     +
5205     + hdl = &state->hdl;
5206     + v4l2_ctrl_handler_init(hdl, 10);
5207     + /* add in ascending ID order */
5208     + state->hdmi_mode_ctrl = v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
5209     + V4L2_CID_DV_TX_MODE, V4L2_DV_TX_MODE_HDMI,
5210     + 0, V4L2_DV_TX_MODE_DVI_D);
5211     + state->hotplug_ctrl = v4l2_ctrl_new_std(hdl, NULL,
5212     + V4L2_CID_DV_TX_HOTPLUG, 0, 1, 0, 0);
5213     + state->rx_sense_ctrl = v4l2_ctrl_new_std(hdl, NULL,
5214     + V4L2_CID_DV_TX_RXSENSE, 0, 1, 0, 0);
5215     + state->have_edid0_ctrl = v4l2_ctrl_new_std(hdl, NULL,
5216     + V4L2_CID_DV_TX_EDID_PRESENT, 0, 1, 0, 0);
5217     + state->rgb_quantization_range_ctrl =
5218     + v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
5219     + V4L2_CID_DV_TX_RGB_RANGE, V4L2_DV_RGB_RANGE_FULL,
5220     + 0, V4L2_DV_RGB_RANGE_AUTO);
5221     + state->content_type_ctrl =
5222     + v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
5223     + V4L2_CID_DV_TX_IT_CONTENT_TYPE, V4L2_DV_IT_CONTENT_TYPE_NO_ITC,
5224     + 0, V4L2_DV_IT_CONTENT_TYPE_NO_ITC);
5225     + sd->ctrl_handler = hdl;
5226     + if (hdl->error) {
5227     + err = hdl->error;
5228     + goto err_hdl;
5229     + }
5230     + state->pad.flags = MEDIA_PAD_FL_SINK;
5231     + sd->entity.function = MEDIA_ENT_F_DV_ENCODER;
5232     + err = media_entity_pads_init(&sd->entity, 1, &state->pad);
5233     + if (err)
5234     + goto err_hdl;
5235     +
5236     + /* EDID and CEC i2c addr */
5237     + state->i2c_edid_addr = state->pdata.i2c_edid << 1;
5238     + state->i2c_cec_addr = state->pdata.i2c_cec << 1;
5239     + state->i2c_pktmem_addr = state->pdata.i2c_pktmem << 1;
5240     +
5241     + state->chip_revision = adv7511_rd(sd, 0x0);
5242     + chip_id[0] = adv7511_rd(sd, 0xf5);
5243     + chip_id[1] = adv7511_rd(sd, 0xf6);
5244     + if (chip_id[0] != 0x75 || chip_id[1] != 0x11) {
5245     + v4l2_err(sd, "chip_id != 0x7511, read 0x%02x%02x\n", chip_id[0],
5246     + chip_id[1]);
5247     + err = -EIO;
5248     + goto err_entity;
5249     + }
5250     +
5251     + state->i2c_edid = i2c_new_dummy(client->adapter,
5252     + state->i2c_edid_addr >> 1);
5253     + if (state->i2c_edid == NULL) {
5254     + v4l2_err(sd, "failed to register edid i2c client\n");
5255     + err = -ENOMEM;
5256     + goto err_entity;
5257     + }
5258     +
5259     + adv7511_wr(sd, 0xe1, state->i2c_cec_addr);
5260     + if (state->pdata.cec_clk < 3000000 ||
5261     + state->pdata.cec_clk > 100000000) {
5262     + v4l2_err(sd, "%s: cec_clk %u outside range, disabling cec\n",
5263     + __func__, state->pdata.cec_clk);
5264     + state->pdata.cec_clk = 0;
5265     + }
5266     +
5267     + if (state->pdata.cec_clk) {
5268     + state->i2c_cec = i2c_new_dummy(client->adapter,
5269     + state->i2c_cec_addr >> 1);
5270     + if (state->i2c_cec == NULL) {
5271     + v4l2_err(sd, "failed to register cec i2c client\n");
5272     + err = -ENOMEM;
5273     + goto err_unreg_edid;
5274     + }
5275     + adv7511_wr(sd, 0xe2, 0x00); /* power up cec section */
5276     + } else {
5277     + adv7511_wr(sd, 0xe2, 0x01); /* power down cec section */
5278     + }
5279     +
5280     + state->i2c_pktmem = i2c_new_dummy(client->adapter, state->i2c_pktmem_addr >> 1);
5281     + if (state->i2c_pktmem == NULL) {
5282     + v4l2_err(sd, "failed to register pktmem i2c client\n");
5283     + err = -ENOMEM;
5284     + goto err_unreg_cec;
5285     + }
5286     +
5287     + state->work_queue = create_singlethread_workqueue(sd->name);
5288     + if (state->work_queue == NULL) {
5289     + v4l2_err(sd, "could not create workqueue\n");
5290     + err = -ENOMEM;
5291     + goto err_unreg_pktmem;
5292     + }
5293     +
5294     + INIT_DELAYED_WORK(&state->edid_handler, adv7511_edid_handler);
5295     +
5296     + adv7511_init_setup(sd);
5297     +
5298     +#if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
5299     + state->cec_adap = cec_allocate_adapter(&adv7511_cec_adap_ops,
5300     + state, dev_name(&client->dev), CEC_CAP_DEFAULTS,
5301     + ADV7511_MAX_ADDRS);
5302     + err = PTR_ERR_OR_ZERO(state->cec_adap);
5303     + if (err) {
5304     + destroy_workqueue(state->work_queue);
5305     + goto err_unreg_pktmem;
5306     + }
5307     +#endif
5308     +
5309     + adv7511_set_isr(sd, true);
5310     + adv7511_check_monitor_present_status(sd);
5311     +
5312     + v4l2_info(sd, "%s found @ 0x%x (%s)\n", client->name,
5313     + client->addr << 1, client->adapter->name);
5314     + return 0;
5315     +
5316     +err_unreg_pktmem:
5317     + i2c_unregister_device(state->i2c_pktmem);
5318     +err_unreg_cec:
5319     + if (state->i2c_cec)
5320     + i2c_unregister_device(state->i2c_cec);
5321     +err_unreg_edid:
5322     + i2c_unregister_device(state->i2c_edid);
5323     +err_entity:
5324     + media_entity_cleanup(&sd->entity);
5325     +err_hdl:
5326     + v4l2_ctrl_handler_free(&state->hdl);
5327     + return err;
5328     +}
5329     +
5330     +/* ----------------------------------------------------------------------- */
5331     +
5332     +static int adv7511_remove(struct i2c_client *client)
5333     +{
5334     + struct v4l2_subdev *sd = i2c_get_clientdata(client);
5335     + struct adv7511_state *state = get_adv7511_state(sd);
5336     +
5337     + state->chip_revision = -1;
5338     +
5339     + v4l2_dbg(1, debug, sd, "%s removed @ 0x%x (%s)\n", client->name,
5340     + client->addr << 1, client->adapter->name);
5341     +
5342     + adv7511_set_isr(sd, false);
5343     + adv7511_init_setup(sd);
5344     + cancel_delayed_work(&state->edid_handler);
5345     + i2c_unregister_device(state->i2c_edid);
5346     + if (state->i2c_cec)
5347     + i2c_unregister_device(state->i2c_cec);
5348     + i2c_unregister_device(state->i2c_pktmem);
5349     + destroy_workqueue(state->work_queue);
5350     + v4l2_device_unregister_subdev(sd);
5351     + media_entity_cleanup(&sd->entity);
5352     + v4l2_ctrl_handler_free(sd->ctrl_handler);
5353     + return 0;
5354     +}
5355     +
5356     +/* ----------------------------------------------------------------------- */
5357     +
5358     +static const struct i2c_device_id adv7511_id[] = {
5359     + { "adv7511", 0 },
5360     + { }
5361     +};
5362     +MODULE_DEVICE_TABLE(i2c, adv7511_id);
5363     +
5364     +static struct i2c_driver adv7511_driver = {
5365     + .driver = {
5366     + .name = "adv7511",
5367     + },
5368     + .probe = adv7511_probe,
5369     + .remove = adv7511_remove,
5370     + .id_table = adv7511_id,
5371     +};
5372     +
5373     +module_i2c_driver(adv7511_driver);
5374     diff --git a/drivers/media/i2c/adv7511.c b/drivers/media/i2c/adv7511.c
5375     deleted file mode 100644
5376     index 88349b5053cc..000000000000
5377     --- a/drivers/media/i2c/adv7511.c
5378     +++ /dev/null
5379     @@ -1,1992 +0,0 @@
5380     -// SPDX-License-Identifier: GPL-2.0-only
5381     -/*
5382     - * Analog Devices ADV7511 HDMI Transmitter Device Driver
5383     - *
5384     - * Copyright 2013 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
5385     - */
5386     -
5387     -
5388     -#include <linux/kernel.h>
5389     -#include <linux/module.h>
5390     -#include <linux/slab.h>
5391     -#include <linux/i2c.h>
5392     -#include <linux/delay.h>
5393     -#include <linux/videodev2.h>
5394     -#include <linux/gpio.h>
5395     -#include <linux/workqueue.h>
5396     -#include <linux/hdmi.h>
5397     -#include <linux/v4l2-dv-timings.h>
5398     -#include <media/v4l2-device.h>
5399     -#include <media/v4l2-common.h>
5400     -#include <media/v4l2-ctrls.h>
5401     -#include <media/v4l2-dv-timings.h>
5402     -#include <media/i2c/adv7511.h>
5403     -#include <media/cec.h>
5404     -
5405     -static int debug;
5406     -module_param(debug, int, 0644);
5407     -MODULE_PARM_DESC(debug, "debug level (0-2)");
5408     -
5409     -MODULE_DESCRIPTION("Analog Devices ADV7511 HDMI Transmitter Device Driver");
5410     -MODULE_AUTHOR("Hans Verkuil");
5411     -MODULE_LICENSE("GPL v2");
5412     -
5413     -#define MASK_ADV7511_EDID_RDY_INT 0x04
5414     -#define MASK_ADV7511_MSEN_INT 0x40
5415     -#define MASK_ADV7511_HPD_INT 0x80
5416     -
5417     -#define MASK_ADV7511_HPD_DETECT 0x40
5418     -#define MASK_ADV7511_MSEN_DETECT 0x20
5419     -#define MASK_ADV7511_EDID_RDY 0x10
5420     -
5421     -#define EDID_MAX_RETRIES (8)
5422     -#define EDID_DELAY 250
5423     -#define EDID_MAX_SEGM 8
5424     -
5425     -#define ADV7511_MAX_WIDTH 1920
5426     -#define ADV7511_MAX_HEIGHT 1200
5427     -#define ADV7511_MIN_PIXELCLOCK 20000000
5428     -#define ADV7511_MAX_PIXELCLOCK 225000000
5429     -
5430     -#define ADV7511_MAX_ADDRS (3)
5431     -
5432     -/*
5433     -**********************************************************************
5434     -*
5435     -* Arrays with configuration parameters for the ADV7511
5436     -*
5437     -**********************************************************************
5438     -*/
5439     -
5440     -struct i2c_reg_value {
5441     - unsigned char reg;
5442     - unsigned char value;
5443     -};
5444     -
5445     -struct adv7511_state_edid {
5446     - /* total number of blocks */
5447     - u32 blocks;
5448     - /* Number of segments read */
5449     - u32 segments;
5450     - u8 data[EDID_MAX_SEGM * 256];
5451     - /* Number of EDID read retries left */
5452     - unsigned read_retries;
5453     - bool complete;
5454     -};
5455     -
5456     -struct adv7511_state {
5457     - struct adv7511_platform_data pdata;
5458     - struct v4l2_subdev sd;
5459     - struct media_pad pad;
5460     - struct v4l2_ctrl_handler hdl;
5461     - int chip_revision;
5462     - u8 i2c_edid_addr;
5463     - u8 i2c_pktmem_addr;
5464     - u8 i2c_cec_addr;
5465     -
5466     - struct i2c_client *i2c_cec;
5467     - struct cec_adapter *cec_adap;
5468     - u8 cec_addr[ADV7511_MAX_ADDRS];
5469     - u8 cec_valid_addrs;
5470     - bool cec_enabled_adap;
5471     -
5472     - /* Is the adv7511 powered on? */
5473     - bool power_on;
5474     - /* Did we receive hotplug and rx-sense signals? */
5475     - bool have_monitor;
5476     - bool enabled_irq;
5477     - /* timings from s_dv_timings */
5478     - struct v4l2_dv_timings dv_timings;
5479     - u32 fmt_code;
5480     - u32 colorspace;
5481     - u32 ycbcr_enc;
5482     - u32 quantization;
5483     - u32 xfer_func;
5484     - u32 content_type;
5485     - /* controls */
5486     - struct v4l2_ctrl *hdmi_mode_ctrl;
5487     - struct v4l2_ctrl *hotplug_ctrl;
5488     - struct v4l2_ctrl *rx_sense_ctrl;
5489     - struct v4l2_ctrl *have_edid0_ctrl;
5490     - struct v4l2_ctrl *rgb_quantization_range_ctrl;
5491     - struct v4l2_ctrl *content_type_ctrl;
5492     - struct i2c_client *i2c_edid;
5493     - struct i2c_client *i2c_pktmem;
5494     - struct adv7511_state_edid edid;
5495     - /* Running counter of the number of detected EDIDs (for debugging) */
5496     - unsigned edid_detect_counter;
5497     - struct workqueue_struct *work_queue;
5498     - struct delayed_work edid_handler; /* work entry */
5499     -};
5500     -
5501     -static void adv7511_check_monitor_present_status(struct v4l2_subdev *sd);
5502     -static bool adv7511_check_edid_status(struct v4l2_subdev *sd);
5503     -static void adv7511_setup(struct v4l2_subdev *sd);
5504     -static int adv7511_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq);
5505     -static int adv7511_s_clock_freq(struct v4l2_subdev *sd, u32 freq);
5506     -
5507     -
5508     -static const struct v4l2_dv_timings_cap adv7511_timings_cap = {
5509     - .type = V4L2_DV_BT_656_1120,
5510     - /* keep this initialization for compatibility with GCC < 4.4.6 */
5511     - .reserved = { 0 },
5512     - V4L2_INIT_BT_TIMINGS(640, ADV7511_MAX_WIDTH, 350, ADV7511_MAX_HEIGHT,
5513     - ADV7511_MIN_PIXELCLOCK, ADV7511_MAX_PIXELCLOCK,
5514     - V4L2_DV_BT_STD_CEA861 | V4L2_DV_BT_STD_DMT |
5515     - V4L2_DV_BT_STD_GTF | V4L2_DV_BT_STD_CVT,
5516     - V4L2_DV_BT_CAP_PROGRESSIVE | V4L2_DV_BT_CAP_REDUCED_BLANKING |
5517     - V4L2_DV_BT_CAP_CUSTOM)
5518     -};
5519     -
5520     -static inline struct adv7511_state *get_adv7511_state(struct v4l2_subdev *sd)
5521     -{
5522     - return container_of(sd, struct adv7511_state, sd);
5523     -}
5524     -
5525     -static inline struct v4l2_subdev *to_sd(struct v4l2_ctrl *ctrl)
5526     -{
5527     - return &container_of(ctrl->handler, struct adv7511_state, hdl)->sd;
5528     -}
5529     -
5530     -/* ------------------------ I2C ----------------------------------------------- */
5531     -
5532     -static s32 adv_smbus_read_byte_data_check(struct i2c_client *client,
5533     - u8 command, bool check)
5534     -{
5535     - union i2c_smbus_data data;
5536     -
5537     - if (!i2c_smbus_xfer(client->adapter, client->addr, client->flags,
5538     - I2C_SMBUS_READ, command,
5539     - I2C_SMBUS_BYTE_DATA, &data))
5540     - return data.byte;
5541     - if (check)
5542     - v4l_err(client, "error reading %02x, %02x\n",
5543     - client->addr, command);
5544     - return -1;
5545     -}
5546     -
5547     -static s32 adv_smbus_read_byte_data(struct i2c_client *client, u8 command)
5548     -{
5549     - int i;
5550     - for (i = 0; i < 3; i++) {
5551     - int ret = adv_smbus_read_byte_data_check(client, command, true);
5552     - if (ret >= 0) {
5553     - if (i)
5554     - v4l_err(client, "read ok after %d retries\n", i);
5555     - return ret;
5556     - }
5557     - }
5558     - v4l_err(client, "read failed\n");
5559     - return -1;
5560     -}
5561     -
5562     -static int adv7511_rd(struct v4l2_subdev *sd, u8 reg)
5563     -{
5564     - struct i2c_client *client = v4l2_get_subdevdata(sd);
5565     -
5566     - return adv_smbus_read_byte_data(client, reg);
5567     -}
5568     -
5569     -static int adv7511_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
5570     -{
5571     - struct i2c_client *client = v4l2_get_subdevdata(sd);
5572     - int ret;
5573     - int i;
5574     -
5575     - for (i = 0; i < 3; i++) {
5576     - ret = i2c_smbus_write_byte_data(client, reg, val);
5577     - if (ret == 0)
5578     - return 0;
5579     - }
5580     - v4l2_err(sd, "%s: i2c write error\n", __func__);
5581     - return ret;
5582     -}
5583     -
5584     -/* To set specific bits in the register, a clear-mask is given (to be AND-ed),
5585     - and then the value-mask (to be OR-ed). */
5586     -static inline void adv7511_wr_and_or(struct v4l2_subdev *sd, u8 reg, u8 clr_mask, u8 val_mask)
5587     -{
5588     - adv7511_wr(sd, reg, (adv7511_rd(sd, reg) & clr_mask) | val_mask);
5589     -}
5590     -
5591     -static int adv_smbus_read_i2c_block_data(struct i2c_client *client,
5592     - u8 command, unsigned length, u8 *values)
5593     -{
5594     - union i2c_smbus_data data;
5595     - int ret;
5596     -
5597     - if (length > I2C_SMBUS_BLOCK_MAX)
5598     - length = I2C_SMBUS_BLOCK_MAX;
5599     - data.block[0] = length;
5600     -
5601     - ret = i2c_smbus_xfer(client->adapter, client->addr, client->flags,
5602     - I2C_SMBUS_READ, command,
5603     - I2C_SMBUS_I2C_BLOCK_DATA, &data);
5604     - memcpy(values, data.block + 1, length);
5605     - return ret;
5606     -}
5607     -
5608     -static void adv7511_edid_rd(struct v4l2_subdev *sd, uint16_t len, uint8_t *buf)
5609     -{
5610     - struct adv7511_state *state = get_adv7511_state(sd);
5611     - int i;
5612     - int err = 0;
5613     -
5614     - v4l2_dbg(1, debug, sd, "%s:\n", __func__);
5615     -
5616     - for (i = 0; !err && i < len; i += I2C_SMBUS_BLOCK_MAX)
5617     - err = adv_smbus_read_i2c_block_data(state->i2c_edid, i,
5618     - I2C_SMBUS_BLOCK_MAX, buf + i);
5619     - if (err)
5620     - v4l2_err(sd, "%s: i2c read error\n", __func__);
5621     -}
5622     -
5623     -static inline int adv7511_cec_read(struct v4l2_subdev *sd, u8 reg)
5624     -{
5625     - struct adv7511_state *state = get_adv7511_state(sd);
5626     -
5627     - return i2c_smbus_read_byte_data(state->i2c_cec, reg);
5628     -}
5629     -
5630     -static int adv7511_cec_write(struct v4l2_subdev *sd, u8 reg, u8 val)
5631     -{
5632     - struct adv7511_state *state = get_adv7511_state(sd);
5633     - int ret;
5634     - int i;
5635     -
5636     - for (i = 0; i < 3; i++) {
5637     - ret = i2c_smbus_write_byte_data(state->i2c_cec, reg, val);
5638     - if (ret == 0)
5639     - return 0;
5640     - }
5641     - v4l2_err(sd, "%s: I2C Write Problem\n", __func__);
5642     - return ret;
5643     -}
5644     -
5645     -static inline int adv7511_cec_write_and_or(struct v4l2_subdev *sd, u8 reg, u8 mask,
5646     - u8 val)
5647     -{
5648     - return adv7511_cec_write(sd, reg, (adv7511_cec_read(sd, reg) & mask) | val);
5649     -}
5650     -
5651     -static int adv7511_pktmem_rd(struct v4l2_subdev *sd, u8 reg)
5652     -{
5653     - struct adv7511_state *state = get_adv7511_state(sd);
5654     -
5655     - return adv_smbus_read_byte_data(state->i2c_pktmem, reg);
5656     -}
5657     -
5658     -static int adv7511_pktmem_wr(struct v4l2_subdev *sd, u8 reg, u8 val)
5659     -{
5660     - struct adv7511_state *state = get_adv7511_state(sd);
5661     - int ret;
5662     - int i;
5663     -
5664     - for (i = 0; i < 3; i++) {
5665     - ret = i2c_smbus_write_byte_data(state->i2c_pktmem, reg, val);
5666     - if (ret == 0)
5667     - return 0;
5668     - }
5669     - v4l2_err(sd, "%s: i2c write error\n", __func__);
5670     - return ret;
5671     -}
5672     -
5673     -/* To set specific bits in the register, a clear-mask is given (to be AND-ed),
5674     - and then the value-mask (to be OR-ed). */
5675     -static inline void adv7511_pktmem_wr_and_or(struct v4l2_subdev *sd, u8 reg, u8 clr_mask, u8 val_mask)
5676     -{
5677     - adv7511_pktmem_wr(sd, reg, (adv7511_pktmem_rd(sd, reg) & clr_mask) | val_mask);
5678     -}
5679     -
5680     -static inline bool adv7511_have_hotplug(struct v4l2_subdev *sd)
5681     -{
5682     - return adv7511_rd(sd, 0x42) & MASK_ADV7511_HPD_DETECT;
5683     -}
5684     -
5685     -static inline bool adv7511_have_rx_sense(struct v4l2_subdev *sd)
5686     -{
5687     - return adv7511_rd(sd, 0x42) & MASK_ADV7511_MSEN_DETECT;
5688     -}
5689     -
5690     -static void adv7511_csc_conversion_mode(struct v4l2_subdev *sd, u8 mode)
5691     -{
5692     - adv7511_wr_and_or(sd, 0x18, 0x9f, (mode & 0x3)<<5);
5693     -}
5694     -
5695     -static void adv7511_csc_coeff(struct v4l2_subdev *sd,
5696     - u16 A1, u16 A2, u16 A3, u16 A4,
5697     - u16 B1, u16 B2, u16 B3, u16 B4,
5698     - u16 C1, u16 C2, u16 C3, u16 C4)
5699     -{
5700     - /* A */
5701     - adv7511_wr_and_or(sd, 0x18, 0xe0, A1>>8);
5702     - adv7511_wr(sd, 0x19, A1);
5703     - adv7511_wr_and_or(sd, 0x1A, 0xe0, A2>>8);
5704     - adv7511_wr(sd, 0x1B, A2);
5705     - adv7511_wr_and_or(sd, 0x1c, 0xe0, A3>>8);
5706     - adv7511_wr(sd, 0x1d, A3);
5707     - adv7511_wr_and_or(sd, 0x1e, 0xe0, A4>>8);
5708     - adv7511_wr(sd, 0x1f, A4);
5709     -
5710     - /* B */
5711     - adv7511_wr_and_or(sd, 0x20, 0xe0, B1>>8);
5712     - adv7511_wr(sd, 0x21, B1);
5713     - adv7511_wr_and_or(sd, 0x22, 0xe0, B2>>8);
5714     - adv7511_wr(sd, 0x23, B2);
5715     - adv7511_wr_and_or(sd, 0x24, 0xe0, B3>>8);
5716     - adv7511_wr(sd, 0x25, B3);
5717     - adv7511_wr_and_or(sd, 0x26, 0xe0, B4>>8);
5718     - adv7511_wr(sd, 0x27, B4);
5719     -
5720     - /* C */
5721     - adv7511_wr_and_or(sd, 0x28, 0xe0, C1>>8);
5722     - adv7511_wr(sd, 0x29, C1);
5723     - adv7511_wr_and_or(sd, 0x2A, 0xe0, C2>>8);
5724     - adv7511_wr(sd, 0x2B, C2);
5725     - adv7511_wr_and_or(sd, 0x2C, 0xe0, C3>>8);
5726     - adv7511_wr(sd, 0x2D, C3);
5727     - adv7511_wr_and_or(sd, 0x2E, 0xe0, C4>>8);
5728     - adv7511_wr(sd, 0x2F, C4);
5729     -}
5730     -
5731     -static void adv7511_csc_rgb_full2limit(struct v4l2_subdev *sd, bool enable)
5732     -{
5733     - if (enable) {
5734     - u8 csc_mode = 0;
5735     - adv7511_csc_conversion_mode(sd, csc_mode);
5736     - adv7511_csc_coeff(sd,
5737     - 4096-564, 0, 0, 256,
5738     - 0, 4096-564, 0, 256,
5739     - 0, 0, 4096-564, 256);
5740     - /* enable CSC */
5741     - adv7511_wr_and_or(sd, 0x18, 0x7f, 0x80);
5742     - /* AVI infoframe: Limited range RGB (16-235) */
5743     - adv7511_wr_and_or(sd, 0x57, 0xf3, 0x04);
5744     - } else {
5745     - /* disable CSC */
5746     - adv7511_wr_and_or(sd, 0x18, 0x7f, 0x0);
5747     - /* AVI infoframe: Full range RGB (0-255) */
5748     - adv7511_wr_and_or(sd, 0x57, 0xf3, 0x08);
5749     - }
5750     -}
5751     -
5752     -static void adv7511_set_rgb_quantization_mode(struct v4l2_subdev *sd, struct v4l2_ctrl *ctrl)
5753     -{
5754     - struct adv7511_state *state = get_adv7511_state(sd);
5755     -
5756     - /* Only makes sense for RGB formats */
5757     - if (state->fmt_code != MEDIA_BUS_FMT_RGB888_1X24) {
5758     - /* so just keep quantization */
5759     - adv7511_csc_rgb_full2limit(sd, false);
5760     - return;
5761     - }
5762     -
5763     - switch (ctrl->val) {
5764     - case V4L2_DV_RGB_RANGE_AUTO:
5765     - /* automatic */
5766     - if (state->dv_timings.bt.flags & V4L2_DV_FL_IS_CE_VIDEO) {
5767     - /* CE format, RGB limited range (16-235) */
5768     - adv7511_csc_rgb_full2limit(sd, true);
5769     - } else {
5770     - /* not CE format, RGB full range (0-255) */
5771     - adv7511_csc_rgb_full2limit(sd, false);
5772     - }
5773     - break;
5774     - case V4L2_DV_RGB_RANGE_LIMITED:
5775     - /* RGB limited range (16-235) */
5776     - adv7511_csc_rgb_full2limit(sd, true);
5777     - break;
5778     - case V4L2_DV_RGB_RANGE_FULL:
5779     - /* RGB full range (0-255) */
5780     - adv7511_csc_rgb_full2limit(sd, false);
5781     - break;
5782     - }
5783     -}
5784     -
5785     -/* ------------------------------ CTRL OPS ------------------------------ */
5786     -
5787     -static int adv7511_s_ctrl(struct v4l2_ctrl *ctrl)
5788     -{
5789     - struct v4l2_subdev *sd = to_sd(ctrl);
5790     - struct adv7511_state *state = get_adv7511_state(sd);
5791     -
5792     - v4l2_dbg(1, debug, sd, "%s: ctrl id: %d, ctrl->val %d\n", __func__, ctrl->id, ctrl->val);
5793     -
5794     - if (state->hdmi_mode_ctrl == ctrl) {
5795     - /* Set HDMI or DVI-D */
5796     - adv7511_wr_and_or(sd, 0xaf, 0xfd, ctrl->val == V4L2_DV_TX_MODE_HDMI ? 0x02 : 0x00);
5797     - return 0;
5798     - }
5799     - if (state->rgb_quantization_range_ctrl == ctrl) {
5800     - adv7511_set_rgb_quantization_mode(sd, ctrl);
5801     - return 0;
5802     - }
5803     - if (state->content_type_ctrl == ctrl) {
5804     - u8 itc, cn;
5805     -
5806     - state->content_type = ctrl->val;
5807     - itc = state->content_type != V4L2_DV_IT_CONTENT_TYPE_NO_ITC;
5808     - cn = itc ? state->content_type : V4L2_DV_IT_CONTENT_TYPE_GRAPHICS;
5809     - adv7511_wr_and_or(sd, 0x57, 0x7f, itc << 7);
5810     - adv7511_wr_and_or(sd, 0x59, 0xcf, cn << 4);
5811     - return 0;
5812     - }
5813     -
5814     - return -EINVAL;
5815     -}
5816     -
5817     -static const struct v4l2_ctrl_ops adv7511_ctrl_ops = {
5818     - .s_ctrl = adv7511_s_ctrl,
5819     -};
5820     -
5821     -/* ---------------------------- CORE OPS ------------------------------------------- */
5822     -
5823     -#ifdef CONFIG_VIDEO_ADV_DEBUG
5824     -static void adv7511_inv_register(struct v4l2_subdev *sd)
5825     -{
5826     - struct adv7511_state *state = get_adv7511_state(sd);
5827     -
5828     - v4l2_info(sd, "0x000-0x0ff: Main Map\n");
5829     - if (state->i2c_cec)
5830     - v4l2_info(sd, "0x100-0x1ff: CEC Map\n");
5831     -}
5832     -
5833     -static int adv7511_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
5834     -{
5835     - struct adv7511_state *state = get_adv7511_state(sd);
5836     -
5837     - reg->size = 1;
5838     - switch (reg->reg >> 8) {
5839     - case 0:
5840     - reg->val = adv7511_rd(sd, reg->reg & 0xff);
5841     - break;
5842     - case 1:
5843     - if (state->i2c_cec) {
5844     - reg->val = adv7511_cec_read(sd, reg->reg & 0xff);
5845     - break;
5846     - }
5847     - /* fall through */
5848     - default:
5849     - v4l2_info(sd, "Register %03llx not supported\n", reg->reg);
5850     - adv7511_inv_register(sd);
5851     - break;
5852     - }
5853     - return 0;
5854     -}
5855     -
5856     -static int adv7511_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg)
5857     -{
5858     - struct adv7511_state *state = get_adv7511_state(sd);
5859     -
5860     - switch (reg->reg >> 8) {
5861     - case 0:
5862     - adv7511_wr(sd, reg->reg & 0xff, reg->val & 0xff);
5863     - break;
5864     - case 1:
5865     - if (state->i2c_cec) {
5866     - adv7511_cec_write(sd, reg->reg & 0xff, reg->val & 0xff);
5867     - break;
5868     - }
5869     - /* fall through */
5870     - default:
5871     - v4l2_info(sd, "Register %03llx not supported\n", reg->reg);
5872     - adv7511_inv_register(sd);
5873     - break;
5874     - }
5875     - return 0;
5876     -}
5877     -#endif
5878     -
5879     -struct adv7511_cfg_read_infoframe {
5880     - const char *desc;
5881     - u8 present_reg;
5882     - u8 present_mask;
5883     - u8 header[3];
5884     - u16 payload_addr;
5885     -};
5886     -
5887     -static u8 hdmi_infoframe_checksum(u8 *ptr, size_t size)
5888     -{
5889     - u8 csum = 0;
5890     - size_t i;
5891     -
5892     - /* compute checksum */
5893     - for (i = 0; i < size; i++)
5894     - csum += ptr[i];
5895     -
5896     - return 256 - csum;
5897     -}
5898     -
5899     -static void log_infoframe(struct v4l2_subdev *sd, const struct adv7511_cfg_read_infoframe *cri)
5900     -{
5901     - struct i2c_client *client = v4l2_get_subdevdata(sd);
5902     - struct device *dev = &client->dev;
5903     - union hdmi_infoframe frame;
5904     - u8 buffer[32];
5905     - u8 len;
5906     - int i;
5907     -
5908     - if (!(adv7511_rd(sd, cri->present_reg) & cri->present_mask)) {
5909     - v4l2_info(sd, "%s infoframe not transmitted\n", cri->desc);
5910     - return;
5911     - }
5912     -
5913     - memcpy(buffer, cri->header, sizeof(cri->header));
5914     -
5915     - len = buffer[2];
5916     -
5917     - if (len + 4 > sizeof(buffer)) {
5918     - v4l2_err(sd, "%s: invalid %s infoframe length %d\n", __func__, cri->desc, len);
5919     - return;
5920     - }
5921     -
5922     - if (cri->payload_addr >= 0x100) {
5923     - for (i = 0; i < len; i++)
5924     - buffer[i + 4] = adv7511_pktmem_rd(sd, cri->payload_addr + i - 0x100);
5925     - } else {
5926     - for (i = 0; i < len; i++)
5927     - buffer[i + 4] = adv7511_rd(sd, cri->payload_addr + i);
5928     - }
5929     - buffer[3] = 0;
5930     - buffer[3] = hdmi_infoframe_checksum(buffer, len + 4);
5931     -
5932     - if (hdmi_infoframe_unpack(&frame, buffer) < 0) {
5933     - v4l2_err(sd, "%s: unpack of %s infoframe failed\n", __func__, cri->desc);
5934     - return;
5935     - }
5936     -
5937     - hdmi_infoframe_log(KERN_INFO, dev, &frame);
5938     -}
5939     -
5940     -static void adv7511_log_infoframes(struct v4l2_subdev *sd)
5941     -{
5942     - static const struct adv7511_cfg_read_infoframe cri[] = {
5943     - { "AVI", 0x44, 0x10, { 0x82, 2, 13 }, 0x55 },
5944     - { "Audio", 0x44, 0x08, { 0x84, 1, 10 }, 0x73 },
5945     - { "SDP", 0x40, 0x40, { 0x83, 1, 25 }, 0x103 },
5946     - };
5947     - int i;
5948     -
5949     - for (i = 0; i < ARRAY_SIZE(cri); i++)
5950     - log_infoframe(sd, &cri[i]);
5951     -}
5952     -
5953     -static int adv7511_log_status(struct v4l2_subdev *sd)
5954     -{
5955     - struct adv7511_state *state = get_adv7511_state(sd);
5956     - struct adv7511_state_edid *edid = &state->edid;
5957     - int i;
5958     -
5959     - static const char * const states[] = {
5960     - "in reset",
5961     - "reading EDID",
5962     - "idle",
5963     - "initializing HDCP",
5964     - "HDCP enabled",
5965     - "initializing HDCP repeater",
5966     - "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"
5967     - };
5968     - static const char * const errors[] = {
5969     - "no error",
5970     - "bad receiver BKSV",
5971     - "Ri mismatch",
5972     - "Pj mismatch",
5973     - "i2c error",
5974     - "timed out",
5975     - "max repeater cascade exceeded",
5976     - "hash check failed",
5977     - "too many devices",
5978     - "9", "A", "B", "C", "D", "E", "F"
5979     - };
5980     -
5981     - v4l2_info(sd, "power %s\n", state->power_on ? "on" : "off");
5982     - v4l2_info(sd, "%s hotplug, %s Rx Sense, %s EDID (%d block(s))\n",
5983     - (adv7511_rd(sd, 0x42) & MASK_ADV7511_HPD_DETECT) ? "detected" : "no",
5984     - (adv7511_rd(sd, 0x42) & MASK_ADV7511_MSEN_DETECT) ? "detected" : "no",
5985     - edid->segments ? "found" : "no",
5986     - edid->blocks);
5987     - v4l2_info(sd, "%s output %s\n",
5988     - (adv7511_rd(sd, 0xaf) & 0x02) ?
5989     - "HDMI" : "DVI-D",
5990     - (adv7511_rd(sd, 0xa1) & 0x3c) ?
5991     - "disabled" : "enabled");
5992     - v4l2_info(sd, "state: %s, error: %s, detect count: %u, msk/irq: %02x/%02x\n",
5993     - states[adv7511_rd(sd, 0xc8) & 0xf],
5994     - errors[adv7511_rd(sd, 0xc8) >> 4], state->edid_detect_counter,
5995     - adv7511_rd(sd, 0x94), adv7511_rd(sd, 0x96));
5996     - v4l2_info(sd, "RGB quantization: %s range\n", adv7511_rd(sd, 0x18) & 0x80 ? "limited" : "full");
5997     - if (adv7511_rd(sd, 0xaf) & 0x02) {
5998     - /* HDMI only */
5999     - u8 manual_cts = adv7511_rd(sd, 0x0a) & 0x80;
6000     - u32 N = (adv7511_rd(sd, 0x01) & 0xf) << 16 |
6001     - adv7511_rd(sd, 0x02) << 8 |
6002     - adv7511_rd(sd, 0x03);
6003     - u8 vic_detect = adv7511_rd(sd, 0x3e) >> 2;
6004     - u8 vic_sent = adv7511_rd(sd, 0x3d) & 0x3f;
6005     - u32 CTS;
6006     -
6007     - if (manual_cts)
6008     - CTS = (adv7511_rd(sd, 0x07) & 0xf) << 16 |
6009     - adv7511_rd(sd, 0x08) << 8 |
6010     - adv7511_rd(sd, 0x09);
6011     - else
6012     - CTS = (adv7511_rd(sd, 0x04) & 0xf) << 16 |
6013     - adv7511_rd(sd, 0x05) << 8 |
6014     - adv7511_rd(sd, 0x06);
6015     - v4l2_info(sd, "CTS %s mode: N %d, CTS %d\n",
6016     - manual_cts ? "manual" : "automatic", N, CTS);
6017     - v4l2_info(sd, "VIC: detected %d, sent %d\n",
6018     - vic_detect, vic_sent);
6019     - adv7511_log_infoframes(sd);
6020     - }
6021     - if (state->dv_timings.type == V4L2_DV_BT_656_1120)
6022     - v4l2_print_dv_timings(sd->name, "timings: ",
6023     - &state->dv_timings, false);
6024     - else
6025     - v4l2_info(sd, "no timings set\n");
6026     - v4l2_info(sd, "i2c edid addr: 0x%x\n", state->i2c_edid_addr);
6027     -
6028     - if (state->i2c_cec == NULL)
6029     - return 0;
6030     -
6031     - v4l2_info(sd, "i2c cec addr: 0x%x\n", state->i2c_cec_addr);
6032     -
6033     - v4l2_info(sd, "CEC: %s\n", state->cec_enabled_adap ?
6034     - "enabled" : "disabled");
6035     - if (state->cec_enabled_adap) {
6036     - for (i = 0; i < ADV7511_MAX_ADDRS; i++) {
6037     - bool is_valid = state->cec_valid_addrs & (1 << i);
6038     -
6039     - if (is_valid)
6040     - v4l2_info(sd, "CEC Logical Address: 0x%x\n",
6041     - state->cec_addr[i]);
6042     - }
6043     - }
6044     - v4l2_info(sd, "i2c pktmem addr: 0x%x\n", state->i2c_pktmem_addr);
6045     - return 0;
6046     -}
6047     -
6048     -/* Power up/down adv7511 */
6049     -static int adv7511_s_power(struct v4l2_subdev *sd, int on)
6050     -{
6051     - struct adv7511_state *state = get_adv7511_state(sd);
6052     - const int retries = 20;
6053     - int i;
6054     -
6055     - v4l2_dbg(1, debug, sd, "%s: power %s\n", __func__, on ? "on" : "off");
6056     -
6057     - state->power_on = on;
6058     -
6059     - if (!on) {
6060     - /* Power down */
6061     - adv7511_wr_and_or(sd, 0x41, 0xbf, 0x40);
6062     - return true;
6063     - }
6064     -
6065     - /* Power up */
6066     - /* The adv7511 does not always come up immediately.
6067     - Retry multiple times. */
6068     - for (i = 0; i < retries; i++) {
6069     - adv7511_wr_and_or(sd, 0x41, 0xbf, 0x0);
6070     - if ((adv7511_rd(sd, 0x41) & 0x40) == 0)
6071     - break;
6072     - adv7511_wr_and_or(sd, 0x41, 0xbf, 0x40);
6073     - msleep(10);
6074     - }
6075     - if (i == retries) {
6076     - v4l2_dbg(1, debug, sd, "%s: failed to powerup the adv7511!\n", __func__);
6077     - adv7511_s_power(sd, 0);
6078     - return false;
6079     - }
6080     - if (i > 1)
6081     - v4l2_dbg(1, debug, sd, "%s: needed %d retries to powerup the adv7511\n", __func__, i);
6082     -
6083     - /* Reserved registers that must be set */
6084     - adv7511_wr(sd, 0x98, 0x03);
6085     - adv7511_wr_and_or(sd, 0x9a, 0xfe, 0x70);
6086     - adv7511_wr(sd, 0x9c, 0x30);
6087     - adv7511_wr_and_or(sd, 0x9d, 0xfc, 0x01);
6088     - adv7511_wr(sd, 0xa2, 0xa4);
6089     - adv7511_wr(sd, 0xa3, 0xa4);
6090     - adv7511_wr(sd, 0xe0, 0xd0);
6091     - adv7511_wr(sd, 0xf9, 0x00);
6092     -
6093     - adv7511_wr(sd, 0x43, state->i2c_edid_addr);
6094     - adv7511_wr(sd, 0x45, state->i2c_pktmem_addr);
6095     -
6096     - /* Set number of attempts to read the EDID */
6097     - adv7511_wr(sd, 0xc9, 0xf);
6098     - return true;
6099     -}
6100     -
6101     -#if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
6102     -static int adv7511_cec_adap_enable(struct cec_adapter *adap, bool enable)
6103     -{
6104     - struct adv7511_state *state = cec_get_drvdata(adap);
6105     - struct v4l2_subdev *sd = &state->sd;
6106     -
6107     - if (state->i2c_cec == NULL)
6108     - return -EIO;
6109     -
6110     - if (!state->cec_enabled_adap && enable) {
6111     - /* power up cec section */
6112     - adv7511_cec_write_and_or(sd, 0x4e, 0xfc, 0x01);
6113     - /* legacy mode and clear all rx buffers */
6114     - adv7511_cec_write(sd, 0x4a, 0x00);
6115     - adv7511_cec_write(sd, 0x4a, 0x07);
6116     - adv7511_cec_write_and_or(sd, 0x11, 0xfe, 0); /* initially disable tx */
6117     - /* enabled irqs: */
6118     - /* tx: ready */
6119     - /* tx: arbitration lost */
6120     - /* tx: retry timeout */
6121     - /* rx: ready 1 */
6122     - if (state->enabled_irq)
6123     - adv7511_wr_and_or(sd, 0x95, 0xc0, 0x39);
6124     - } else if (state->cec_enabled_adap && !enable) {
6125     - if (state->enabled_irq)
6126     - adv7511_wr_and_or(sd, 0x95, 0xc0, 0x00);
6127     - /* disable address mask 1-3 */
6128     - adv7511_cec_write_and_or(sd, 0x4b, 0x8f, 0x00);
6129     - /* power down cec section */
6130     - adv7511_cec_write_and_or(sd, 0x4e, 0xfc, 0x00);
6131     - state->cec_valid_addrs = 0;
6132     - }
6133     - state->cec_enabled_adap = enable;
6134     - return 0;
6135     -}
6136     -
6137     -static int adv7511_cec_adap_log_addr(struct cec_adapter *adap, u8 addr)
6138     -{
6139     - struct adv7511_state *state = cec_get_drvdata(adap);
6140     - struct v4l2_subdev *sd = &state->sd;
6141     - unsigned int i, free_idx = ADV7511_MAX_ADDRS;
6142     -
6143     - if (!state->cec_enabled_adap)
6144     - return addr == CEC_LOG_ADDR_INVALID ? 0 : -EIO;
6145     -
6146     - if (addr == CEC_LOG_ADDR_INVALID) {
6147     - adv7511_cec_write_and_or(sd, 0x4b, 0x8f, 0);
6148     - state->cec_valid_addrs = 0;
6149     - return 0;
6150     - }
6151     -
6152     - for (i = 0; i < ADV7511_MAX_ADDRS; i++) {
6153     - bool is_valid = state->cec_valid_addrs & (1 << i);
6154     -
6155     - if (free_idx == ADV7511_MAX_ADDRS && !is_valid)
6156     - free_idx = i;
6157     - if (is_valid && state->cec_addr[i] == addr)
6158     - return 0;
6159     - }
6160     - if (i == ADV7511_MAX_ADDRS) {
6161     - i = free_idx;
6162     - if (i == ADV7511_MAX_ADDRS)
6163     - return -ENXIO;
6164     - }
6165     - state->cec_addr[i] = addr;
6166     - state->cec_valid_addrs |= 1 << i;
6167     -
6168     - switch (i) {
6169     - case 0:
6170     - /* enable address mask 0 */
6171     - adv7511_cec_write_and_or(sd, 0x4b, 0xef, 0x10);
6172     - /* set address for mask 0 */
6173     - adv7511_cec_write_and_or(sd, 0x4c, 0xf0, addr);
6174     - break;
6175     - case 1:
6176     - /* enable address mask 1 */
6177     - adv7511_cec_write_and_or(sd, 0x4b, 0xdf, 0x20);
6178     - /* set address for mask 1 */
6179     - adv7511_cec_write_and_or(sd, 0x4c, 0x0f, addr << 4);
6180     - break;
6181     - case 2:
6182     - /* enable address mask 2 */
6183     - adv7511_cec_write_and_or(sd, 0x4b, 0xbf, 0x40);
6184     - /* set address for mask 1 */
6185     - adv7511_cec_write_and_or(sd, 0x4d, 0xf0, addr);
6186     - break;
6187     - }
6188     - return 0;
6189     -}
6190     -
6191     -static int adv7511_cec_adap_transmit(struct cec_adapter *adap, u8 attempts,
6192     - u32 signal_free_time, struct cec_msg *msg)
6193     -{
6194     - struct adv7511_state *state = cec_get_drvdata(adap);
6195     - struct v4l2_subdev *sd = &state->sd;
6196     - u8 len = msg->len;
6197     - unsigned int i;
6198     -
6199     - v4l2_dbg(1, debug, sd, "%s: len %d\n", __func__, len);
6200     -
6201     - if (len > 16) {
6202     - v4l2_err(sd, "%s: len exceeded 16 (%d)\n", __func__, len);
6203     - return -EINVAL;
6204     - }
6205     -
6206     - /*
6207     - * The number of retries is the number of attempts - 1, but retry
6208     - * at least once. It's not clear if a value of 0 is allowed, so
6209     - * let's do at least one retry.
6210     - */
6211     - adv7511_cec_write_and_or(sd, 0x12, ~0x70, max(1, attempts - 1) << 4);
6212     -
6213     - /* clear cec tx irq status */
6214     - adv7511_wr(sd, 0x97, 0x38);
6215     -
6216     - /* write data */
6217     - for (i = 0; i < len; i++)
6218     - adv7511_cec_write(sd, i, msg->msg[i]);
6219     -
6220     - /* set length (data + header) */
6221     - adv7511_cec_write(sd, 0x10, len);
6222     - /* start transmit, enable tx */
6223     - adv7511_cec_write(sd, 0x11, 0x01);
6224     - return 0;
6225     -}
6226     -
6227     -static void adv_cec_tx_raw_status(struct v4l2_subdev *sd, u8 tx_raw_status)
6228     -{
6229     - struct adv7511_state *state = get_adv7511_state(sd);
6230     -
6231     - if ((adv7511_cec_read(sd, 0x11) & 0x01) == 0) {
6232     - v4l2_dbg(1, debug, sd, "%s: tx raw: tx disabled\n", __func__);
6233     - return;
6234     - }
6235     -
6236     - if (tx_raw_status & 0x10) {
6237     - v4l2_dbg(1, debug, sd,
6238     - "%s: tx raw: arbitration lost\n", __func__);
6239     - cec_transmit_done(state->cec_adap, CEC_TX_STATUS_ARB_LOST,
6240     - 1, 0, 0, 0);
6241     - return;
6242     - }
6243     - if (tx_raw_status & 0x08) {
6244     - u8 status;
6245     - u8 nack_cnt;
6246     - u8 low_drive_cnt;
6247     -
6248     - v4l2_dbg(1, debug, sd, "%s: tx raw: retry failed\n", __func__);
6249     - /*
6250     - * We set this status bit since this hardware performs
6251     - * retransmissions.
6252     - */
6253     - status = CEC_TX_STATUS_MAX_RETRIES;
6254     - nack_cnt = adv7511_cec_read(sd, 0x14) & 0xf;
6255     - if (nack_cnt)
6256     - status |= CEC_TX_STATUS_NACK;
6257     - low_drive_cnt = adv7511_cec_read(sd, 0x14) >> 4;
6258     - if (low_drive_cnt)
6259     - status |= CEC_TX_STATUS_LOW_DRIVE;
6260     - cec_transmit_done(state->cec_adap, status,
6261     - 0, nack_cnt, low_drive_cnt, 0);
6262     - return;
6263     - }
6264     - if (tx_raw_status & 0x20) {
6265     - v4l2_dbg(1, debug, sd, "%s: tx raw: ready ok\n", __func__);
6266     - cec_transmit_done(state->cec_adap, CEC_TX_STATUS_OK, 0, 0, 0, 0);
6267     - return;
6268     - }
6269     -}
6270     -
6271     -static const struct cec_adap_ops adv7511_cec_adap_ops = {
6272     - .adap_enable = adv7511_cec_adap_enable,
6273     - .adap_log_addr = adv7511_cec_adap_log_addr,
6274     - .adap_transmit = adv7511_cec_adap_transmit,
6275     -};
6276     -#endif
6277     -
6278     -/* Enable interrupts */
6279     -static void adv7511_set_isr(struct v4l2_subdev *sd, bool enable)
6280     -{
6281     - struct adv7511_state *state = get_adv7511_state(sd);
6282     - u8 irqs = MASK_ADV7511_HPD_INT | MASK_ADV7511_MSEN_INT;
6283     - u8 irqs_rd;
6284     - int retries = 100;
6285     -
6286     - v4l2_dbg(2, debug, sd, "%s: %s\n", __func__, enable ? "enable" : "disable");
6287     -
6288     - if (state->enabled_irq == enable)
6289     - return;
6290     - state->enabled_irq = enable;
6291     -
6292     - /* The datasheet says that the EDID ready interrupt should be
6293     - disabled if there is no hotplug. */
6294     - if (!enable)
6295     - irqs = 0;
6296     - else if (adv7511_have_hotplug(sd))
6297     - irqs |= MASK_ADV7511_EDID_RDY_INT;
6298     -
6299     - /*
6300     - * This i2c write can fail (approx. 1 in 1000 writes). But it
6301     - * is essential that this register is correct, so retry it
6302     - * multiple times.
6303     - *
6304     - * Note that the i2c write does not report an error, but the readback
6305     - * clearly shows the wrong value.
6306     - */
6307     - do {
6308     - adv7511_wr(sd, 0x94, irqs);
6309     - irqs_rd = adv7511_rd(sd, 0x94);
6310     - } while (retries-- && irqs_rd != irqs);
6311     -
6312     - if (irqs_rd != irqs)
6313     - v4l2_err(sd, "Could not set interrupts: hw failure?\n");
6314     -
6315     - adv7511_wr_and_or(sd, 0x95, 0xc0,
6316     - (state->cec_enabled_adap && enable) ? 0x39 : 0x00);
6317     -}
6318     -
6319     -/* Interrupt handler */
6320     -static int adv7511_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
6321     -{
6322     - u8 irq_status;
6323     - u8 cec_irq;
6324     -
6325     - /* disable interrupts to prevent a race condition */
6326     - adv7511_set_isr(sd, false);
6327     - irq_status = adv7511_rd(sd, 0x96);
6328     - cec_irq = adv7511_rd(sd, 0x97);
6329     - /* clear detected interrupts */
6330     - adv7511_wr(sd, 0x96, irq_status);
6331     - adv7511_wr(sd, 0x97, cec_irq);
6332     -
6333     - v4l2_dbg(1, debug, sd, "%s: irq 0x%x, cec-irq 0x%x\n", __func__,
6334     - irq_status, cec_irq);
6335     -
6336     - if (irq_status & (MASK_ADV7511_HPD_INT | MASK_ADV7511_MSEN_INT))
6337     - adv7511_check_monitor_present_status(sd);
6338     - if (irq_status & MASK_ADV7511_EDID_RDY_INT)
6339     - adv7511_check_edid_status(sd);
6340     -
6341     -#if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
6342     - if (cec_irq & 0x38)
6343     - adv_cec_tx_raw_status(sd, cec_irq);
6344     -
6345     - if (cec_irq & 1) {
6346     - struct adv7511_state *state = get_adv7511_state(sd);
6347     - struct cec_msg msg;
6348     -
6349     - msg.len = adv7511_cec_read(sd, 0x25) & 0x1f;
6350     -
6351     - v4l2_dbg(1, debug, sd, "%s: cec msg len %d\n", __func__,
6352     - msg.len);
6353     -
6354     - if (msg.len > 16)
6355     - msg.len = 16;
6356     -
6357     - if (msg.len) {
6358     - u8 i;
6359     -
6360     - for (i = 0; i < msg.len; i++)
6361     - msg.msg[i] = adv7511_cec_read(sd, i + 0x15);
6362     -
6363     - adv7511_cec_write(sd, 0x4a, 0); /* toggle to re-enable rx 1 */
6364     - adv7511_cec_write(sd, 0x4a, 1);
6365     - cec_received_msg(state->cec_adap, &msg);
6366     - }
6367     - }
6368     -#endif
6369     -
6370     - /* enable interrupts */
6371     - adv7511_set_isr(sd, true);
6372     -
6373     - if (handled)
6374     - *handled = true;
6375     - return 0;
6376     -}
6377     -
6378     -static const struct v4l2_subdev_core_ops adv7511_core_ops = {
6379     - .log_status = adv7511_log_status,
6380     -#ifdef CONFIG_VIDEO_ADV_DEBUG
6381     - .g_register = adv7511_g_register,
6382     - .s_register = adv7511_s_register,
6383     -#endif
6384     - .s_power = adv7511_s_power,
6385     - .interrupt_service_routine = adv7511_isr,
6386     -};
6387     -
6388     -/* ------------------------------ VIDEO OPS ------------------------------ */
6389     -
6390     -/* Enable/disable adv7511 output */
6391     -static int adv7511_s_stream(struct v4l2_subdev *sd, int enable)
6392     -{
6393     - struct adv7511_state *state = get_adv7511_state(sd);
6394     -
6395     - v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
6396     - adv7511_wr_and_or(sd, 0xa1, ~0x3c, (enable ? 0 : 0x3c));
6397     - if (enable) {
6398     - adv7511_check_monitor_present_status(sd);
6399     - } else {
6400     - adv7511_s_power(sd, 0);
6401     - state->have_monitor = false;
6402     - }
6403     - return 0;
6404     -}
6405     -
6406     -static int adv7511_s_dv_timings(struct v4l2_subdev *sd,
6407     - struct v4l2_dv_timings *timings)
6408     -{
6409     - struct adv7511_state *state = get_adv7511_state(sd);
6410     - struct v4l2_bt_timings *bt = &timings->bt;
6411     - u32 fps;
6412     -
6413     - v4l2_dbg(1, debug, sd, "%s:\n", __func__);
6414     -
6415     - /* quick sanity check */
6416     - if (!v4l2_valid_dv_timings(timings, &adv7511_timings_cap, NULL, NULL))
6417     - return -EINVAL;
6418     -
6419     - /* Fill the optional fields .standards and .flags in struct v4l2_dv_timings
6420     - if the format is one of the CEA or DMT timings. */
6421     - v4l2_find_dv_timings_cap(timings, &adv7511_timings_cap, 0, NULL, NULL);
6422     -
6423     - /* save timings */
6424     - state->dv_timings = *timings;
6425     -
6426     - /* set h/vsync polarities */
6427     - adv7511_wr_and_or(sd, 0x17, 0x9f,
6428     - ((bt->polarities & V4L2_DV_VSYNC_POS_POL) ? 0 : 0x40) |
6429     - ((bt->polarities & V4L2_DV_HSYNC_POS_POL) ? 0 : 0x20));
6430     -
6431     - fps = (u32)bt->pixelclock / (V4L2_DV_BT_FRAME_WIDTH(bt) * V4L2_DV_BT_FRAME_HEIGHT(bt));
6432     - switch (fps) {
6433     - case 24:
6434     - adv7511_wr_and_or(sd, 0xfb, 0xf9, 1 << 1);
6435     - break;
6436     - case 25:
6437     - adv7511_wr_and_or(sd, 0xfb, 0xf9, 2 << 1);
6438     - break;
6439     - case 30:
6440     - adv7511_wr_and_or(sd, 0xfb, 0xf9, 3 << 1);
6441     - break;
6442     - default:
6443     - adv7511_wr_and_or(sd, 0xfb, 0xf9, 0);
6444     - break;
6445     - }
6446     -
6447     - /* update quantization range based on new dv_timings */
6448     - adv7511_set_rgb_quantization_mode(sd, state->rgb_quantization_range_ctrl);
6449     -
6450     - return 0;
6451     -}
6452     -
6453     -static int adv7511_g_dv_timings(struct v4l2_subdev *sd,
6454     - struct v4l2_dv_timings *timings)
6455     -{
6456     - struct adv7511_state *state = get_adv7511_state(sd);
6457     -
6458     - v4l2_dbg(1, debug, sd, "%s:\n", __func__);
6459     -
6460     - if (!timings)
6461     - return -EINVAL;
6462     -
6463     - *timings = state->dv_timings;
6464     -
6465     - return 0;
6466     -}
6467     -
6468     -static int adv7511_enum_dv_timings(struct v4l2_subdev *sd,
6469     - struct v4l2_enum_dv_timings *timings)
6470     -{
6471     - if (timings->pad != 0)
6472     - return -EINVAL;
6473     -
6474     - return v4l2_enum_dv_timings_cap(timings, &adv7511_timings_cap, NULL, NULL);
6475     -}
6476     -
6477     -static int adv7511_dv_timings_cap(struct v4l2_subdev *sd,
6478     - struct v4l2_dv_timings_cap *cap)
6479     -{
6480     - if (cap->pad != 0)
6481     - return -EINVAL;
6482     -
6483     - *cap = adv7511_timings_cap;
6484     - return 0;
6485     -}
6486     -
6487     -static const struct v4l2_subdev_video_ops adv7511_video_ops = {
6488     - .s_stream = adv7511_s_stream,
6489     - .s_dv_timings = adv7511_s_dv_timings,
6490     - .g_dv_timings = adv7511_g_dv_timings,
6491     -};
6492     -
6493     -/* ------------------------------ AUDIO OPS ------------------------------ */
6494     -static int adv7511_s_audio_stream(struct v4l2_subdev *sd, int enable)
6495     -{
6496     - v4l2_dbg(1, debug, sd, "%s: %sable\n", __func__, (enable ? "en" : "dis"));
6497     -
6498     - if (enable)
6499     - adv7511_wr_and_or(sd, 0x4b, 0x3f, 0x80);
6500     - else
6501     - adv7511_wr_and_or(sd, 0x4b, 0x3f, 0x40);
6502     -
6503     - return 0;
6504     -}
6505     -
6506     -static int adv7511_s_clock_freq(struct v4l2_subdev *sd, u32 freq)
6507     -{
6508     - u32 N;
6509     -
6510     - switch (freq) {
6511     - case 32000: N = 4096; break;
6512     - case 44100: N = 6272; break;
6513     - case 48000: N = 6144; break;
6514     - case 88200: N = 12544; break;
6515     - case 96000: N = 12288; break;
6516     - case 176400: N = 25088; break;
6517     - case 192000: N = 24576; break;
6518     - default:
6519     - return -EINVAL;
6520     - }
6521     -
6522     - /* Set N (used with CTS to regenerate the audio clock) */
6523     - adv7511_wr(sd, 0x01, (N >> 16) & 0xf);
6524     - adv7511_wr(sd, 0x02, (N >> 8) & 0xff);
6525     - adv7511_wr(sd, 0x03, N & 0xff);
6526     -
6527     - return 0;
6528     -}
6529     -
6530     -static int adv7511_s_i2s_clock_freq(struct v4l2_subdev *sd, u32 freq)
6531     -{
6532     - u32 i2s_sf;
6533     -
6534     - switch (freq) {
6535     - case 32000: i2s_sf = 0x30; break;
6536     - case 44100: i2s_sf = 0x00; break;
6537     - case 48000: i2s_sf = 0x20; break;
6538     - case 88200: i2s_sf = 0x80; break;
6539     - case 96000: i2s_sf = 0xa0; break;
6540     - case 176400: i2s_sf = 0xc0; break;
6541     - case 192000: i2s_sf = 0xe0; break;
6542     - default:
6543     - return -EINVAL;
6544     - }
6545     -
6546     - /* Set sampling frequency for I2S audio to 48 kHz */
6547     - adv7511_wr_and_or(sd, 0x15, 0xf, i2s_sf);
6548     -
6549     - return 0;
6550     -}
6551     -
6552     -static int adv7511_s_routing(struct v4l2_subdev *sd, u32 input, u32 output, u32 config)
6553     -{
6554     - /* Only 2 channels in use for application */
6555     - adv7511_wr_and_or(sd, 0x73, 0xf8, 0x1);
6556     - /* Speaker mapping */
6557     - adv7511_wr(sd, 0x76, 0x00);
6558     -
6559     - /* 16 bit audio word length */
6560     - adv7511_wr_and_or(sd, 0x14, 0xf0, 0x02);
6561     -
6562     - return 0;
6563     -}
6564     -
6565     -static const struct v4l2_subdev_audio_ops adv7511_audio_ops = {
6566     - .s_stream = adv7511_s_audio_stream,
6567     - .s_clock_freq = adv7511_s_clock_freq,
6568     - .s_i2s_clock_freq = adv7511_s_i2s_clock_freq,
6569     - .s_routing = adv7511_s_routing,
6570     -};
6571     -
6572     -/* ---------------------------- PAD OPS ------------------------------------- */
6573     -
6574     -static int adv7511_get_edid(struct v4l2_subdev *sd, struct v4l2_edid *edid)
6575     -{
6576     - struct adv7511_state *state = get_adv7511_state(sd);
6577     -
6578     - memset(edid->reserved, 0, sizeof(edid->reserved));
6579     -
6580     - if (edid->pad != 0)
6581     - return -EINVAL;
6582     -
6583     - if (edid->start_block == 0 && edid->blocks == 0) {
6584     - edid->blocks = state->edid.segments * 2;
6585     - return 0;
6586     - }
6587     -
6588     - if (state->edid.segments == 0)
6589     - return -ENODATA;
6590     -
6591     - if (edid->start_block >= state->edid.segments * 2)
6592     - return -EINVAL;
6593     -
6594     - if (edid->start_block + edid->blocks > state->edid.segments * 2)
6595     - edid->blocks = state->edid.segments * 2 - edid->start_block;
6596     -
6597     - memcpy(edid->edid, &state->edid.data[edid->start_block * 128],
6598     - 128 * edid->blocks);
6599     -
6600     - return 0;
6601     -}
6602     -
6603     -static int adv7511_enum_mbus_code(struct v4l2_subdev *sd,
6604     - struct v4l2_subdev_pad_config *cfg,
6605     - struct v4l2_subdev_mbus_code_enum *code)
6606     -{
6607     - if (code->pad != 0)
6608     - return -EINVAL;
6609     -
6610     - switch (code->index) {
6611     - case 0:
6612     - code->code = MEDIA_BUS_FMT_RGB888_1X24;
6613     - break;
6614     - case 1:
6615     - code->code = MEDIA_BUS_FMT_YUYV8_1X16;
6616     - break;
6617     - case 2:
6618     - code->code = MEDIA_BUS_FMT_UYVY8_1X16;
6619     - break;
6620     - default:
6621     - return -EINVAL;
6622     - }
6623     - return 0;
6624     -}
6625     -
6626     -static void adv7511_fill_format(struct adv7511_state *state,
6627     - struct v4l2_mbus_framefmt *format)
6628     -{
6629     - format->width = state->dv_timings.bt.width;
6630     - format->height = state->dv_timings.bt.height;
6631     - format->field = V4L2_FIELD_NONE;
6632     -}
6633     -
6634     -static int adv7511_get_fmt(struct v4l2_subdev *sd,
6635     - struct v4l2_subdev_pad_config *cfg,
6636     - struct v4l2_subdev_format *format)
6637     -{
6638     - struct adv7511_state *state = get_adv7511_state(sd);
6639     -
6640     - if (format->pad != 0)
6641     - return -EINVAL;
6642     -
6643     - memset(&format->format, 0, sizeof(format->format));
6644     - adv7511_fill_format(state, &format->format);
6645     -
6646     - if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
6647     - struct v4l2_mbus_framefmt *fmt;
6648     -
6649     - fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
6650     - format->format.code = fmt->code;
6651     - format->format.colorspace = fmt->colorspace;
6652     - format->format.ycbcr_enc = fmt->ycbcr_enc;
6653     - format->format.quantization = fmt->quantization;
6654     - format->format.xfer_func = fmt->xfer_func;
6655     - } else {
6656     - format->format.code = state->fmt_code;
6657     - format->format.colorspace = state->colorspace;
6658     - format->format.ycbcr_enc = state->ycbcr_enc;
6659     - format->format.quantization = state->quantization;
6660     - format->format.xfer_func = state->xfer_func;
6661     - }
6662     -
6663     - return 0;
6664     -}
6665     -
6666     -static int adv7511_set_fmt(struct v4l2_subdev *sd,
6667     - struct v4l2_subdev_pad_config *cfg,
6668     - struct v4l2_subdev_format *format)
6669     -{
6670     - struct adv7511_state *state = get_adv7511_state(sd);
6671     - /*
6672     - * Bitfield namings come the CEA-861-F standard, table 8 "Auxiliary
6673     - * Video Information (AVI) InfoFrame Format"
6674     - *
6675     - * c = Colorimetry
6676     - * ec = Extended Colorimetry
6677     - * y = RGB or YCbCr
6678     - * q = RGB Quantization Range
6679     - * yq = YCC Quantization Range
6680     - */
6681     - u8 c = HDMI_COLORIMETRY_NONE;
6682     - u8 ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
6683     - u8 y = HDMI_COLORSPACE_RGB;
6684     - u8 q = HDMI_QUANTIZATION_RANGE_DEFAULT;
6685     - u8 yq = HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
6686     - u8 itc = state->content_type != V4L2_DV_IT_CONTENT_TYPE_NO_ITC;
6687     - u8 cn = itc ? state->content_type : V4L2_DV_IT_CONTENT_TYPE_GRAPHICS;
6688     -
6689     - if (format->pad != 0)
6690     - return -EINVAL;
6691     - switch (format->format.code) {
6692     - case MEDIA_BUS_FMT_UYVY8_1X16:
6693     - case MEDIA_BUS_FMT_YUYV8_1X16:
6694     - case MEDIA_BUS_FMT_RGB888_1X24:
6695     - break;
6696     - default:
6697     - return -EINVAL;
6698     - }
6699     -
6700     - adv7511_fill_format(state, &format->format);
6701     - if (format->which == V4L2_SUBDEV_FORMAT_TRY) {
6702     - struct v4l2_mbus_framefmt *fmt;
6703     -
6704     - fmt = v4l2_subdev_get_try_format(sd, cfg, format->pad);
6705     - fmt->code = format->format.code;
6706     - fmt->colorspace = format->format.colorspace;
6707     - fmt->ycbcr_enc = format->format.ycbcr_enc;
6708     - fmt->quantization = format->format.quantization;
6709     - fmt->xfer_func = format->format.xfer_func;
6710     - return 0;
6711     - }
6712     -
6713     - switch (format->format.code) {
6714     - case MEDIA_BUS_FMT_UYVY8_1X16:
6715     - adv7511_wr_and_or(sd, 0x15, 0xf0, 0x01);
6716     - adv7511_wr_and_or(sd, 0x16, 0x03, 0xb8);
6717     - y = HDMI_COLORSPACE_YUV422;
6718     - break;
6719     - case MEDIA_BUS_FMT_YUYV8_1X16:
6720     - adv7511_wr_and_or(sd, 0x15, 0xf0, 0x01);
6721     - adv7511_wr_and_or(sd, 0x16, 0x03, 0xbc);
6722     - y = HDMI_COLORSPACE_YUV422;
6723     - break;
6724     - case MEDIA_BUS_FMT_RGB888_1X24:
6725     - default:
6726     - adv7511_wr_and_or(sd, 0x15, 0xf0, 0x00);
6727     - adv7511_wr_and_or(sd, 0x16, 0x03, 0x00);
6728     - break;
6729     - }
6730     - state->fmt_code = format->format.code;
6731     - state->colorspace = format->format.colorspace;
6732     - state->ycbcr_enc = format->format.ycbcr_enc;
6733     - state->quantization = format->format.quantization;
6734     - state->xfer_func = format->format.xfer_func;
6735     -
6736     - switch (format->format.colorspace) {
6737     - case V4L2_COLORSPACE_OPRGB:
6738     - c = HDMI_COLORIMETRY_EXTENDED;
6739     - ec = y ? HDMI_EXTENDED_COLORIMETRY_OPYCC_601 :
6740     - HDMI_EXTENDED_COLORIMETRY_OPRGB;
6741     - break;
6742     - case V4L2_COLORSPACE_SMPTE170M:
6743     - c = y ? HDMI_COLORIMETRY_ITU_601 : HDMI_COLORIMETRY_NONE;
6744     - if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_XV601) {
6745     - c = HDMI_COLORIMETRY_EXTENDED;
6746     - ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
6747     - }
6748     - break;
6749     - case V4L2_COLORSPACE_REC709:
6750     - c = y ? HDMI_COLORIMETRY_ITU_709 : HDMI_COLORIMETRY_NONE;
6751     - if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_XV709) {
6752     - c = HDMI_COLORIMETRY_EXTENDED;
6753     - ec = HDMI_EXTENDED_COLORIMETRY_XV_YCC_709;
6754     - }
6755     - break;
6756     - case V4L2_COLORSPACE_SRGB:
6757     - c = y ? HDMI_COLORIMETRY_EXTENDED : HDMI_COLORIMETRY_NONE;
6758     - ec = y ? HDMI_EXTENDED_COLORIMETRY_S_YCC_601 :
6759     - HDMI_EXTENDED_COLORIMETRY_XV_YCC_601;
6760     - break;
6761     - case V4L2_COLORSPACE_BT2020:
6762     - c = HDMI_COLORIMETRY_EXTENDED;
6763     - if (y && format->format.ycbcr_enc == V4L2_YCBCR_ENC_BT2020_CONST_LUM)
6764     - ec = 5; /* Not yet available in hdmi.h */
6765     - else
6766     - ec = 6; /* Not yet available in hdmi.h */
6767     - break;
6768     - default:
6769     - break;
6770     - }
6771     -
6772     - /*
6773     - * CEA-861-F says that for RGB formats the YCC range must match the
6774     - * RGB range, although sources should ignore the YCC range.
6775     - *
6776     - * The RGB quantization range shouldn't be non-zero if the EDID doesn't
6777     - * have the Q bit set in the Video Capabilities Data Block, however this
6778     - * isn't checked at the moment. The assumption is that the application
6779     - * knows the EDID and can detect this.
6780     - *
6781     - * The same is true for the YCC quantization range: non-standard YCC
6782     - * quantization ranges should only be sent if the EDID has the YQ bit
6783     - * set in the Video Capabilities Data Block.
6784     - */
6785     - switch (format->format.quantization) {
6786     - case V4L2_QUANTIZATION_FULL_RANGE:
6787     - q = y ? HDMI_QUANTIZATION_RANGE_DEFAULT :
6788     - HDMI_QUANTIZATION_RANGE_FULL;
6789     - yq = q ? q - 1 : HDMI_YCC_QUANTIZATION_RANGE_FULL;
6790     - break;
6791     - case V4L2_QUANTIZATION_LIM_RANGE:
6792     - q = y ? HDMI_QUANTIZATION_RANGE_DEFAULT :
6793     - HDMI_QUANTIZATION_RANGE_LIMITED;
6794     - yq = q ? q - 1 : HDMI_YCC_QUANTIZATION_RANGE_LIMITED;
6795     - break;
6796     - }
6797     -
6798     - adv7511_wr_and_or(sd, 0x4a, 0xbf, 0);
6799     - adv7511_wr_and_or(sd, 0x55, 0x9f, y << 5);
6800     - adv7511_wr_and_or(sd, 0x56, 0x3f, c << 6);
6801     - adv7511_wr_and_or(sd, 0x57, 0x83, (ec << 4) | (q << 2) | (itc << 7));
6802     - adv7511_wr_and_or(sd, 0x59, 0x0f, (yq << 6) | (cn << 4));
6803     - adv7511_wr_and_or(sd, 0x4a, 0xff, 1);
6804     - adv7511_set_rgb_quantization_mode(sd, state->rgb_quantization_range_ctrl);
6805     -
6806     - return 0;
6807     -}
6808     -
6809     -static const struct v4l2_subdev_pad_ops adv7511_pad_ops = {
6810     - .get_edid = adv7511_get_edid,
6811     - .enum_mbus_code = adv7511_enum_mbus_code,
6812     - .get_fmt = adv7511_get_fmt,
6813     - .set_fmt = adv7511_set_fmt,
6814     - .enum_dv_timings = adv7511_enum_dv_timings,
6815     - .dv_timings_cap = adv7511_dv_timings_cap,
6816     -};
6817     -
6818     -/* --------------------- SUBDEV OPS --------------------------------------- */
6819     -
6820     -static const struct v4l2_subdev_ops adv7511_ops = {
6821     - .core = &adv7511_core_ops,
6822     - .pad = &adv7511_pad_ops,
6823     - .video = &adv7511_video_ops,
6824     - .audio = &adv7511_audio_ops,
6825     -};
6826     -
6827     -/* ----------------------------------------------------------------------- */
6828     -static void adv7511_dbg_dump_edid(int lvl, int debug, struct v4l2_subdev *sd, int segment, u8 *buf)
6829     -{
6830     - if (debug >= lvl) {
6831     - int i, j;
6832     - v4l2_dbg(lvl, debug, sd, "edid segment %d\n", segment);
6833     - for (i = 0; i < 256; i += 16) {
6834     - u8 b[128];
6835     - u8 *bp = b;
6836     - if (i == 128)
6837     - v4l2_dbg(lvl, debug, sd, "\n");
6838     - for (j = i; j < i + 16; j++) {
6839     - sprintf(bp, "0x%02x, ", buf[j]);
6840     - bp += 6;
6841     - }
6842     - bp[0] = '\0';
6843     - v4l2_dbg(lvl, debug, sd, "%s\n", b);
6844     - }
6845     - }
6846     -}
6847     -
6848     -static void adv7511_notify_no_edid(struct v4l2_subdev *sd)
6849     -{
6850     - struct adv7511_state *state = get_adv7511_state(sd);
6851     - struct adv7511_edid_detect ed;
6852     -
6853     - /* We failed to read the EDID, so send an event for this. */
6854     - ed.present = false;
6855     - ed.segment = adv7511_rd(sd, 0xc4);
6856     - ed.phys_addr = CEC_PHYS_ADDR_INVALID;
6857     - cec_s_phys_addr(state->cec_adap, ed.phys_addr, false);
6858     - v4l2_subdev_notify(sd, ADV7511_EDID_DETECT, (void *)&ed);
6859     - v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, 0x0);
6860     -}
6861     -
6862     -static void adv7511_edid_handler(struct work_struct *work)
6863     -{
6864     - struct delayed_work *dwork = to_delayed_work(work);
6865     - struct adv7511_state *state = container_of(dwork, struct adv7511_state, edid_handler);
6866     - struct v4l2_subdev *sd = &state->sd;
6867     -
6868     - v4l2_dbg(1, debug, sd, "%s:\n", __func__);
6869     -
6870     - if (adv7511_check_edid_status(sd)) {
6871     - /* Return if we received the EDID. */
6872     - return;
6873     - }
6874     -
6875     - if (adv7511_have_hotplug(sd)) {
6876     - /* We must retry reading the EDID several times, it is possible
6877     - * that initially the EDID couldn't be read due to i2c errors
6878     - * (DVI connectors are particularly prone to this problem). */
6879     - if (state->edid.read_retries) {
6880     - state->edid.read_retries--;
6881     - v4l2_dbg(1, debug, sd, "%s: edid read failed\n", __func__);
6882     - state->have_monitor = false;
6883     - adv7511_s_power(sd, false);
6884     - adv7511_s_power(sd, true);
6885     - queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
6886     - return;
6887     - }
6888     - }
6889     -
6890     - /* We failed to read the EDID, so send an event for this. */
6891     - adv7511_notify_no_edid(sd);
6892     - v4l2_dbg(1, debug, sd, "%s: no edid found\n", __func__);
6893     -}
6894     -
6895     -static void adv7511_audio_setup(struct v4l2_subdev *sd)
6896     -{
6897     - v4l2_dbg(1, debug, sd, "%s\n", __func__);
6898     -
6899     - adv7511_s_i2s_clock_freq(sd, 48000);
6900     - adv7511_s_clock_freq(sd, 48000);
6901     - adv7511_s_routing(sd, 0, 0, 0);
6902     -}
6903     -
6904     -/* Configure hdmi transmitter. */
6905     -static void adv7511_setup(struct v4l2_subdev *sd)
6906     -{
6907     - struct adv7511_state *state = get_adv7511_state(sd);
6908     - v4l2_dbg(1, debug, sd, "%s\n", __func__);
6909     -
6910     - /* Input format: RGB 4:4:4 */
6911     - adv7511_wr_and_or(sd, 0x15, 0xf0, 0x0);
6912     - /* Output format: RGB 4:4:4 */
6913     - adv7511_wr_and_or(sd, 0x16, 0x7f, 0x0);
6914     - /* 1st order interpolation 4:2:2 -> 4:4:4 up conversion, Aspect ratio: 16:9 */
6915     - adv7511_wr_and_or(sd, 0x17, 0xf9, 0x06);
6916     - /* Disable pixel repetition */
6917     - adv7511_wr_and_or(sd, 0x3b, 0x9f, 0x0);
6918     - /* Disable CSC */
6919     - adv7511_wr_and_or(sd, 0x18, 0x7f, 0x0);
6920     - /* Output format: RGB 4:4:4, Active Format Information is valid,
6921     - * underscanned */
6922     - adv7511_wr_and_or(sd, 0x55, 0x9c, 0x12);
6923     - /* AVI Info frame packet enable, Audio Info frame disable */
6924     - adv7511_wr_and_or(sd, 0x44, 0xe7, 0x10);
6925     - /* Colorimetry, Active format aspect ratio: same as picure. */
6926     - adv7511_wr(sd, 0x56, 0xa8);
6927     - /* No encryption */
6928     - adv7511_wr_and_or(sd, 0xaf, 0xed, 0x0);
6929     -
6930     - /* Positive clk edge capture for input video clock */
6931     - adv7511_wr_and_or(sd, 0xba, 0x1f, 0x60);
6932     -
6933     - adv7511_audio_setup(sd);
6934     -
6935     - v4l2_ctrl_handler_setup(&state->hdl);
6936     -}
6937     -
6938     -static void adv7511_notify_monitor_detect(struct v4l2_subdev *sd)
6939     -{
6940     - struct adv7511_monitor_detect mdt;
6941     - struct adv7511_state *state = get_adv7511_state(sd);
6942     -
6943     - mdt.present = state->have_monitor;
6944     - v4l2_subdev_notify(sd, ADV7511_MONITOR_DETECT, (void *)&mdt);
6945     -}
6946     -
6947     -static void adv7511_check_monitor_present_status(struct v4l2_subdev *sd)
6948     -{
6949     - struct adv7511_state *state = get_adv7511_state(sd);
6950     - /* read hotplug and rx-sense state */
6951     - u8 status = adv7511_rd(sd, 0x42);
6952     -
6953     - v4l2_dbg(1, debug, sd, "%s: status: 0x%x%s%s\n",
6954     - __func__,
6955     - status,
6956     - status & MASK_ADV7511_HPD_DETECT ? ", hotplug" : "",
6957     - status & MASK_ADV7511_MSEN_DETECT ? ", rx-sense" : "");
6958     -
6959     - /* update read only ctrls */
6960     - v4l2_ctrl_s_ctrl(state->hotplug_ctrl, adv7511_have_hotplug(sd) ? 0x1 : 0x0);
6961     - v4l2_ctrl_s_ctrl(state->rx_sense_ctrl, adv7511_have_rx_sense(sd) ? 0x1 : 0x0);
6962     -
6963     - if ((status & MASK_ADV7511_HPD_DETECT) && ((status & MASK_ADV7511_MSEN_DETECT) || state->edid.segments)) {
6964     - v4l2_dbg(1, debug, sd, "%s: hotplug and (rx-sense or edid)\n", __func__);
6965     - if (!state->have_monitor) {
6966     - v4l2_dbg(1, debug, sd, "%s: monitor detected\n", __func__);
6967     - state->have_monitor = true;
6968     - adv7511_set_isr(sd, true);
6969     - if (!adv7511_s_power(sd, true)) {
6970     - v4l2_dbg(1, debug, sd, "%s: monitor detected, powerup failed\n", __func__);
6971     - return;
6972     - }
6973     - adv7511_setup(sd);
6974     - adv7511_notify_monitor_detect(sd);
6975     - state->edid.read_retries = EDID_MAX_RETRIES;
6976     - queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
6977     - }
6978     - } else if (status & MASK_ADV7511_HPD_DETECT) {
6979     - v4l2_dbg(1, debug, sd, "%s: hotplug detected\n", __func__);
6980     - state->edid.read_retries = EDID_MAX_RETRIES;
6981     - queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
6982     - } else if (!(status & MASK_ADV7511_HPD_DETECT)) {
6983     - v4l2_dbg(1, debug, sd, "%s: hotplug not detected\n", __func__);
6984     - if (state->have_monitor) {
6985     - v4l2_dbg(1, debug, sd, "%s: monitor not detected\n", __func__);
6986     - state->have_monitor = false;
6987     - adv7511_notify_monitor_detect(sd);
6988     - }
6989     - adv7511_s_power(sd, false);
6990     - memset(&state->edid, 0, sizeof(struct adv7511_state_edid));
6991     - adv7511_notify_no_edid(sd);
6992     - }
6993     -}
6994     -
6995     -static bool edid_block_verify_crc(u8 *edid_block)
6996     -{
6997     - u8 sum = 0;
6998     - int i;
6999     -
7000     - for (i = 0; i < 128; i++)
7001     - sum += edid_block[i];
7002     - return sum == 0;
7003     -}
7004     -
7005     -static bool edid_verify_crc(struct v4l2_subdev *sd, u32 segment)
7006     -{
7007     - struct adv7511_state *state = get_adv7511_state(sd);
7008     - u32 blocks = state->edid.blocks;
7009     - u8 *data = state->edid.data;
7010     -
7011     - if (!edid_block_verify_crc(&data[segment * 256]))
7012     - return false;
7013     - if ((segment + 1) * 2 <= blocks)
7014     - return edid_block_verify_crc(&data[segment * 256 + 128]);
7015     - return true;
7016     -}
7017     -
7018     -static bool edid_verify_header(struct v4l2_subdev *sd, u32 segment)
7019     -{
7020     - static const u8 hdmi_header[] = {
7021     - 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
7022     - };
7023     - struct adv7511_state *state = get_adv7511_state(sd);
7024     - u8 *data = state->edid.data;
7025     -
7026     - if (segment != 0)
7027     - return true;
7028     - return !memcmp(data, hdmi_header, sizeof(hdmi_header));
7029     -}
7030     -
7031     -static bool adv7511_check_edid_status(struct v4l2_subdev *sd)
7032     -{
7033     - struct adv7511_state *state = get_adv7511_state(sd);
7034     - u8 edidRdy = adv7511_rd(sd, 0xc5);
7035     -
7036     - v4l2_dbg(1, debug, sd, "%s: edid ready (retries: %d)\n",
7037     - __func__, EDID_MAX_RETRIES - state->edid.read_retries);
7038     -
7039     - if (state->edid.complete)
7040     - return true;
7041     -
7042     - if (edidRdy & MASK_ADV7511_EDID_RDY) {
7043     - int segment = adv7511_rd(sd, 0xc4);
7044     - struct adv7511_edid_detect ed;
7045     -
7046     - if (segment >= EDID_MAX_SEGM) {
7047     - v4l2_err(sd, "edid segment number too big\n");
7048     - return false;
7049     - }
7050     - v4l2_dbg(1, debug, sd, "%s: got segment %d\n", __func__, segment);
7051     - adv7511_edid_rd(sd, 256, &state->edid.data[segment * 256]);
7052     - adv7511_dbg_dump_edid(2, debug, sd, segment, &state->edid.data[segment * 256]);
7053     - if (segment == 0) {
7054     - state->edid.blocks = state->edid.data[0x7e] + 1;
7055     - v4l2_dbg(1, debug, sd, "%s: %d blocks in total\n", __func__, state->edid.blocks);
7056     - }
7057     - if (!edid_verify_crc(sd, segment) ||
7058     - !edid_verify_header(sd, segment)) {
7059     - /* edid crc error, force reread of edid segment */
7060     - v4l2_err(sd, "%s: edid crc or header error\n", __func__);
7061     - state->have_monitor = false;
7062     - adv7511_s_power(sd, false);
7063     - adv7511_s_power(sd, true);
7064     - return false;
7065     - }
7066     - /* one more segment read ok */
7067     - state->edid.segments = segment + 1;
7068     - v4l2_ctrl_s_ctrl(state->have_edid0_ctrl, 0x1);
7069     - if (((state->edid.data[0x7e] >> 1) + 1) > state->edid.segments) {
7070     - /* Request next EDID segment */
7071     - v4l2_dbg(1, debug, sd, "%s: request segment %d\n", __func__, state->edid.segments);
7072     - adv7511_wr(sd, 0xc9, 0xf);
7073     - adv7511_wr(sd, 0xc4, state->edid.segments);
7074     - state->edid.read_retries = EDID_MAX_RETRIES;
7075     - queue_delayed_work(state->work_queue, &state->edid_handler, EDID_DELAY);
7076     - return false;
7077     - }
7078     -
7079     - v4l2_dbg(1, debug, sd, "%s: edid complete with %d segment(s)\n", __func__, state->edid.segments);
7080     - state->edid.complete = true;
7081     - ed.phys_addr = cec_get_edid_phys_addr(state->edid.data,
7082     - state->edid.segments * 256,
7083     - NULL);
7084     - /* report when we have all segments
7085     - but report only for segment 0
7086     - */
7087     - ed.present = true;
7088     - ed.segment = 0;
7089     - state->edid_detect_counter++;
7090     - cec_s_phys_addr(state->cec_adap, ed.phys_addr, false);
7091     - v4l2_subdev_notify(sd, ADV7511_EDID_DETECT, (void *)&ed);
7092     - return ed.present;
7093     - }
7094     -
7095     - return false;
7096     -}
7097     -
7098     -static int adv7511_registered(struct v4l2_subdev *sd)
7099     -{
7100     - struct adv7511_state *state = get_adv7511_state(sd);
7101     - struct i2c_client *client = v4l2_get_subdevdata(sd);
7102     - int err;
7103     -
7104     - err = cec_register_adapter(state->cec_adap, &client->dev);
7105     - if (err)
7106     - cec_delete_adapter(state->cec_adap);
7107     - return err;
7108     -}
7109     -
7110     -static void adv7511_unregistered(struct v4l2_subdev *sd)
7111     -{
7112     - struct adv7511_state *state = get_adv7511_state(sd);
7113     -
7114     - cec_unregister_adapter(state->cec_adap);
7115     -}
7116     -
7117     -static const struct v4l2_subdev_internal_ops adv7511_int_ops = {
7118     - .registered = adv7511_registered,
7119     - .unregistered = adv7511_unregistered,
7120     -};
7121     -
7122     -/* ----------------------------------------------------------------------- */
7123     -/* Setup ADV7511 */
7124     -static void adv7511_init_setup(struct v4l2_subdev *sd)
7125     -{
7126     - struct adv7511_state *state = get_adv7511_state(sd);
7127     - struct adv7511_state_edid *edid = &state->edid;
7128     - u32 cec_clk = state->pdata.cec_clk;
7129     - u8 ratio;
7130     -
7131     - v4l2_dbg(1, debug, sd, "%s\n", __func__);
7132     -
7133     - /* clear all interrupts */
7134     - adv7511_wr(sd, 0x96, 0xff);
7135     - adv7511_wr(sd, 0x97, 0xff);
7136     - /*
7137     - * Stop HPD from resetting a lot of registers.
7138     - * It might leave the chip in a partly un-initialized state,
7139     - * in particular with regards to hotplug bounces.
7140     - */
7141     - adv7511_wr_and_or(sd, 0xd6, 0x3f, 0xc0);
7142     - memset(edid, 0, sizeof(struct adv7511_state_edid));
7143     - state->have_monitor = false;
7144     - adv7511_set_isr(sd, false);
7145     - adv7511_s_stream(sd, false);
7146     - adv7511_s_audio_stream(sd, false);
7147     -
7148     - if (state->i2c_cec == NULL)
7149     - return;
7150     -
7151     - v4l2_dbg(1, debug, sd, "%s: cec_clk %d\n", __func__, cec_clk);
7152     -
7153     - /* cec soft reset */
7154     - adv7511_cec_write(sd, 0x50, 0x01);
7155     - adv7511_cec_write(sd, 0x50, 0x00);
7156     -
7157     - /* legacy mode */
7158     - adv7511_cec_write(sd, 0x4a, 0x00);
7159     - adv7511_cec_write(sd, 0x4a, 0x07);
7160     -
7161     - if (cec_clk % 750000 != 0)
7162     - v4l2_err(sd, "%s: cec_clk %d, not multiple of 750 Khz\n",
7163     - __func__, cec_clk);
7164     -
7165     - ratio = (cec_clk / 750000) - 1;
7166     - adv7511_cec_write(sd, 0x4e, ratio << 2);
7167     -}
7168     -
7169     -static int adv7511_probe(struct i2c_client *client, const struct i2c_device_id *id)
7170     -{
7171     - struct adv7511_state *state;
7172     - struct adv7511_platform_data *pdata = client->dev.platform_data;
7173     - struct v4l2_ctrl_handler *hdl;
7174     - struct v4l2_subdev *sd;
7175     - u8 chip_id[2];
7176     - int err = -EIO;
7177     -
7178     - /* Check if the adapter supports the needed features */
7179     - if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
7180     - return -EIO;
7181     -
7182     - state = devm_kzalloc(&client->dev, sizeof(struct adv7511_state), GFP_KERNEL);
7183     - if (!state)
7184     - return -ENOMEM;
7185     -
7186     - /* Platform data */
7187     - if (!pdata) {
7188     - v4l_err(client, "No platform data!\n");
7189     - return -ENODEV;
7190     - }
7191     - memcpy(&state->pdata, pdata, sizeof(state->pdata));
7192     - state->fmt_code = MEDIA_BUS_FMT_RGB888_1X24;
7193     - state->colorspace = V4L2_COLORSPACE_SRGB;
7194     -
7195     - sd = &state->sd;
7196     -
7197     - v4l2_dbg(1, debug, sd, "detecting adv7511 client on address 0x%x\n",
7198     - client->addr << 1);
7199     -
7200     - v4l2_i2c_subdev_init(sd, client, &adv7511_ops);
7201     - sd->internal_ops = &adv7511_int_ops;
7202     -
7203     - hdl = &state->hdl;
7204     - v4l2_ctrl_handler_init(hdl, 10);
7205     - /* add in ascending ID order */
7206     - state->hdmi_mode_ctrl = v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
7207     - V4L2_CID_DV_TX_MODE, V4L2_DV_TX_MODE_HDMI,
7208     - 0, V4L2_DV_TX_MODE_DVI_D);
7209     - state->hotplug_ctrl = v4l2_ctrl_new_std(hdl, NULL,
7210     - V4L2_CID_DV_TX_HOTPLUG, 0, 1, 0, 0);
7211     - state->rx_sense_ctrl = v4l2_ctrl_new_std(hdl, NULL,
7212     - V4L2_CID_DV_TX_RXSENSE, 0, 1, 0, 0);
7213     - state->have_edid0_ctrl = v4l2_ctrl_new_std(hdl, NULL,
7214     - V4L2_CID_DV_TX_EDID_PRESENT, 0, 1, 0, 0);
7215     - state->rgb_quantization_range_ctrl =
7216     - v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
7217     - V4L2_CID_DV_TX_RGB_RANGE, V4L2_DV_RGB_RANGE_FULL,
7218     - 0, V4L2_DV_RGB_RANGE_AUTO);
7219     - state->content_type_ctrl =
7220     - v4l2_ctrl_new_std_menu(hdl, &adv7511_ctrl_ops,
7221     - V4L2_CID_DV_TX_IT_CONTENT_TYPE, V4L2_DV_IT_CONTENT_TYPE_NO_ITC,
7222     - 0, V4L2_DV_IT_CONTENT_TYPE_NO_ITC);
7223     - sd->ctrl_handler = hdl;
7224     - if (hdl->error) {
7225     - err = hdl->error;
7226     - goto err_hdl;
7227     - }
7228     - state->pad.flags = MEDIA_PAD_FL_SINK;
7229     - sd->entity.function = MEDIA_ENT_F_DV_ENCODER;
7230     - err = media_entity_pads_init(&sd->entity, 1, &state->pad);
7231     - if (err)
7232     - goto err_hdl;
7233     -
7234     - /* EDID and CEC i2c addr */
7235     - state->i2c_edid_addr = state->pdata.i2c_edid << 1;
7236     - state->i2c_cec_addr = state->pdata.i2c_cec << 1;
7237     - state->i2c_pktmem_addr = state->pdata.i2c_pktmem << 1;
7238     -
7239     - state->chip_revision = adv7511_rd(sd, 0x0);
7240     - chip_id[0] = adv7511_rd(sd, 0xf5);
7241     - chip_id[1] = adv7511_rd(sd, 0xf6);
7242     - if (chip_id[0] != 0x75 || chip_id[1] != 0x11) {
7243     - v4l2_err(sd, "chip_id != 0x7511, read 0x%02x%02x\n", chip_id[0],
7244     - chip_id[1]);
7245     - err = -EIO;
7246     - goto err_entity;
7247     - }
7248     -
7249     - state->i2c_edid = i2c_new_dummy(client->adapter,
7250     - state->i2c_edid_addr >> 1);
7251     - if (state->i2c_edid == NULL) {
7252     - v4l2_err(sd, "failed to register edid i2c client\n");
7253     - err = -ENOMEM;
7254     - goto err_entity;
7255     - }
7256     -
7257     - adv7511_wr(sd, 0xe1, state->i2c_cec_addr);
7258     - if (state->pdata.cec_clk < 3000000 ||
7259     - state->pdata.cec_clk > 100000000) {
7260     - v4l2_err(sd, "%s: cec_clk %u outside range, disabling cec\n",
7261     - __func__, state->pdata.cec_clk);
7262     - state->pdata.cec_clk = 0;
7263     - }
7264     -
7265     - if (state->pdata.cec_clk) {
7266     - state->i2c_cec = i2c_new_dummy(client->adapter,
7267     - state->i2c_cec_addr >> 1);
7268     - if (state->i2c_cec == NULL) {
7269     - v4l2_err(sd, "failed to register cec i2c client\n");
7270     - err = -ENOMEM;
7271     - goto err_unreg_edid;
7272     - }
7273     - adv7511_wr(sd, 0xe2, 0x00); /* power up cec section */
7274     - } else {
7275     - adv7511_wr(sd, 0xe2, 0x01); /* power down cec section */
7276     - }
7277     -
7278     - state->i2c_pktmem = i2c_new_dummy(client->adapter, state->i2c_pktmem_addr >> 1);
7279     - if (state->i2c_pktmem == NULL) {
7280     - v4l2_err(sd, "failed to register pktmem i2c client\n");
7281     - err = -ENOMEM;
7282     - goto err_unreg_cec;
7283     - }
7284     -
7285     - state->work_queue = create_singlethread_workqueue(sd->name);
7286     - if (state->work_queue == NULL) {
7287     - v4l2_err(sd, "could not create workqueue\n");
7288     - err = -ENOMEM;
7289     - goto err_unreg_pktmem;
7290     - }
7291     -
7292     - INIT_DELAYED_WORK(&state->edid_handler, adv7511_edid_handler);
7293     -
7294     - adv7511_init_setup(sd);
7295     -
7296     -#if IS_ENABLED(CONFIG_VIDEO_ADV7511_CEC)
7297     - state->cec_adap = cec_allocate_adapter(&adv7511_cec_adap_ops,
7298     - state, dev_name(&client->dev), CEC_CAP_DEFAULTS,
7299     - ADV7511_MAX_ADDRS);
7300     - err = PTR_ERR_OR_ZERO(state->cec_adap);
7301     - if (err) {
7302     - destroy_workqueue(state->work_queue);
7303     - goto err_unreg_pktmem;
7304     - }
7305     -#endif
7306     -
7307     - adv7511_set_isr(sd, true);
7308     - adv7511_check_monitor_present_status(sd);
7309     -
7310     - v4l2_info(sd, "%s found @ 0x%x (%s)\n", client->name,
7311     - client->addr << 1, client->adapter->name);
7312     - return 0;
7313     -
7314     -err_unreg_pktmem:
7315     - i2c_unregister_device(state->i2c_pktmem);
7316     -err_unreg_cec:
7317     - if (state->i2c_cec)
7318     - i2c_unregister_device(state->i2c_cec);
7319     -err_unreg_edid:
7320     - i2c_unregister_device(state->i2c_edid);
7321     -err_entity:
7322     - media_entity_cleanup(&sd->entity);
7323     -err_hdl:
7324     - v4l2_ctrl_handler_free(&state->hdl);
7325     - return err;
7326     -}
7327     -
7328     -/* ----------------------------------------------------------------------- */
7329     -
7330     -static int adv7511_remove(struct i2c_client *client)
7331     -{
7332     - struct v4l2_subdev *sd = i2c_get_clientdata(client);
7333     - struct adv7511_state *state = get_adv7511_state(sd);
7334     -
7335     - state->chip_revision = -1;
7336     -
7337     - v4l2_dbg(1, debug, sd, "%s removed @ 0x%x (%s)\n", client->name,
7338     - client->addr << 1, client->adapter->name);
7339     -
7340     - adv7511_set_isr(sd, false);
7341     - adv7511_init_setup(sd);
7342     - cancel_delayed_work(&state->edid_handler);
7343     - i2c_unregister_device(state->i2c_edid);
7344     - if (state->i2c_cec)
7345     - i2c_unregister_device(state->i2c_cec);
7346     - i2c_unregister_device(state->i2c_pktmem);
7347     - destroy_workqueue(state->work_queue);
7348     - v4l2_device_unregister_subdev(sd);
7349     - media_entity_cleanup(&sd->entity);
7350     - v4l2_ctrl_handler_free(sd->ctrl_handler);
7351     - return 0;
7352     -}
7353     -
7354     -/* ----------------------------------------------------------------------- */
7355     -
7356     -static const struct i2c_device_id adv7511_id[] = {
7357     - { "adv7511", 0 },
7358     - { }
7359     -};
7360     -MODULE_DEVICE_TABLE(i2c, adv7511_id);
7361     -
7362     -static struct i2c_driver adv7511_driver = {
7363     - .driver = {
7364     - .name = "adv7511",
7365     - },
7366     - .probe = adv7511_probe,
7367     - .remove = adv7511_remove,
7368     - .id_table = adv7511_id,
7369     -};
7370     -
7371     -module_i2c_driver(adv7511_driver);
7372     diff --git a/drivers/media/i2c/ov7740.c b/drivers/media/i2c/ov7740.c
7373     index f5a1ee90a6c5..8a6a7a5929aa 100644
7374     --- a/drivers/media/i2c/ov7740.c
7375     +++ b/drivers/media/i2c/ov7740.c
7376     @@ -761,7 +761,11 @@ static int ov7740_try_fmt_internal(struct v4l2_subdev *sd,
7377    
7378     fsize++;
7379     }
7380     -
7381     + if (i >= ARRAY_SIZE(ov7740_framesizes)) {
7382     + fsize = &ov7740_framesizes[0];
7383     + fmt->width = fsize->width;
7384     + fmt->height = fsize->height;
7385     + }
7386     if (ret_frmsize != NULL)
7387     *ret_frmsize = fsize;
7388    
7389     diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c
7390     index 3bae24b15eaa..ed518b1f82e4 100644
7391     --- a/drivers/media/media-device.c
7392     +++ b/drivers/media/media-device.c
7393     @@ -487,6 +487,7 @@ static long media_device_enum_links32(struct media_device *mdev,
7394     {
7395     struct media_links_enum links;
7396     compat_uptr_t pads_ptr, links_ptr;
7397     + int ret;
7398    
7399     memset(&links, 0, sizeof(links));
7400    
7401     @@ -498,7 +499,14 @@ static long media_device_enum_links32(struct media_device *mdev,
7402     links.pads = compat_ptr(pads_ptr);
7403     links.links = compat_ptr(links_ptr);
7404    
7405     - return media_device_enum_links(mdev, &links);
7406     + ret = media_device_enum_links(mdev, &links);
7407     + if (ret)
7408     + return ret;
7409     +
7410     + if (copy_to_user(ulinks->reserved, links.reserved,
7411     + sizeof(ulinks->reserved)))
7412     + return -EFAULT;
7413     + return 0;
7414     }
7415    
7416     #define MEDIA_IOC_ENUM_LINKS32 _IOWR('|', 0x02, struct media_links_enum32)
7417     diff --git a/drivers/media/pci/saa7164/saa7164-core.c b/drivers/media/pci/saa7164/saa7164-core.c
7418     index d697e1ad929c..5102519df108 100644
7419     --- a/drivers/media/pci/saa7164/saa7164-core.c
7420     +++ b/drivers/media/pci/saa7164/saa7164-core.c
7421     @@ -1122,16 +1122,25 @@ static int saa7164_proc_show(struct seq_file *m, void *v)
7422     return 0;
7423     }
7424    
7425     +static struct proc_dir_entry *saa7164_pe;
7426     +
7427     static int saa7164_proc_create(void)
7428     {
7429     - struct proc_dir_entry *pe;
7430     -
7431     - pe = proc_create_single("saa7164", S_IRUGO, NULL, saa7164_proc_show);
7432     - if (!pe)
7433     + saa7164_pe = proc_create_single("saa7164", 0444, NULL, saa7164_proc_show);
7434     + if (!saa7164_pe)
7435     return -ENOMEM;
7436    
7437     return 0;
7438     }
7439     +
7440     +static void saa7164_proc_destroy(void)
7441     +{
7442     + if (saa7164_pe)
7443     + remove_proc_entry("saa7164", NULL);
7444     +}
7445     +#else
7446     +static int saa7164_proc_create(void) { return 0; }
7447     +static void saa7164_proc_destroy(void) {}
7448     #endif
7449    
7450     static int saa7164_thread_function(void *data)
7451     @@ -1503,19 +1512,21 @@ static struct pci_driver saa7164_pci_driver = {
7452    
7453     static int __init saa7164_init(void)
7454     {
7455     - printk(KERN_INFO "saa7164 driver loaded\n");
7456     + int ret = pci_register_driver(&saa7164_pci_driver);
7457     +
7458     + if (ret)
7459     + return ret;
7460    
7461     -#ifdef CONFIG_PROC_FS
7462     saa7164_proc_create();
7463     -#endif
7464     - return pci_register_driver(&saa7164_pci_driver);
7465     +
7466     + pr_info("saa7164 driver loaded\n");
7467     +
7468     + return 0;
7469     }
7470    
7471     static void __exit saa7164_fini(void)
7472     {
7473     -#ifdef CONFIG_PROC_FS
7474     - remove_proc_entry("saa7164", NULL);
7475     -#endif
7476     + saa7164_proc_destroy();
7477     pci_unregister_driver(&saa7164_pci_driver);
7478     }
7479    
7480     diff --git a/drivers/media/platform/coda/coda-bit.c b/drivers/media/platform/coda/coda-bit.c
7481     index a3cfefdbee12..c3eaddced721 100644
7482     --- a/drivers/media/platform/coda/coda-bit.c
7483     +++ b/drivers/media/platform/coda/coda-bit.c
7484     @@ -1728,6 +1728,7 @@ static int __coda_start_decoding(struct coda_ctx *ctx)
7485     v4l2_err(&dev->v4l2_dev, "CODA_COMMAND_SEQ_INIT timeout\n");
7486     return ret;
7487     }
7488     + ctx->sequence_offset = ~0U;
7489     ctx->initialized = 1;
7490    
7491     /* Update kfifo out pointer from coda bitstream read pointer */
7492     @@ -2142,12 +2143,17 @@ static void coda_finish_decode(struct coda_ctx *ctx)
7493     else if (ctx->display_idx < 0)
7494     ctx->hold = true;
7495     } else if (decoded_idx == -2) {
7496     + if (ctx->display_idx >= 0 &&
7497     + ctx->display_idx < ctx->num_internal_frames)
7498     + ctx->sequence_offset++;
7499     /* no frame was decoded, we still return remaining buffers */
7500     } else if (decoded_idx < 0 || decoded_idx >= ctx->num_internal_frames) {
7501     v4l2_err(&dev->v4l2_dev,
7502     "decoded frame index out of range: %d\n", decoded_idx);
7503     } else {
7504     - val = coda_read(dev, CODA_RET_DEC_PIC_FRAME_NUM) - 1;
7505     + val = coda_read(dev, CODA_RET_DEC_PIC_FRAME_NUM);
7506     + if (ctx->sequence_offset == -1)
7507     + ctx->sequence_offset = val;
7508     val -= ctx->sequence_offset;
7509     spin_lock_irqsave(&ctx->buffer_meta_lock, flags);
7510     if (!list_empty(&ctx->buffer_meta_list)) {
7511     @@ -2303,7 +2309,6 @@ irqreturn_t coda_irq_handler(int irq, void *data)
7512     if (ctx == NULL) {
7513     v4l2_err(&dev->v4l2_dev,
7514     "Instance released before the end of transaction\n");
7515     - mutex_unlock(&dev->coda_mutex);
7516     return IRQ_HANDLED;
7517     }
7518    
7519     diff --git a/drivers/media/platform/coda/coda-common.c b/drivers/media/platform/coda/coda-common.c
7520     index 19d92edcc981..4b0220f40b42 100644
7521     --- a/drivers/media/platform/coda/coda-common.c
7522     +++ b/drivers/media/platform/coda/coda-common.c
7523     @@ -997,6 +997,8 @@ static int coda_encoder_cmd(struct file *file, void *fh,
7524     /* Set the stream-end flag on this context */
7525     ctx->bit_stream_param |= CODA_BIT_STREAM_END_FLAG;
7526    
7527     + flush_work(&ctx->pic_run_work);
7528     +
7529     /* If there is no buffer in flight, wake up */
7530     if (!ctx->streamon_out || ctx->qsequence == ctx->osequence) {
7531     dst_vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx,
7532     diff --git a/drivers/media/platform/davinci/vpss.c b/drivers/media/platform/davinci/vpss.c
7533     index 19cf6853411e..89a86c19579b 100644
7534     --- a/drivers/media/platform/davinci/vpss.c
7535     +++ b/drivers/media/platform/davinci/vpss.c
7536     @@ -518,6 +518,11 @@ static int __init vpss_init(void)
7537     return -EBUSY;
7538    
7539     oper_cfg.vpss_regs_base2 = ioremap(VPSS_CLK_CTRL, 4);
7540     + if (unlikely(!oper_cfg.vpss_regs_base2)) {
7541     + release_mem_region(VPSS_CLK_CTRL, 4);
7542     + return -ENOMEM;
7543     + }
7544     +
7545     writel(VPSS_CLK_CTRL_VENCCLKEN |
7546     VPSS_CLK_CTRL_DACCLKEN, oper_cfg.vpss_regs_base2);
7547    
7548     diff --git a/drivers/media/platform/marvell-ccic/mcam-core.c b/drivers/media/platform/marvell-ccic/mcam-core.c
7549     index dfdbd4354b74..eeee15ff007d 100644
7550     --- a/drivers/media/platform/marvell-ccic/mcam-core.c
7551     +++ b/drivers/media/platform/marvell-ccic/mcam-core.c
7552     @@ -200,7 +200,6 @@ struct mcam_vb_buffer {
7553     struct list_head queue;
7554     struct mcam_dma_desc *dma_desc; /* Descriptor virtual address */
7555     dma_addr_t dma_desc_pa; /* Descriptor physical address */
7556     - int dma_desc_nent; /* Number of mapped descriptors */
7557     };
7558    
7559     static inline struct mcam_vb_buffer *vb_to_mvb(struct vb2_v4l2_buffer *vb)
7560     @@ -608,9 +607,11 @@ static void mcam_dma_contig_done(struct mcam_camera *cam, int frame)
7561     static void mcam_sg_next_buffer(struct mcam_camera *cam)
7562     {
7563     struct mcam_vb_buffer *buf;
7564     + struct sg_table *sg_table;
7565    
7566     buf = list_first_entry(&cam->buffers, struct mcam_vb_buffer, queue);
7567     list_del_init(&buf->queue);
7568     + sg_table = vb2_dma_sg_plane_desc(&buf->vb_buf.vb2_buf, 0);
7569     /*
7570     * Very Bad Not Good Things happen if you don't clear
7571     * C1_DESC_ENA before making any descriptor changes.
7572     @@ -618,7 +619,7 @@ static void mcam_sg_next_buffer(struct mcam_camera *cam)
7573     mcam_reg_clear_bit(cam, REG_CTRL1, C1_DESC_ENA);
7574     mcam_reg_write(cam, REG_DMA_DESC_Y, buf->dma_desc_pa);
7575     mcam_reg_write(cam, REG_DESC_LEN_Y,
7576     - buf->dma_desc_nent*sizeof(struct mcam_dma_desc));
7577     + sg_table->nents * sizeof(struct mcam_dma_desc));
7578     mcam_reg_write(cam, REG_DESC_LEN_U, 0);
7579     mcam_reg_write(cam, REG_DESC_LEN_V, 0);
7580     mcam_reg_set_bit(cam, REG_CTRL1, C1_DESC_ENA);
7581     diff --git a/drivers/media/platform/rcar_fdp1.c b/drivers/media/platform/rcar_fdp1.c
7582     index 2a15b7cca338..0d1467028811 100644
7583     --- a/drivers/media/platform/rcar_fdp1.c
7584     +++ b/drivers/media/platform/rcar_fdp1.c
7585     @@ -257,6 +257,8 @@ MODULE_PARM_DESC(debug, "activate debug info");
7586     #define FD1_IP_H3_ES1 0x02010101
7587     #define FD1_IP_M3W 0x02010202
7588     #define FD1_IP_H3 0x02010203
7589     +#define FD1_IP_M3N 0x02010204
7590     +#define FD1_IP_E3 0x02010205
7591    
7592     /* LUTs */
7593     #define FD1_LUT_DIF_ADJ 0x1000
7594     @@ -2365,6 +2367,12 @@ static int fdp1_probe(struct platform_device *pdev)
7595     case FD1_IP_H3:
7596     dprintk(fdp1, "FDP1 Version R-Car H3\n");
7597     break;
7598     + case FD1_IP_M3N:
7599     + dprintk(fdp1, "FDP1 Version R-Car M3N\n");
7600     + break;
7601     + case FD1_IP_E3:
7602     + dprintk(fdp1, "FDP1 Version R-Car E3\n");
7603     + break;
7604     default:
7605     dev_err(fdp1->dev, "FDP1 Unidentifiable (0x%08x)\n",
7606     hw_version);
7607     diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc.c b/drivers/media/platform/s5p-mfc/s5p_mfc.c
7608     index ca11f8a7569d..4b8516c35bc2 100644
7609     --- a/drivers/media/platform/s5p-mfc/s5p_mfc.c
7610     +++ b/drivers/media/platform/s5p-mfc/s5p_mfc.c
7611     @@ -527,7 +527,8 @@ static void s5p_mfc_handle_seq_done(struct s5p_mfc_ctx *ctx,
7612     dev);
7613     ctx->mv_count = s5p_mfc_hw_call(dev->mfc_ops, get_mv_count,
7614     dev);
7615     - ctx->scratch_buf_size = s5p_mfc_hw_call(dev->mfc_ops,
7616     + if (FW_HAS_E_MIN_SCRATCH_BUF(dev))
7617     + ctx->scratch_buf_size = s5p_mfc_hw_call(dev->mfc_ops,
7618     get_min_scratch_buf_size, dev);
7619     if (ctx->img_width == 0 || ctx->img_height == 0)
7620     ctx->state = MFCINST_ERROR;
7621     diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_pm.c b/drivers/media/platform/s5p-mfc/s5p_mfc_pm.c
7622     index eb85cedc5ef3..5e080f32b0e8 100644
7623     --- a/drivers/media/platform/s5p-mfc/s5p_mfc_pm.c
7624     +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_pm.c
7625     @@ -38,6 +38,11 @@ int s5p_mfc_init_pm(struct s5p_mfc_dev *dev)
7626     for (i = 0; i < pm->num_clocks; i++) {
7627     pm->clocks[i] = devm_clk_get(pm->device, pm->clk_names[i]);
7628     if (IS_ERR(pm->clocks[i])) {
7629     + /* additional clocks are optional */
7630     + if (i && PTR_ERR(pm->clocks[i]) == -ENOENT) {
7631     + pm->clocks[i] = NULL;
7632     + continue;
7633     + }
7634     mfc_err("Failed to get clock: %s\n",
7635     pm->clk_names[i]);
7636     return PTR_ERR(pm->clocks[i]);
7637     diff --git a/drivers/media/platform/vimc/vimc-capture.c b/drivers/media/platform/vimc/vimc-capture.c
7638     index 65d657daf66f..8e014cc485f0 100644
7639     --- a/drivers/media/platform/vimc/vimc-capture.c
7640     +++ b/drivers/media/platform/vimc/vimc-capture.c
7641     @@ -132,12 +132,15 @@ static int vimc_cap_s_fmt_vid_cap(struct file *file, void *priv,
7642     struct v4l2_format *f)
7643     {
7644     struct vimc_cap_device *vcap = video_drvdata(file);
7645     + int ret;
7646    
7647     /* Do not change the format while stream is on */
7648     if (vb2_is_busy(&vcap->queue))
7649     return -EBUSY;
7650    
7651     - vimc_cap_try_fmt_vid_cap(file, priv, f);
7652     + ret = vimc_cap_try_fmt_vid_cap(file, priv, f);
7653     + if (ret)
7654     + return ret;
7655    
7656     dev_dbg(vcap->dev, "%s: format update: "
7657     "old:%dx%d (0x%x, %d, %d, %d, %d) "
7658     diff --git a/drivers/media/radio/wl128x/fmdrv_v4l2.c b/drivers/media/radio/wl128x/fmdrv_v4l2.c
7659     index dccdf6558e6a..33abc8616ecb 100644
7660     --- a/drivers/media/radio/wl128x/fmdrv_v4l2.c
7661     +++ b/drivers/media/radio/wl128x/fmdrv_v4l2.c
7662     @@ -549,6 +549,7 @@ int fm_v4l2_init_video_device(struct fmdev *fmdev, int radio_nr)
7663    
7664     /* Register with V4L2 subsystem as RADIO device */
7665     if (video_register_device(&gradio_dev, VFL_TYPE_RADIO, radio_nr)) {
7666     + v4l2_device_unregister(&fmdev->v4l2_dev);
7667     fmerr("Could not register video device\n");
7668     return -ENOMEM;
7669     }
7670     @@ -562,6 +563,8 @@ int fm_v4l2_init_video_device(struct fmdev *fmdev, int radio_nr)
7671     if (ret < 0) {
7672     fmerr("(fmdev): Can't init ctrl handler\n");
7673     v4l2_ctrl_handler_free(&fmdev->ctrl_handler);
7674     + video_unregister_device(fmdev->radio_dev);
7675     + v4l2_device_unregister(&fmdev->v4l2_dev);
7676     return -EBUSY;
7677     }
7678    
7679     diff --git a/drivers/media/rc/ir-spi.c b/drivers/media/rc/ir-spi.c
7680     index 66334e8d63ba..c58f2d38a458 100644
7681     --- a/drivers/media/rc/ir-spi.c
7682     +++ b/drivers/media/rc/ir-spi.c
7683     @@ -161,6 +161,7 @@ static const struct of_device_id ir_spi_of_match[] = {
7684     { .compatible = "ir-spi-led" },
7685     {},
7686     };
7687     +MODULE_DEVICE_TABLE(of, ir_spi_of_match);
7688    
7689     static struct spi_driver ir_spi_driver = {
7690     .probe = ir_spi_probe,
7691     diff --git a/drivers/media/usb/dvb-usb/dvb-usb-init.c b/drivers/media/usb/dvb-usb/dvb-usb-init.c
7692     index 40ca4eafb137..39ac22486bcd 100644
7693     --- a/drivers/media/usb/dvb-usb/dvb-usb-init.c
7694     +++ b/drivers/media/usb/dvb-usb/dvb-usb-init.c
7695     @@ -287,12 +287,15 @@ EXPORT_SYMBOL(dvb_usb_device_init);
7696     void dvb_usb_device_exit(struct usb_interface *intf)
7697     {
7698     struct dvb_usb_device *d = usb_get_intfdata(intf);
7699     - const char *name = "generic DVB-USB module";
7700     + const char *default_name = "generic DVB-USB module";
7701     + char name[40];
7702    
7703     usb_set_intfdata(intf, NULL);
7704     if (d != NULL && d->desc != NULL) {
7705     - name = d->desc->name;
7706     + strscpy(name, d->desc->name, sizeof(name));
7707     dvb_usb_exit(d);
7708     + } else {
7709     + strscpy(name, default_name, sizeof(name));
7710     }
7711     info("%s successfully deinitialized and disconnected.", name);
7712    
7713     diff --git a/drivers/media/usb/hdpvr/hdpvr-video.c b/drivers/media/usb/hdpvr/hdpvr-video.c
7714     index 1b89c77bad66..0615996572e4 100644
7715     --- a/drivers/media/usb/hdpvr/hdpvr-video.c
7716     +++ b/drivers/media/usb/hdpvr/hdpvr-video.c
7717     @@ -439,7 +439,7 @@ static ssize_t hdpvr_read(struct file *file, char __user *buffer, size_t count,
7718     /* wait for the first buffer */
7719     if (!(file->f_flags & O_NONBLOCK)) {
7720     if (wait_event_interruptible(dev->wait_data,
7721     - hdpvr_get_next_buffer(dev)))
7722     + !list_empty_careful(&dev->rec_buff_list)))
7723     return -ERESTARTSYS;
7724     }
7725    
7726     @@ -465,10 +465,17 @@ static ssize_t hdpvr_read(struct file *file, char __user *buffer, size_t count,
7727     goto err;
7728     }
7729     if (!err) {
7730     - v4l2_dbg(MSG_INFO, hdpvr_debug, &dev->v4l2_dev,
7731     - "timeout: restart streaming\n");
7732     + v4l2_info(&dev->v4l2_dev,
7733     + "timeout: restart streaming\n");
7734     + mutex_lock(&dev->io_mutex);
7735     hdpvr_stop_streaming(dev);
7736     - msecs_to_jiffies(4000);
7737     + mutex_unlock(&dev->io_mutex);
7738     + /*
7739     + * The FW needs about 4 seconds after streaming
7740     + * stopped before it is ready to restart
7741     + * streaming.
7742     + */
7743     + msleep(4000);
7744     err = hdpvr_start_streaming(dev);
7745     if (err) {
7746     ret = err;
7747     @@ -1133,9 +1140,7 @@ static void hdpvr_device_release(struct video_device *vdev)
7748     struct hdpvr_device *dev = video_get_drvdata(vdev);
7749    
7750     hdpvr_delete(dev);
7751     - mutex_lock(&dev->io_mutex);
7752     flush_work(&dev->worker);
7753     - mutex_unlock(&dev->io_mutex);
7754    
7755     v4l2_device_unregister(&dev->v4l2_dev);
7756     v4l2_ctrl_handler_free(&dev->hdl);
7757     diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
7758     index 467b1ddaf4e7..f2854337cdca 100644
7759     --- a/drivers/media/usb/uvc/uvc_ctrl.c
7760     +++ b/drivers/media/usb/uvc/uvc_ctrl.c
7761     @@ -2350,7 +2350,9 @@ void uvc_ctrl_cleanup_device(struct uvc_device *dev)
7762     struct uvc_entity *entity;
7763     unsigned int i;
7764    
7765     - cancel_work_sync(&dev->async_ctrl.work);
7766     + /* Can be uninitialized if we are aborting on probe error. */
7767     + if (dev->async_ctrl.work.func)
7768     + cancel_work_sync(&dev->async_ctrl.work);
7769    
7770     /* Free controls and control mappings for all entities. */
7771     list_for_each_entry(entity, &dev->entities, list) {
7772     diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
7773     index 6ac5f5d42615..0986572bbe88 100644
7774     --- a/drivers/media/v4l2-core/v4l2-ctrls.c
7775     +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
7776     @@ -2249,16 +2249,15 @@ struct v4l2_ctrl *v4l2_ctrl_new_custom(struct v4l2_ctrl_handler *hdl,
7777     v4l2_ctrl_fill(cfg->id, &name, &type, &min, &max, &step,
7778     &def, &flags);
7779    
7780     - is_menu = (cfg->type == V4L2_CTRL_TYPE_MENU ||
7781     - cfg->type == V4L2_CTRL_TYPE_INTEGER_MENU);
7782     + is_menu = (type == V4L2_CTRL_TYPE_MENU ||
7783     + type == V4L2_CTRL_TYPE_INTEGER_MENU);
7784     if (is_menu)
7785     WARN_ON(step);
7786     else
7787     WARN_ON(cfg->menu_skip_mask);
7788     - if (cfg->type == V4L2_CTRL_TYPE_MENU && qmenu == NULL)
7789     + if (type == V4L2_CTRL_TYPE_MENU && !qmenu) {
7790     qmenu = v4l2_ctrl_get_menu(cfg->id);
7791     - else if (cfg->type == V4L2_CTRL_TYPE_INTEGER_MENU &&
7792     - qmenu_int == NULL) {
7793     + } else if (type == V4L2_CTRL_TYPE_INTEGER_MENU && !qmenu_int) {
7794     handler_set_err(hdl, -EINVAL);
7795     return NULL;
7796     }
7797     diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
7798     index 8594659cb592..ad0275191d91 100644
7799     --- a/drivers/mmc/host/sdhci-msm.c
7800     +++ b/drivers/mmc/host/sdhci-msm.c
7801     @@ -582,11 +582,14 @@ static int msm_init_cm_dll(struct sdhci_host *host)
7802     struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
7803     struct sdhci_msm_host *msm_host = sdhci_pltfm_priv(pltfm_host);
7804     int wait_cnt = 50;
7805     - unsigned long flags;
7806     + unsigned long flags, xo_clk = 0;
7807     u32 config;
7808     const struct sdhci_msm_offset *msm_offset =
7809     msm_host->offset;
7810    
7811     + if (msm_host->use_14lpp_dll_reset && !IS_ERR_OR_NULL(msm_host->xo_clk))
7812     + xo_clk = clk_get_rate(msm_host->xo_clk);
7813     +
7814     spin_lock_irqsave(&host->lock, flags);
7815    
7816     /*
7817     @@ -634,10 +637,10 @@ static int msm_init_cm_dll(struct sdhci_host *host)
7818     config &= CORE_FLL_CYCLE_CNT;
7819     if (config)
7820     mclk_freq = DIV_ROUND_CLOSEST_ULL((host->clock * 8),
7821     - clk_get_rate(msm_host->xo_clk));
7822     + xo_clk);
7823     else
7824     mclk_freq = DIV_ROUND_CLOSEST_ULL((host->clock * 4),
7825     - clk_get_rate(msm_host->xo_clk));
7826     + xo_clk);
7827    
7828     config = readl_relaxed(host->ioaddr +
7829     msm_offset->core_dll_config_2);
7830     diff --git a/drivers/mtd/nand/raw/mtk_nand.c b/drivers/mtd/nand/raw/mtk_nand.c
7831     index 57b5ed1699e3..dce5b7e44e7a 100644
7832     --- a/drivers/mtd/nand/raw/mtk_nand.c
7833     +++ b/drivers/mtd/nand/raw/mtk_nand.c
7834     @@ -509,7 +509,8 @@ static int mtk_nfc_setup_data_interface(struct mtd_info *mtd, int csline,
7835     {
7836     struct mtk_nfc *nfc = nand_get_controller_data(mtd_to_nand(mtd));
7837     const struct nand_sdr_timings *timings;
7838     - u32 rate, tpoecs, tprecs, tc2r, tw2r, twh, twst, trlt;
7839     + u32 rate, tpoecs, tprecs, tc2r, tw2r, twh, twst = 0, trlt = 0;
7840     + u32 thold;
7841    
7842     timings = nand_get_sdr_timings(conf);
7843     if (IS_ERR(timings))
7844     @@ -545,11 +546,28 @@ static int mtk_nfc_setup_data_interface(struct mtd_info *mtd, int csline,
7845     twh = DIV_ROUND_UP(twh * rate, 1000000) - 1;
7846     twh &= 0xf;
7847    
7848     - twst = timings->tWP_min / 1000;
7849     + /* Calculate real WE#/RE# hold time in nanosecond */
7850     + thold = (twh + 1) * 1000000 / rate;
7851     + /* nanosecond to picosecond */
7852     + thold *= 1000;
7853     +
7854     + /*
7855     + * WE# low level time should be expaned to meet WE# pulse time
7856     + * and WE# cycle time at the same time.
7857     + */
7858     + if (thold < timings->tWC_min)
7859     + twst = timings->tWC_min - thold;
7860     + twst = max(timings->tWP_min, twst) / 1000;
7861     twst = DIV_ROUND_UP(twst * rate, 1000000) - 1;
7862     twst &= 0xf;
7863    
7864     - trlt = max(timings->tREA_max, timings->tRP_min) / 1000;
7865     + /*
7866     + * RE# low level time should be expaned to meet RE# pulse time,
7867     + * RE# access time and RE# cycle time at the same time.
7868     + */
7869     + if (thold < timings->tRC_min)
7870     + trlt = timings->tRC_min - thold;
7871     + trlt = max3(trlt, timings->tREA_max, timings->tRP_min) / 1000;
7872     trlt = DIV_ROUND_UP(trlt * rate, 1000000) - 1;
7873     trlt &= 0xf;
7874    
7875     diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c
7876     index 8c7bf91ce4e1..48b3ab26b124 100644
7877     --- a/drivers/mtd/nand/spi/core.c
7878     +++ b/drivers/mtd/nand/spi/core.c
7879     @@ -572,12 +572,12 @@ static int spinand_mtd_read(struct mtd_info *mtd, loff_t from,
7880     if (ret == -EBADMSG) {
7881     ecc_failed = true;
7882     mtd->ecc_stats.failed++;
7883     - ret = 0;
7884     } else {
7885     mtd->ecc_stats.corrected += ret;
7886     max_bitflips = max_t(unsigned int, max_bitflips, ret);
7887     }
7888    
7889     + ret = 0;
7890     ops->retlen += iter.req.datalen;
7891     ops->oobretlen += iter.req.ooblen;
7892     }
7893     diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
7894     index 7e162fff01ab..be0b785becd0 100644
7895     --- a/drivers/net/bonding/bond_main.c
7896     +++ b/drivers/net/bonding/bond_main.c
7897     @@ -3852,8 +3852,8 @@ static netdev_tx_t bond_xmit_roundrobin(struct sk_buff *skb,
7898     struct net_device *bond_dev)
7899     {
7900     struct bonding *bond = netdev_priv(bond_dev);
7901     - struct iphdr *iph = ip_hdr(skb);
7902     struct slave *slave;
7903     + int slave_cnt;
7904     u32 slave_id;
7905    
7906     /* Start with the curr_active_slave that joined the bond as the
7907     @@ -3862,23 +3862,32 @@ static netdev_tx_t bond_xmit_roundrobin(struct sk_buff *skb,
7908     * send the join/membership reports. The curr_active_slave found
7909     * will send all of this type of traffic.
7910     */
7911     - if (iph->protocol == IPPROTO_IGMP && skb->protocol == htons(ETH_P_IP)) {
7912     - slave = rcu_dereference(bond->curr_active_slave);
7913     - if (slave)
7914     - bond_dev_queue_xmit(bond, skb, slave->dev);
7915     - else
7916     - bond_xmit_slave_id(bond, skb, 0);
7917     - } else {
7918     - int slave_cnt = READ_ONCE(bond->slave_cnt);
7919     + if (skb->protocol == htons(ETH_P_IP)) {
7920     + int noff = skb_network_offset(skb);
7921     + struct iphdr *iph;
7922    
7923     - if (likely(slave_cnt)) {
7924     - slave_id = bond_rr_gen_slave_id(bond);
7925     - bond_xmit_slave_id(bond, skb, slave_id % slave_cnt);
7926     - } else {
7927     - bond_tx_drop(bond_dev, skb);
7928     + if (unlikely(!pskb_may_pull(skb, noff + sizeof(*iph))))
7929     + goto non_igmp;
7930     +
7931     + iph = ip_hdr(skb);
7932     + if (iph->protocol == IPPROTO_IGMP) {
7933     + slave = rcu_dereference(bond->curr_active_slave);
7934     + if (slave)
7935     + bond_dev_queue_xmit(bond, skb, slave->dev);
7936     + else
7937     + bond_xmit_slave_id(bond, skb, 0);
7938     + return NETDEV_TX_OK;
7939     }
7940     }
7941    
7942     +non_igmp:
7943     + slave_cnt = READ_ONCE(bond->slave_cnt);
7944     + if (likely(slave_cnt)) {
7945     + slave_id = bond_rr_gen_slave_id(bond);
7946     + bond_xmit_slave_id(bond, skb, slave_id % slave_cnt);
7947     + } else {
7948     + bond_tx_drop(bond_dev, skb);
7949     + }
7950     return NETDEV_TX_OK;
7951     }
7952    
7953     diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
7954     index 5a727d4729da..e3ce29951c5e 100644
7955     --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
7956     +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
7957     @@ -3858,9 +3858,12 @@ netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
7958    
7959     if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
7960     if (!(bp->flags & TX_TIMESTAMPING_EN)) {
7961     + bp->eth_stats.ptp_skip_tx_ts++;
7962     BNX2X_ERR("Tx timestamping was not enabled, this packet will not be timestamped\n");
7963     } else if (bp->ptp_tx_skb) {
7964     - BNX2X_ERR("The device supports only a single outstanding packet to timestamp, this packet will not be timestamped\n");
7965     + bp->eth_stats.ptp_skip_tx_ts++;
7966     + netdev_err_once(bp->dev,
7967     + "Device supports only a single outstanding packet to timestamp, this packet won't be timestamped\n");
7968     } else {
7969     skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
7970     /* schedule check for Tx timestamp */
7971     diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
7972     index c428b0655c26..00f9ed93360c 100644
7973     --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
7974     +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
7975     @@ -182,7 +182,9 @@ static const struct {
7976     { STATS_OFFSET32(driver_filtered_tx_pkt),
7977     4, false, "driver_filtered_tx_pkt" },
7978     { STATS_OFFSET32(eee_tx_lpi),
7979     - 4, true, "Tx LPI entry count"}
7980     + 4, true, "Tx LPI entry count"},
7981     + { STATS_OFFSET32(ptp_skip_tx_ts),
7982     + 4, false, "ptp_skipped_tx_tstamp" },
7983     };
7984    
7985     #define BNX2X_NUM_STATS ARRAY_SIZE(bnx2x_stats_arr)
7986     diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
7987     index a585f1025a58..2c9af0f420e5 100644
7988     --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
7989     +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
7990     @@ -15244,11 +15244,24 @@ static void bnx2x_ptp_task(struct work_struct *work)
7991     u32 val_seq;
7992     u64 timestamp, ns;
7993     struct skb_shared_hwtstamps shhwtstamps;
7994     + bool bail = true;
7995     + int i;
7996     +
7997     + /* FW may take a while to complete timestamping; try a bit and if it's
7998     + * still not complete, may indicate an error state - bail out then.
7999     + */
8000     + for (i = 0; i < 10; i++) {
8001     + /* Read Tx timestamp registers */
8002     + val_seq = REG_RD(bp, port ? NIG_REG_P1_TLLH_PTP_BUF_SEQID :
8003     + NIG_REG_P0_TLLH_PTP_BUF_SEQID);
8004     + if (val_seq & 0x10000) {
8005     + bail = false;
8006     + break;
8007     + }
8008     + msleep(1 << i);
8009     + }
8010    
8011     - /* Read Tx timestamp registers */
8012     - val_seq = REG_RD(bp, port ? NIG_REG_P1_TLLH_PTP_BUF_SEQID :
8013     - NIG_REG_P0_TLLH_PTP_BUF_SEQID);
8014     - if (val_seq & 0x10000) {
8015     + if (!bail) {
8016     /* There is a valid timestamp value */
8017     timestamp = REG_RD(bp, port ? NIG_REG_P1_TLLH_PTP_BUF_TS_MSB :
8018     NIG_REG_P0_TLLH_PTP_BUF_TS_MSB);
8019     @@ -15263,16 +15276,18 @@ static void bnx2x_ptp_task(struct work_struct *work)
8020     memset(&shhwtstamps, 0, sizeof(shhwtstamps));
8021     shhwtstamps.hwtstamp = ns_to_ktime(ns);
8022     skb_tstamp_tx(bp->ptp_tx_skb, &shhwtstamps);
8023     - dev_kfree_skb_any(bp->ptp_tx_skb);
8024     - bp->ptp_tx_skb = NULL;
8025    
8026     DP(BNX2X_MSG_PTP, "Tx timestamp, timestamp cycles = %llu, ns = %llu\n",
8027     timestamp, ns);
8028     } else {
8029     - DP(BNX2X_MSG_PTP, "There is no valid Tx timestamp yet\n");
8030     - /* Reschedule to keep checking for a valid timestamp value */
8031     - schedule_work(&bp->ptp_task);
8032     + DP(BNX2X_MSG_PTP,
8033     + "Tx timestamp is not recorded (register read=%u)\n",
8034     + val_seq);
8035     + bp->eth_stats.ptp_skip_tx_ts++;
8036     }
8037     +
8038     + dev_kfree_skb_any(bp->ptp_tx_skb);
8039     + bp->ptp_tx_skb = NULL;
8040     }
8041    
8042     void bnx2x_set_rx_ts(struct bnx2x *bp, struct sk_buff *skb)
8043     diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h
8044     index b2644ed13d06..d55e63692cf3 100644
8045     --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h
8046     +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h
8047     @@ -207,6 +207,9 @@ struct bnx2x_eth_stats {
8048     u32 driver_filtered_tx_pkt;
8049     /* src: Clear-on-Read register; Will not survive PMF Migration */
8050     u32 eee_tx_lpi;
8051     +
8052     + /* PTP */
8053     + u32 ptp_skip_tx_ts;
8054     };
8055    
8056     struct bnx2x_eth_q_stats {
8057     diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
8058     index bf715a367273..4cf80de4c471 100644
8059     --- a/drivers/net/ethernet/freescale/fec_main.c
8060     +++ b/drivers/net/ethernet/freescale/fec_main.c
8061     @@ -1689,10 +1689,10 @@ static void fec_get_mac(struct net_device *ndev)
8062     */
8063     if (!is_valid_ether_addr(iap)) {
8064     /* Report it and use a random ethernet address instead */
8065     - netdev_err(ndev, "Invalid MAC address: %pM\n", iap);
8066     + dev_err(&fep->pdev->dev, "Invalid MAC address: %pM\n", iap);
8067     eth_hw_addr_random(ndev);
8068     - netdev_info(ndev, "Using random MAC address: %pM\n",
8069     - ndev->dev_addr);
8070     + dev_info(&fep->pdev->dev, "Using random MAC address: %pM\n",
8071     + ndev->dev_addr);
8072     return;
8073     }
8074    
8075     diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.c b/drivers/net/ethernet/hisilicon/hns3/hnae3.c
8076     index fff5be8078ac..0594a6c3dccd 100644
8077     --- a/drivers/net/ethernet/hisilicon/hns3/hnae3.c
8078     +++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.c
8079     @@ -229,6 +229,7 @@ void hnae3_unregister_ae_algo(struct hnae3_ae_algo *ae_algo)
8080    
8081     ae_algo->ops->uninit_ae_dev(ae_dev);
8082     hnae3_set_bit(ae_dev->flag, HNAE3_DEV_INITED_B, 0);
8083     + ae_dev->ops = NULL;
8084     }
8085    
8086     list_del(&ae_algo->node);
8087     @@ -316,6 +317,7 @@ void hnae3_unregister_ae_dev(struct hnae3_ae_dev *ae_dev)
8088    
8089     ae_algo->ops->uninit_ae_dev(ae_dev);
8090     hnae3_set_bit(ae_dev->flag, HNAE3_DEV_INITED_B, 0);
8091     + ae_dev->ops = NULL;
8092     }
8093    
8094     list_del(&ae_dev->node);
8095     diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
8096     index 9684ad015c42..6a3c6b02a77c 100644
8097     --- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
8098     +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
8099     @@ -245,11 +245,13 @@ static int hns3_lp_run_test(struct net_device *ndev, enum hnae3_loop mode)
8100    
8101     skb_get(skb);
8102     tx_ret = hns3_nic_net_xmit(skb, ndev);
8103     - if (tx_ret == NETDEV_TX_OK)
8104     + if (tx_ret == NETDEV_TX_OK) {
8105     good_cnt++;
8106     - else
8107     + } else {
8108     + kfree_skb(skb);
8109     netdev_err(ndev, "hns3_lb_run_test xmit failed: %d\n",
8110     tx_ret);
8111     + }
8112     }
8113     if (good_cnt != HNS3_NIC_LB_TEST_PKT_NUM) {
8114     ret_val = HNS3_NIC_LB_TEST_TX_CNT_ERR;
8115     diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
8116     index 4648c6a9d9e8..89ca69fa2b97 100644
8117     --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
8118     +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
8119     @@ -663,8 +663,7 @@ static u8 *hclge_comm_get_strings(u32 stringset,
8120     return buff;
8121    
8122     for (i = 0; i < size; i++) {
8123     - snprintf(buff, ETH_GSTRING_LEN,
8124     - strs[i].desc);
8125     + snprintf(buff, ETH_GSTRING_LEN, "%s", strs[i].desc);
8126     buff = buff + ETH_GSTRING_LEN;
8127     }
8128    
8129     diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
8130     index 48235dc2dd56..11e9259ca040 100644
8131     --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
8132     +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_tm.c
8133     @@ -54,7 +54,8 @@ static int hclge_shaper_para_calc(u32 ir, u8 shaper_level,
8134     u32 tick;
8135    
8136     /* Calc tick */
8137     - if (shaper_level >= HCLGE_SHAPER_LVL_CNT)
8138     + if (shaper_level >= HCLGE_SHAPER_LVL_CNT ||
8139     + ir > HCLGE_ETHER_MAX_RATE)
8140     return -EINVAL;
8141    
8142     tick = tick_array[shaper_level];
8143     @@ -1057,6 +1058,9 @@ static int hclge_tm_schd_mode_vnet_base_cfg(struct hclge_vport *vport)
8144     int ret;
8145     u8 i;
8146    
8147     + if (vport->vport_id >= HNAE3_MAX_TC)
8148     + return -EINVAL;
8149     +
8150     ret = hclge_tm_pri_schd_mode_cfg(hdev, vport->vport_id);
8151     if (ret)
8152     return ret;
8153     diff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
8154     index a9730711e257..b56d22b530a7 100644
8155     --- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
8156     +++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c
8157     @@ -1291,7 +1291,7 @@ static struct sk_buff *i40e_construct_skb(struct i40e_ring *rx_ring,
8158     struct i40e_rx_buffer *rx_buffer,
8159     unsigned int size)
8160     {
8161     - void *va = page_address(rx_buffer->page) + rx_buffer->page_offset;
8162     + void *va;
8163     #if (PAGE_SIZE < 8192)
8164     unsigned int truesize = i40e_rx_pg_size(rx_ring) / 2;
8165     #else
8166     @@ -1301,6 +1301,7 @@ static struct sk_buff *i40e_construct_skb(struct i40e_ring *rx_ring,
8167     struct sk_buff *skb;
8168    
8169     /* prefetch first cache line of first page */
8170     + va = page_address(rx_buffer->page) + rx_buffer->page_offset;
8171     prefetch(va);
8172     #if L1_CACHE_BYTES < 128
8173     prefetch(va + L1_CACHE_BYTES);
8174     @@ -1355,7 +1356,7 @@ static struct sk_buff *i40e_build_skb(struct i40e_ring *rx_ring,
8175     struct i40e_rx_buffer *rx_buffer,
8176     unsigned int size)
8177     {
8178     - void *va = page_address(rx_buffer->page) + rx_buffer->page_offset;
8179     + void *va;
8180     #if (PAGE_SIZE < 8192)
8181     unsigned int truesize = i40e_rx_pg_size(rx_ring) / 2;
8182     #else
8183     @@ -1365,6 +1366,7 @@ static struct sk_buff *i40e_build_skb(struct i40e_ring *rx_ring,
8184     struct sk_buff *skb;
8185    
8186     /* prefetch first cache line of first page */
8187     + va = page_address(rx_buffer->page) + rx_buffer->page_offset;
8188     prefetch(va);
8189     #if L1_CACHE_BYTES < 128
8190     prefetch(va + L1_CACHE_BYTES);
8191     diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
8192     index 5aa083d9a6c9..ab76a5f77cd0 100644
8193     --- a/drivers/net/ethernet/intel/igb/igb_main.c
8194     +++ b/drivers/net/ethernet/intel/igb/igb_main.c
8195     @@ -5703,6 +5703,7 @@ static void igb_tx_ctxtdesc(struct igb_ring *tx_ring,
8196     */
8197     if (tx_ring->launchtime_enable) {
8198     ts = ns_to_timespec64(first->skb->tstamp);
8199     + first->skb->tstamp = 0;
8200     context_desc->seqnum_seed = cpu_to_le32(ts.tv_nsec / 32);
8201     } else {
8202     context_desc->seqnum_seed = 0;
8203     diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
8204     index e5a8461fe6a9..8829bd95d0d3 100644
8205     --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
8206     +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
8207     @@ -3223,7 +3223,8 @@ static int ixgbe_get_module_info(struct net_device *dev,
8208     page_swap = true;
8209     }
8210    
8211     - if (sff8472_rev == IXGBE_SFF_SFF_8472_UNSUP || page_swap) {
8212     + if (sff8472_rev == IXGBE_SFF_SFF_8472_UNSUP || page_swap ||
8213     + !(addr_mode & IXGBE_SFF_DDM_IMPLEMENTED)) {
8214     /* We have a SFP, but it does not support SFF-8472 */
8215     modinfo->type = ETH_MODULE_SFF_8079;
8216     modinfo->eeprom_len = ETH_MODULE_SFF_8079_LEN;
8217     diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h
8218     index 64e44e01c973..c56baad04ee6 100644
8219     --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h
8220     +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h
8221     @@ -45,6 +45,7 @@
8222     #define IXGBE_SFF_SOFT_RS_SELECT_10G 0x8
8223     #define IXGBE_SFF_SOFT_RS_SELECT_1G 0x0
8224     #define IXGBE_SFF_ADDRESSING_MODE 0x4
8225     +#define IXGBE_SFF_DDM_IMPLEMENTED 0x40
8226     #define IXGBE_SFF_QSFP_DA_ACTIVE_CABLE 0x1
8227     #define IXGBE_SFF_QSFP_DA_PASSIVE_CABLE 0x8
8228     #define IXGBE_SFF_QSFP_CONNECTOR_NOT_SEPARABLE 0x23
8229     diff --git a/drivers/net/ethernet/marvell/mvmdio.c b/drivers/net/ethernet/marvell/mvmdio.c
8230     index c5dac6bd2be4..ee7857298361 100644
8231     --- a/drivers/net/ethernet/marvell/mvmdio.c
8232     +++ b/drivers/net/ethernet/marvell/mvmdio.c
8233     @@ -64,7 +64,7 @@
8234    
8235     struct orion_mdio_dev {
8236     void __iomem *regs;
8237     - struct clk *clk[3];
8238     + struct clk *clk[4];
8239     /*
8240     * If we have access to the error interrupt pin (which is
8241     * somewhat misnamed as it not only reflects internal errors
8242     @@ -321,6 +321,10 @@ static int orion_mdio_probe(struct platform_device *pdev)
8243    
8244     for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
8245     dev->clk[i] = of_clk_get(pdev->dev.of_node, i);
8246     + if (PTR_ERR(dev->clk[i]) == -EPROBE_DEFER) {
8247     + ret = -EPROBE_DEFER;
8248     + goto out_clk;
8249     + }
8250     if (IS_ERR(dev->clk[i]))
8251     break;
8252     clk_prepare_enable(dev->clk[i]);
8253     @@ -362,6 +366,7 @@ out_mdio:
8254     if (dev->err_interrupt > 0)
8255     writel(0, dev->regs + MVMDIO_ERR_INT_MASK);
8256    
8257     +out_clk:
8258     for (i = 0; i < ARRAY_SIZE(dev->clk); i++) {
8259     if (IS_ERR(dev->clk[i]))
8260     break;
8261     diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c
8262     index ae2240074d8e..5692c6087bbb 100644
8263     --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c
8264     +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_prs.c
8265     @@ -312,7 +312,8 @@ static void mvpp2_prs_sram_shift_set(struct mvpp2_prs_entry *pe, int shift,
8266     }
8267    
8268     /* Set value */
8269     - pe->sram[MVPP2_BIT_TO_WORD(MVPP2_PRS_SRAM_SHIFT_OFFS)] = shift & MVPP2_PRS_SRAM_SHIFT_MASK;
8270     + pe->sram[MVPP2_BIT_TO_WORD(MVPP2_PRS_SRAM_SHIFT_OFFS)] |=
8271     + shift & MVPP2_PRS_SRAM_SHIFT_MASK;
8272    
8273     /* Reset and set operation */
8274     mvpp2_prs_sram_bits_clear(pe, MVPP2_PRS_SRAM_OP_SEL_SHIFT_OFFS,
8275     diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c
8276     index 4dd82a1612aa..a6a9688db307 100644
8277     --- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
8278     +++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
8279     @@ -3096,6 +3096,7 @@ static void qed_nvm_info_free(struct qed_hwfn *p_hwfn)
8280     static int qed_hw_prepare_single(struct qed_hwfn *p_hwfn,
8281     void __iomem *p_regview,
8282     void __iomem *p_doorbells,
8283     + u64 db_phys_addr,
8284     enum qed_pci_personality personality)
8285     {
8286     int rc = 0;
8287     @@ -3103,6 +3104,7 @@ static int qed_hw_prepare_single(struct qed_hwfn *p_hwfn,
8288     /* Split PCI bars evenly between hwfns */
8289     p_hwfn->regview = p_regview;
8290     p_hwfn->doorbells = p_doorbells;
8291     + p_hwfn->db_phys_addr = db_phys_addr;
8292    
8293     if (IS_VF(p_hwfn->cdev))
8294     return qed_vf_hw_prepare(p_hwfn);
8295     @@ -3198,7 +3200,9 @@ int qed_hw_prepare(struct qed_dev *cdev,
8296     /* Initialize the first hwfn - will learn number of hwfns */
8297     rc = qed_hw_prepare_single(p_hwfn,
8298     cdev->regview,
8299     - cdev->doorbells, personality);
8300     + cdev->doorbells,
8301     + cdev->db_phys_addr,
8302     + personality);
8303     if (rc)
8304     return rc;
8305    
8306     @@ -3207,22 +3211,25 @@ int qed_hw_prepare(struct qed_dev *cdev,
8307     /* Initialize the rest of the hwfns */
8308     if (cdev->num_hwfns > 1) {
8309     void __iomem *p_regview, *p_doorbell;
8310     - u8 __iomem *addr;
8311     + u64 db_phys_addr;
8312     + u32 offset;
8313    
8314     /* adjust bar offset for second engine */
8315     - addr = cdev->regview +
8316     - qed_hw_bar_size(p_hwfn, p_hwfn->p_main_ptt,
8317     - BAR_ID_0) / 2;
8318     - p_regview = addr;
8319     + offset = qed_hw_bar_size(p_hwfn, p_hwfn->p_main_ptt,
8320     + BAR_ID_0) / 2;
8321     + p_regview = cdev->regview + offset;
8322    
8323     - addr = cdev->doorbells +
8324     - qed_hw_bar_size(p_hwfn, p_hwfn->p_main_ptt,
8325     - BAR_ID_1) / 2;
8326     - p_doorbell = addr;
8327     + offset = qed_hw_bar_size(p_hwfn, p_hwfn->p_main_ptt,
8328     + BAR_ID_1) / 2;
8329     +
8330     + p_doorbell = cdev->doorbells + offset;
8331     +
8332     + db_phys_addr = cdev->db_phys_addr + offset;
8333    
8334     /* prepare second hw function */
8335     rc = qed_hw_prepare_single(&cdev->hwfns[1], p_regview,
8336     - p_doorbell, personality);
8337     + p_doorbell, db_phys_addr,
8338     + personality);
8339    
8340     /* in case of error, need to free the previously
8341     * initiliazed hwfn 0.
8342     diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
8343     index b7471e48db7b..7002a660b6b4 100644
8344     --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
8345     +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
8346     @@ -2709,6 +2709,8 @@ qed_iwarp_ll2_start(struct qed_hwfn *p_hwfn,
8347     data.input.rx_num_desc = n_ooo_bufs * 2;
8348     data.input.tx_num_desc = data.input.rx_num_desc;
8349     data.input.tx_max_bds_per_packet = QED_IWARP_MAX_BDS_PER_FPDU;
8350     + data.input.tx_tc = PKT_LB_TC;
8351     + data.input.tx_dest = QED_LL2_TX_DEST_LB;
8352     data.p_connection_handle = &iwarp_info->ll2_mpa_handle;
8353     data.input.secondary_queue = true;
8354     data.cbs = &cbs;
8355     diff --git a/drivers/net/ethernet/qlogic/qed/qed_rdma.c b/drivers/net/ethernet/qlogic/qed/qed_rdma.c
8356     index 7873d6dfd91f..13802b825d65 100644
8357     --- a/drivers/net/ethernet/qlogic/qed/qed_rdma.c
8358     +++ b/drivers/net/ethernet/qlogic/qed/qed_rdma.c
8359     @@ -803,7 +803,7 @@ static int qed_rdma_add_user(void *rdma_cxt,
8360     dpi_start_offset +
8361     ((out_params->dpi) * p_hwfn->dpi_size));
8362    
8363     - out_params->dpi_phys_addr = p_hwfn->cdev->db_phys_addr +
8364     + out_params->dpi_phys_addr = p_hwfn->db_phys_addr +
8365     dpi_start_offset +
8366     ((out_params->dpi) * p_hwfn->dpi_size);
8367    
8368     diff --git a/drivers/net/ethernet/stmicro/stmmac/common.h b/drivers/net/ethernet/stmicro/stmmac/common.h
8369     index 272b9ca66314..b069b3a2453b 100644
8370     --- a/drivers/net/ethernet/stmicro/stmmac/common.h
8371     +++ b/drivers/net/ethernet/stmicro/stmmac/common.h
8372     @@ -261,7 +261,7 @@ struct stmmac_safety_stats {
8373     #define STMMAC_COAL_TX_TIMER 1000
8374     #define STMMAC_MAX_COAL_TX_TICK 100000
8375     #define STMMAC_TX_MAX_FRAMES 256
8376     -#define STMMAC_TX_FRAMES 25
8377     +#define STMMAC_TX_FRAMES 1
8378    
8379     /* Packets types */
8380     enum packets_types {
8381     diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
8382     index 49a896a16391..79c91526f3ec 100644
8383     --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
8384     +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
8385     @@ -893,6 +893,11 @@ static int sun8i_dwmac_set_syscon(struct stmmac_priv *priv)
8386     * address. No need to mask it again.
8387     */
8388     reg |= 1 << H3_EPHY_ADDR_SHIFT;
8389     + } else {
8390     + /* For SoCs without internal PHY the PHY selection bit should be
8391     + * set to 0 (external PHY).
8392     + */
8393     + reg &= ~H3_EPHY_SELECT;
8394     }
8395    
8396     if (!of_property_read_u32(node, "allwinner,tx-delay-ps", &val)) {
8397     diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
8398     index 0877bde6e860..21d131347e2e 100644
8399     --- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
8400     +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_core.c
8401     @@ -216,6 +216,12 @@ static void dwmac1000_set_filter(struct mac_device_info *hw,
8402     GMAC_ADDR_LOW(reg));
8403     reg++;
8404     }
8405     +
8406     + while (reg <= perfect_addr_number) {
8407     + writel(0, ioaddr + GMAC_ADDR_HIGH(reg));
8408     + writel(0, ioaddr + GMAC_ADDR_LOW(reg));
8409     + reg++;
8410     + }
8411     }
8412    
8413     #ifdef FRAME_FILTER_DEBUG
8414     diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
8415     index 7e5d5db0d516..d0e6e1503581 100644
8416     --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
8417     +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
8418     @@ -444,14 +444,20 @@ static void dwmac4_set_filter(struct mac_device_info *hw,
8419     * are required
8420     */
8421     value |= GMAC_PACKET_FILTER_PR;
8422     - } else if (!netdev_uc_empty(dev)) {
8423     - int reg = 1;
8424     + } else {
8425     struct netdev_hw_addr *ha;
8426     + int reg = 1;
8427    
8428     netdev_for_each_uc_addr(ha, dev) {
8429     dwmac4_set_umac_addr(hw, ha->addr, reg);
8430     reg++;
8431     }
8432     +
8433     + while (reg <= GMAC_MAX_PERFECT_ADDRESSES) {
8434     + writel(0, ioaddr + GMAC_ADDR_HIGH(reg));
8435     + writel(0, ioaddr + GMAC_ADDR_LOW(reg));
8436     + reg++;
8437     + }
8438     }
8439    
8440     writel(value, ioaddr + GMAC_PACKET_FILTER);
8441     @@ -469,8 +475,9 @@ static void dwmac4_flow_ctrl(struct mac_device_info *hw, unsigned int duplex,
8442     if (fc & FLOW_RX) {
8443     pr_debug("\tReceive Flow-Control ON\n");
8444     flow |= GMAC_RX_FLOW_CTRL_RFE;
8445     - writel(flow, ioaddr + GMAC_RX_FLOW_CTRL);
8446     }
8447     + writel(flow, ioaddr + GMAC_RX_FLOW_CTRL);
8448     +
8449     if (fc & FLOW_TX) {
8450     pr_debug("\tTransmit Flow-Control ON\n");
8451    
8452     @@ -478,7 +485,7 @@ static void dwmac4_flow_ctrl(struct mac_device_info *hw, unsigned int duplex,
8453     pr_debug("\tduplex mode: PAUSE %d\n", pause_time);
8454    
8455     for (queue = 0; queue < tx_cnt; queue++) {
8456     - flow |= GMAC_TX_FLOW_CTRL_TFE;
8457     + flow = GMAC_TX_FLOW_CTRL_TFE;
8458    
8459     if (duplex)
8460     flow |=
8461     @@ -486,6 +493,9 @@ static void dwmac4_flow_ctrl(struct mac_device_info *hw, unsigned int duplex,
8462    
8463     writel(flow, ioaddr + GMAC_QX_TX_FLOW_CTRL(queue));
8464     }
8465     + } else {
8466     + for (queue = 0; queue < tx_cnt; queue++)
8467     + writel(0, ioaddr + GMAC_QX_TX_FLOW_CTRL(queue));
8468     }
8469     }
8470    
8471     diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
8472     index 7cfd7ff38e86..66b30ebd45ee 100644
8473     --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
8474     +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
8475     @@ -614,6 +614,10 @@ static void axienet_start_xmit_done(struct net_device *ndev)
8476    
8477     ndev->stats.tx_packets += packets;
8478     ndev->stats.tx_bytes += size;
8479     +
8480     + /* Matches barrier in axienet_start_xmit */
8481     + smp_mb();
8482     +
8483     netif_wake_queue(ndev);
8484     }
8485    
8486     @@ -668,9 +672,19 @@ static int axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
8487     cur_p = &lp->tx_bd_v[lp->tx_bd_tail];
8488    
8489     if (axienet_check_tx_bd_space(lp, num_frag)) {
8490     - if (!netif_queue_stopped(ndev))
8491     - netif_stop_queue(ndev);
8492     - return NETDEV_TX_BUSY;
8493     + if (netif_queue_stopped(ndev))
8494     + return NETDEV_TX_BUSY;
8495     +
8496     + netif_stop_queue(ndev);
8497     +
8498     + /* Matches barrier in axienet_start_xmit_done */
8499     + smp_mb();
8500     +
8501     + /* Space might have just been freed - check again */
8502     + if (axienet_check_tx_bd_space(lp, num_frag))
8503     + return NETDEV_TX_BUSY;
8504     +
8505     + netif_wake_queue(ndev);
8506     }
8507    
8508     if (skb->ip_summed == CHECKSUM_PARTIAL) {
8509     diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c
8510     index 7a145172d503..d178d5bad7e4 100644
8511     --- a/drivers/net/gtp.c
8512     +++ b/drivers/net/gtp.c
8513     @@ -289,16 +289,29 @@ static int gtp1u_udp_encap_recv(struct gtp_dev *gtp, struct sk_buff *skb)
8514     return gtp_rx(pctx, skb, hdrlen, gtp->role);
8515     }
8516    
8517     -static void gtp_encap_destroy(struct sock *sk)
8518     +static void __gtp_encap_destroy(struct sock *sk)
8519     {
8520     struct gtp_dev *gtp;
8521    
8522     - gtp = rcu_dereference_sk_user_data(sk);
8523     + lock_sock(sk);
8524     + gtp = sk->sk_user_data;
8525     if (gtp) {
8526     + if (gtp->sk0 == sk)
8527     + gtp->sk0 = NULL;
8528     + else
8529     + gtp->sk1u = NULL;
8530     udp_sk(sk)->encap_type = 0;
8531     rcu_assign_sk_user_data(sk, NULL);
8532     sock_put(sk);
8533     }
8534     + release_sock(sk);
8535     +}
8536     +
8537     +static void gtp_encap_destroy(struct sock *sk)
8538     +{
8539     + rtnl_lock();
8540     + __gtp_encap_destroy(sk);
8541     + rtnl_unlock();
8542     }
8543    
8544     static void gtp_encap_disable_sock(struct sock *sk)
8545     @@ -306,7 +319,7 @@ static void gtp_encap_disable_sock(struct sock *sk)
8546     if (!sk)
8547     return;
8548    
8549     - gtp_encap_destroy(sk);
8550     + __gtp_encap_destroy(sk);
8551     }
8552    
8553     static void gtp_encap_disable(struct gtp_dev *gtp)
8554     @@ -800,7 +813,8 @@ static struct sock *gtp_encap_enable_socket(int fd, int type,
8555     goto out_sock;
8556     }
8557    
8558     - if (rcu_dereference_sk_user_data(sock->sk)) {
8559     + lock_sock(sock->sk);
8560     + if (sock->sk->sk_user_data) {
8561     sk = ERR_PTR(-EBUSY);
8562     goto out_sock;
8563     }
8564     @@ -816,6 +830,7 @@ static struct sock *gtp_encap_enable_socket(int fd, int type,
8565     setup_udp_tunnel_sock(sock_net(sock->sk), sock, &tuncfg);
8566    
8567     out_sock:
8568     + release_sock(sock->sk);
8569     sockfd_put(sock);
8570     return sk;
8571     }
8572     @@ -847,8 +862,13 @@ static int gtp_encap_enable(struct gtp_dev *gtp, struct nlattr *data[])
8573    
8574     if (data[IFLA_GTP_ROLE]) {
8575     role = nla_get_u32(data[IFLA_GTP_ROLE]);
8576     - if (role > GTP_ROLE_SGSN)
8577     + if (role > GTP_ROLE_SGSN) {
8578     + if (sk0)
8579     + gtp_encap_disable_sock(sk0);
8580     + if (sk1u)
8581     + gtp_encap_disable_sock(sk1u);
8582     return -EINVAL;
8583     + }
8584     }
8585    
8586     gtp->sk0 = sk0;
8587     @@ -949,7 +969,7 @@ static int ipv4_pdp_add(struct gtp_dev *gtp, struct sock *sk,
8588    
8589     }
8590    
8591     - pctx = kmalloc(sizeof(struct pdp_ctx), GFP_KERNEL);
8592     + pctx = kmalloc(sizeof(*pctx), GFP_ATOMIC);
8593     if (pctx == NULL)
8594     return -ENOMEM;
8595    
8596     @@ -1038,6 +1058,7 @@ static int gtp_genl_new_pdp(struct sk_buff *skb, struct genl_info *info)
8597     return -EINVAL;
8598     }
8599    
8600     + rtnl_lock();
8601     rcu_read_lock();
8602    
8603     gtp = gtp_find_dev(sock_net(skb->sk), info->attrs);
8604     @@ -1062,6 +1083,7 @@ static int gtp_genl_new_pdp(struct sk_buff *skb, struct genl_info *info)
8605    
8606     out_unlock:
8607     rcu_read_unlock();
8608     + rtnl_unlock();
8609     return err;
8610     }
8611    
8612     @@ -1363,9 +1385,9 @@ late_initcall(gtp_init);
8613    
8614     static void __exit gtp_fini(void)
8615     {
8616     - unregister_pernet_subsys(&gtp_net_ops);
8617     genl_unregister_family(&gtp_genl_family);
8618     rtnl_link_unregister(&gtp_link_ops);
8619     + unregister_pernet_subsys(&gtp_net_ops);
8620    
8621     pr_info("GTP module unloaded\n");
8622     }
8623     diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
8624     index 8a96d985a52f..6144146aec29 100644
8625     --- a/drivers/net/phy/phy_device.c
8626     +++ b/drivers/net/phy/phy_device.c
8627     @@ -757,6 +757,9 @@ int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
8628     {
8629     int rc;
8630    
8631     + if (!dev)
8632     + return -EINVAL;
8633     +
8634     rc = phy_attach_direct(dev, phydev, phydev->dev_flags, interface);
8635     if (rc)
8636     return rc;
8637     @@ -1098,6 +1101,9 @@ struct phy_device *phy_attach(struct net_device *dev, const char *bus_id,
8638     struct device *d;
8639     int rc;
8640    
8641     + if (!dev)
8642     + return ERR_PTR(-EINVAL);
8643     +
8644     /* Search the list of PHY devices on the mdio bus for the
8645     * PHY with the requested name
8646     */
8647     diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c
8648     index 8807a806cc47..418522aa2f71 100644
8649     --- a/drivers/net/phy/sfp.c
8650     +++ b/drivers/net/phy/sfp.c
8651     @@ -185,10 +185,11 @@ struct sfp {
8652     struct gpio_desc *gpio[GPIO_MAX];
8653    
8654     bool attached;
8655     + struct mutex st_mutex; /* Protects state */
8656     unsigned int state;
8657     struct delayed_work poll;
8658     struct delayed_work timeout;
8659     - struct mutex sm_mutex;
8660     + struct mutex sm_mutex; /* Protects state machine */
8661     unsigned char sm_mod_state;
8662     unsigned char sm_dev_state;
8663     unsigned short sm_state;
8664     @@ -1718,6 +1719,7 @@ static void sfp_check_state(struct sfp *sfp)
8665     {
8666     unsigned int state, i, changed;
8667    
8668     + mutex_lock(&sfp->st_mutex);
8669     state = sfp_get_state(sfp);
8670     changed = state ^ sfp->state;
8671     changed &= SFP_F_PRESENT | SFP_F_LOS | SFP_F_TX_FAULT;
8672     @@ -1743,6 +1745,7 @@ static void sfp_check_state(struct sfp *sfp)
8673     sfp_sm_event(sfp, state & SFP_F_LOS ?
8674     SFP_E_LOS_HIGH : SFP_E_LOS_LOW);
8675     rtnl_unlock();
8676     + mutex_unlock(&sfp->st_mutex);
8677     }
8678    
8679     static irqreturn_t sfp_irq(int irq, void *data)
8680     @@ -1773,6 +1776,7 @@ static struct sfp *sfp_alloc(struct device *dev)
8681     sfp->dev = dev;
8682    
8683     mutex_init(&sfp->sm_mutex);
8684     + mutex_init(&sfp->st_mutex);
8685     INIT_DELAYED_WORK(&sfp->poll, sfp_poll);
8686     INIT_DELAYED_WORK(&sfp->timeout, sfp_timeout);
8687    
8688     diff --git a/drivers/net/usb/asix_devices.c b/drivers/net/usb/asix_devices.c
8689     index 3d93993e74da..2eca4168af2f 100644
8690     --- a/drivers/net/usb/asix_devices.c
8691     +++ b/drivers/net/usb/asix_devices.c
8692     @@ -238,7 +238,7 @@ static void asix_phy_reset(struct usbnet *dev, unsigned int reset_bits)
8693     static int ax88172_bind(struct usbnet *dev, struct usb_interface *intf)
8694     {
8695     int ret = 0;
8696     - u8 buf[ETH_ALEN];
8697     + u8 buf[ETH_ALEN] = {0};
8698     int i;
8699     unsigned long gpio_bits = dev->driver_info->data;
8700    
8701     @@ -689,7 +689,7 @@ static int asix_resume(struct usb_interface *intf)
8702     static int ax88772_bind(struct usbnet *dev, struct usb_interface *intf)
8703     {
8704     int ret, i;
8705     - u8 buf[ETH_ALEN], chipcode = 0;
8706     + u8 buf[ETH_ALEN] = {0}, chipcode = 0;
8707     u32 phyid;
8708     struct asix_common_private *priv;
8709    
8710     @@ -1073,7 +1073,7 @@ static const struct net_device_ops ax88178_netdev_ops = {
8711     static int ax88178_bind(struct usbnet *dev, struct usb_interface *intf)
8712     {
8713     int ret;
8714     - u8 buf[ETH_ALEN];
8715     + u8 buf[ETH_ALEN] = {0};
8716    
8717     usbnet_get_endpoints(dev,intf);
8718    
8719     diff --git a/drivers/net/wireless/ath/ath10k/hw.c b/drivers/net/wireless/ath/ath10k/hw.c
8720     index 677535b3d207..476e0535f06f 100644
8721     --- a/drivers/net/wireless/ath/ath10k/hw.c
8722     +++ b/drivers/net/wireless/ath/ath10k/hw.c
8723     @@ -168,7 +168,7 @@ const struct ath10k_hw_values qca6174_values = {
8724     };
8725    
8726     const struct ath10k_hw_values qca99x0_values = {
8727     - .rtc_state_val_on = 5,
8728     + .rtc_state_val_on = 7,
8729     .ce_count = 12,
8730     .msi_assign_ce_max = 12,
8731     .num_target_ce_config_wlan = 10,
8732     diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
8733     index f3b1cfacfe9d..1419f9d1505f 100644
8734     --- a/drivers/net/wireless/ath/ath10k/mac.c
8735     +++ b/drivers/net/wireless/ath/ath10k/mac.c
8736     @@ -1624,6 +1624,10 @@ static int ath10k_mac_setup_prb_tmpl(struct ath10k_vif *arvif)
8737     if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
8738     return 0;
8739    
8740     + /* For mesh, probe response and beacon share the same template */
8741     + if (ieee80211_vif_is_mesh(vif))
8742     + return 0;
8743     +
8744     prb = ieee80211_proberesp_get(hw, vif);
8745     if (!prb) {
8746     ath10k_warn(ar, "failed to get probe resp template from mac80211\n");
8747     diff --git a/drivers/net/wireless/ath/ath10k/sdio.c b/drivers/net/wireless/ath/ath10k/sdio.c
8748     index 7f61591ce0de..686759b5613f 100644
8749     --- a/drivers/net/wireless/ath/ath10k/sdio.c
8750     +++ b/drivers/net/wireless/ath/ath10k/sdio.c
8751     @@ -613,6 +613,10 @@ static int ath10k_sdio_mbox_rx_alloc(struct ath10k *ar,
8752     full_len,
8753     last_in_bundle,
8754     last_in_bundle);
8755     + if (ret) {
8756     + ath10k_warn(ar, "alloc_rx_pkt error %d\n", ret);
8757     + goto err;
8758     + }
8759     }
8760    
8761     ar_sdio->n_rx_pkts = i;
8762     @@ -2069,6 +2073,9 @@ static void ath10k_sdio_remove(struct sdio_func *func)
8763     cancel_work_sync(&ar_sdio->wr_async_work);
8764     ath10k_core_unregister(ar);
8765     ath10k_core_destroy(ar);
8766     +
8767     + flush_workqueue(ar_sdio->workqueue);
8768     + destroy_workqueue(ar_sdio->workqueue);
8769     }
8770    
8771     static const struct sdio_device_id ath10k_sdio_devices[] = {
8772     diff --git a/drivers/net/wireless/ath/ath10k/txrx.c b/drivers/net/wireless/ath/ath10k/txrx.c
8773     index cda164f6e9f6..6f62ddc0494c 100644
8774     --- a/drivers/net/wireless/ath/ath10k/txrx.c
8775     +++ b/drivers/net/wireless/ath/ath10k/txrx.c
8776     @@ -156,6 +156,9 @@ struct ath10k_peer *ath10k_peer_find_by_id(struct ath10k *ar, int peer_id)
8777     {
8778     struct ath10k_peer *peer;
8779    
8780     + if (peer_id >= BITS_PER_TYPE(peer->peer_ids))
8781     + return NULL;
8782     +
8783     lockdep_assert_held(&ar->data_lock);
8784    
8785     list_for_each_entry(peer, &ar->peers, list)
8786     diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c
8787     index 777acc564ac9..bc7916f2add0 100644
8788     --- a/drivers/net/wireless/ath/ath6kl/wmi.c
8789     +++ b/drivers/net/wireless/ath/ath6kl/wmi.c
8790     @@ -1178,6 +1178,10 @@ static int ath6kl_wmi_pstream_timeout_event_rx(struct wmi *wmi, u8 *datap,
8791     return -EINVAL;
8792    
8793     ev = (struct wmi_pstream_timeout_event *) datap;
8794     + if (ev->traffic_class >= WMM_NUM_AC) {
8795     + ath6kl_err("invalid traffic class: %d\n", ev->traffic_class);
8796     + return -EINVAL;
8797     + }
8798    
8799     /*
8800     * When the pstream (fat pipe == AC) timesout, it means there were
8801     @@ -1519,6 +1523,10 @@ static int ath6kl_wmi_cac_event_rx(struct wmi *wmi, u8 *datap, int len,
8802     return -EINVAL;
8803    
8804     reply = (struct wmi_cac_event *) datap;
8805     + if (reply->ac >= WMM_NUM_AC) {
8806     + ath6kl_err("invalid AC: %d\n", reply->ac);
8807     + return -EINVAL;
8808     + }
8809    
8810     if ((reply->cac_indication == CAC_INDICATION_ADMISSION_RESP) &&
8811     (reply->status_code != IEEE80211_TSPEC_STATUS_ADMISS_ACCEPTED)) {
8812     @@ -2635,7 +2643,7 @@ int ath6kl_wmi_delete_pstream_cmd(struct wmi *wmi, u8 if_idx, u8 traffic_class,
8813     u16 active_tsids = 0;
8814     int ret;
8815    
8816     - if (traffic_class > 3) {
8817     + if (traffic_class >= WMM_NUM_AC) {
8818     ath6kl_err("invalid traffic class: %d\n", traffic_class);
8819     return -EINVAL;
8820     }
8821     diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c
8822     index bb319f22761f..b4f7ee423d40 100644
8823     --- a/drivers/net/wireless/ath/ath9k/hw.c
8824     +++ b/drivers/net/wireless/ath/ath9k/hw.c
8825     @@ -252,8 +252,9 @@ void ath9k_hw_get_channel_centers(struct ath_hw *ah,
8826     /* Chip Revisions */
8827     /******************/
8828    
8829     -static void ath9k_hw_read_revisions(struct ath_hw *ah)
8830     +static bool ath9k_hw_read_revisions(struct ath_hw *ah)
8831     {
8832     + u32 srev;
8833     u32 val;
8834    
8835     if (ah->get_mac_revision)
8836     @@ -269,25 +270,33 @@ static void ath9k_hw_read_revisions(struct ath_hw *ah)
8837     val = REG_READ(ah, AR_SREV);
8838     ah->hw_version.macRev = MS(val, AR_SREV_REVISION2);
8839     }
8840     - return;
8841     + return true;
8842     case AR9300_DEVID_AR9340:
8843     ah->hw_version.macVersion = AR_SREV_VERSION_9340;
8844     - return;
8845     + return true;
8846     case AR9300_DEVID_QCA955X:
8847     ah->hw_version.macVersion = AR_SREV_VERSION_9550;
8848     - return;
8849     + return true;
8850     case AR9300_DEVID_AR953X:
8851     ah->hw_version.macVersion = AR_SREV_VERSION_9531;
8852     - return;
8853     + return true;
8854     case AR9300_DEVID_QCA956X:
8855     ah->hw_version.macVersion = AR_SREV_VERSION_9561;
8856     - return;
8857     + return true;
8858     }
8859    
8860     - val = REG_READ(ah, AR_SREV) & AR_SREV_ID;
8861     + srev = REG_READ(ah, AR_SREV);
8862     +
8863     + if (srev == -EIO) {
8864     + ath_err(ath9k_hw_common(ah),
8865     + "Failed to read SREV register");
8866     + return false;
8867     + }
8868     +
8869     + val = srev & AR_SREV_ID;
8870    
8871     if (val == 0xFF) {
8872     - val = REG_READ(ah, AR_SREV);
8873     + val = srev;
8874     ah->hw_version.macVersion =
8875     (val & AR_SREV_VERSION2) >> AR_SREV_TYPE2_S;
8876     ah->hw_version.macRev = MS(val, AR_SREV_REVISION2);
8877     @@ -306,6 +315,8 @@ static void ath9k_hw_read_revisions(struct ath_hw *ah)
8878     if (ah->hw_version.macVersion == AR_SREV_VERSION_5416_PCIE)
8879     ah->is_pciexpress = true;
8880     }
8881     +
8882     + return true;
8883     }
8884    
8885     /************************************/
8886     @@ -559,7 +570,10 @@ static int __ath9k_hw_init(struct ath_hw *ah)
8887     struct ath_common *common = ath9k_hw_common(ah);
8888     int r = 0;
8889    
8890     - ath9k_hw_read_revisions(ah);
8891     + if (!ath9k_hw_read_revisions(ah)) {
8892     + ath_err(common, "Could not read hardware revisions");
8893     + return -EOPNOTSUPP;
8894     + }
8895    
8896     switch (ah->hw_version.macVersion) {
8897     case AR_SREV_VERSION_5416_PCI:
8898     diff --git a/drivers/net/wireless/ath/dfs_pattern_detector.c b/drivers/net/wireless/ath/dfs_pattern_detector.c
8899     index d52b31b45df7..a274eb0d1968 100644
8900     --- a/drivers/net/wireless/ath/dfs_pattern_detector.c
8901     +++ b/drivers/net/wireless/ath/dfs_pattern_detector.c
8902     @@ -111,7 +111,7 @@ static const struct radar_detector_specs jp_radar_ref_types[] = {
8903     JP_PATTERN(0, 0, 1, 1428, 1428, 1, 18, 29, false),
8904     JP_PATTERN(1, 2, 3, 3846, 3846, 1, 18, 29, false),
8905     JP_PATTERN(2, 0, 1, 1388, 1388, 1, 18, 50, false),
8906     - JP_PATTERN(3, 1, 2, 4000, 4000, 1, 18, 50, false),
8907     + JP_PATTERN(3, 0, 4, 4000, 4000, 1, 18, 50, false),
8908     JP_PATTERN(4, 0, 5, 150, 230, 1, 23, 50, false),
8909     JP_PATTERN(5, 6, 10, 200, 500, 1, 16, 50, false),
8910     JP_PATTERN(6, 11, 20, 200, 500, 1, 12, 50, false),
8911     diff --git a/drivers/net/wireless/ath/wil6210/interrupt.c b/drivers/net/wireless/ath/wil6210/interrupt.c
8912     index 5d287a8e1b45..0655cd884514 100644
8913     --- a/drivers/net/wireless/ath/wil6210/interrupt.c
8914     +++ b/drivers/net/wireless/ath/wil6210/interrupt.c
8915     @@ -296,21 +296,24 @@ void wil_configure_interrupt_moderation(struct wil6210_priv *wil)
8916     static irqreturn_t wil6210_irq_rx(int irq, void *cookie)
8917     {
8918     struct wil6210_priv *wil = cookie;
8919     - u32 isr = wil_ioread32_and_clear(wil->csr +
8920     - HOSTADDR(RGF_DMA_EP_RX_ICR) +
8921     - offsetof(struct RGF_ICR, ICR));
8922     + u32 isr;
8923     bool need_unmask = true;
8924    
8925     + wil6210_mask_irq_rx(wil);
8926     +
8927     + isr = wil_ioread32_and_clear(wil->csr +
8928     + HOSTADDR(RGF_DMA_EP_RX_ICR) +
8929     + offsetof(struct RGF_ICR, ICR));
8930     +
8931     trace_wil6210_irq_rx(isr);
8932     wil_dbg_irq(wil, "ISR RX 0x%08x\n", isr);
8933    
8934     if (unlikely(!isr)) {
8935     wil_err_ratelimited(wil, "spurious IRQ: RX\n");
8936     + wil6210_unmask_irq_rx(wil);
8937     return IRQ_NONE;
8938     }
8939    
8940     - wil6210_mask_irq_rx(wil);
8941     -
8942     /* RX_DONE and RX_HTRSH interrupts are the same if interrupt
8943     * moderation is not used. Interrupt moderation may cause RX
8944     * buffer overflow while RX_DONE is delayed. The required
8945     @@ -355,21 +358,24 @@ static irqreturn_t wil6210_irq_rx(int irq, void *cookie)
8946     static irqreturn_t wil6210_irq_rx_edma(int irq, void *cookie)
8947     {
8948     struct wil6210_priv *wil = cookie;
8949     - u32 isr = wil_ioread32_and_clear(wil->csr +
8950     - HOSTADDR(RGF_INT_GEN_RX_ICR) +
8951     - offsetof(struct RGF_ICR, ICR));
8952     + u32 isr;
8953     bool need_unmask = true;
8954    
8955     + wil6210_mask_irq_rx_edma(wil);
8956     +
8957     + isr = wil_ioread32_and_clear(wil->csr +
8958     + HOSTADDR(RGF_INT_GEN_RX_ICR) +
8959     + offsetof(struct RGF_ICR, ICR));
8960     +
8961     trace_wil6210_irq_rx(isr);
8962     wil_dbg_irq(wil, "ISR RX 0x%08x\n", isr);
8963    
8964     if (unlikely(!isr)) {
8965     wil_err(wil, "spurious IRQ: RX\n");
8966     + wil6210_unmask_irq_rx_edma(wil);
8967     return IRQ_NONE;
8968     }
8969    
8970     - wil6210_mask_irq_rx_edma(wil);
8971     -
8972     if (likely(isr & BIT_RX_STATUS_IRQ)) {
8973     wil_dbg_irq(wil, "RX status ring\n");
8974     isr &= ~BIT_RX_STATUS_IRQ;
8975     @@ -403,21 +409,24 @@ static irqreturn_t wil6210_irq_rx_edma(int irq, void *cookie)
8976     static irqreturn_t wil6210_irq_tx_edma(int irq, void *cookie)
8977     {
8978     struct wil6210_priv *wil = cookie;
8979     - u32 isr = wil_ioread32_and_clear(wil->csr +
8980     - HOSTADDR(RGF_INT_GEN_TX_ICR) +
8981     - offsetof(struct RGF_ICR, ICR));
8982     + u32 isr;
8983     bool need_unmask = true;
8984    
8985     + wil6210_mask_irq_tx_edma(wil);
8986     +
8987     + isr = wil_ioread32_and_clear(wil->csr +
8988     + HOSTADDR(RGF_INT_GEN_TX_ICR) +
8989     + offsetof(struct RGF_ICR, ICR));
8990     +
8991     trace_wil6210_irq_tx(isr);
8992     wil_dbg_irq(wil, "ISR TX 0x%08x\n", isr);
8993    
8994     if (unlikely(!isr)) {
8995     wil_err(wil, "spurious IRQ: TX\n");
8996     + wil6210_unmask_irq_tx_edma(wil);
8997     return IRQ_NONE;
8998     }
8999    
9000     - wil6210_mask_irq_tx_edma(wil);
9001     -
9002     if (likely(isr & BIT_TX_STATUS_IRQ)) {
9003     wil_dbg_irq(wil, "TX status ring\n");
9004     isr &= ~BIT_TX_STATUS_IRQ;
9005     @@ -446,21 +455,24 @@ static irqreturn_t wil6210_irq_tx_edma(int irq, void *cookie)
9006     static irqreturn_t wil6210_irq_tx(int irq, void *cookie)
9007     {
9008     struct wil6210_priv *wil = cookie;
9009     - u32 isr = wil_ioread32_and_clear(wil->csr +
9010     - HOSTADDR(RGF_DMA_EP_TX_ICR) +
9011     - offsetof(struct RGF_ICR, ICR));
9012     + u32 isr;
9013     bool need_unmask = true;
9014    
9015     + wil6210_mask_irq_tx(wil);
9016     +
9017     + isr = wil_ioread32_and_clear(wil->csr +
9018     + HOSTADDR(RGF_DMA_EP_TX_ICR) +
9019     + offsetof(struct RGF_ICR, ICR));
9020     +
9021     trace_wil6210_irq_tx(isr);
9022     wil_dbg_irq(wil, "ISR TX 0x%08x\n", isr);
9023    
9024     if (unlikely(!isr)) {
9025     wil_err_ratelimited(wil, "spurious IRQ: TX\n");
9026     + wil6210_unmask_irq_tx(wil);
9027     return IRQ_NONE;
9028     }
9029    
9030     - wil6210_mask_irq_tx(wil);
9031     -
9032     if (likely(isr & BIT_DMA_EP_TX_ICR_TX_DONE)) {
9033     wil_dbg_irq(wil, "TX done\n");
9034     isr &= ~BIT_DMA_EP_TX_ICR_TX_DONE;
9035     @@ -532,20 +544,23 @@ static bool wil_validate_mbox_regs(struct wil6210_priv *wil)
9036     static irqreturn_t wil6210_irq_misc(int irq, void *cookie)
9037     {
9038     struct wil6210_priv *wil = cookie;
9039     - u32 isr = wil_ioread32_and_clear(wil->csr +
9040     - HOSTADDR(RGF_DMA_EP_MISC_ICR) +
9041     - offsetof(struct RGF_ICR, ICR));
9042     + u32 isr;
9043     +
9044     + wil6210_mask_irq_misc(wil, false);
9045     +
9046     + isr = wil_ioread32_and_clear(wil->csr +
9047     + HOSTADDR(RGF_DMA_EP_MISC_ICR) +
9048     + offsetof(struct RGF_ICR, ICR));
9049    
9050     trace_wil6210_irq_misc(isr);
9051     wil_dbg_irq(wil, "ISR MISC 0x%08x\n", isr);
9052    
9053     if (!isr) {
9054     wil_err(wil, "spurious IRQ: MISC\n");
9055     + wil6210_unmask_irq_misc(wil, false);
9056     return IRQ_NONE;
9057     }
9058    
9059     - wil6210_mask_irq_misc(wil, false);
9060     -
9061     if (isr & ISR_MISC_FW_ERROR) {
9062     u32 fw_assert_code = wil_r(wil, wil->rgf_fw_assert_code_addr);
9063     u32 ucode_assert_code =
9064     diff --git a/drivers/net/wireless/ath/wil6210/txrx.c b/drivers/net/wireless/ath/wil6210/txrx.c
9065     index 75c8aa297107..1b1b58e0129a 100644
9066     --- a/drivers/net/wireless/ath/wil6210/txrx.c
9067     +++ b/drivers/net/wireless/ath/wil6210/txrx.c
9068     @@ -736,6 +736,7 @@ void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev)
9069     [GRO_HELD] = "GRO_HELD",
9070     [GRO_NORMAL] = "GRO_NORMAL",
9071     [GRO_DROP] = "GRO_DROP",
9072     + [GRO_CONSUMED] = "GRO_CONSUMED",
9073     };
9074    
9075     wil->txrx_ops.get_netif_rx_params(skb, &cid, &security);
9076     diff --git a/drivers/net/wireless/ath/wil6210/wmi.c b/drivers/net/wireless/ath/wil6210/wmi.c
9077     index 6e3b3031f29b..2010f771478d 100644
9078     --- a/drivers/net/wireless/ath/wil6210/wmi.c
9079     +++ b/drivers/net/wireless/ath/wil6210/wmi.c
9080     @@ -2816,7 +2816,18 @@ static void wmi_event_handle(struct wil6210_priv *wil,
9081     /* check if someone waits for this event */
9082     if (wil->reply_id && wil->reply_id == id &&
9083     wil->reply_mid == mid) {
9084     - WARN_ON(wil->reply_buf);
9085     + if (wil->reply_buf) {
9086     + /* event received while wmi_call is waiting
9087     + * with a buffer. Such event should be handled
9088     + * in wmi_recv_cmd function. Handling the event
9089     + * here means a previous wmi_call was timeout.
9090     + * Drop the event and do not handle it.
9091     + */
9092     + wil_err(wil,
9093     + "Old event (%d, %s) while wmi_call is waiting. Drop it and Continue waiting\n",
9094     + id, eventid2name(id));
9095     + return;
9096     + }
9097    
9098     wmi_evt_call_handler(vif, id, evt_data,
9099     len - sizeof(*wmi));
9100     diff --git a/drivers/net/wireless/intel/iwlwifi/fw/smem.c b/drivers/net/wireless/intel/iwlwifi/fw/smem.c
9101     index ff85d69c2a8c..557ee47bffd8 100644
9102     --- a/drivers/net/wireless/intel/iwlwifi/fw/smem.c
9103     +++ b/drivers/net/wireless/intel/iwlwifi/fw/smem.c
9104     @@ -8,7 +8,7 @@
9105     * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
9106     * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
9107     * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
9108     - * Copyright(c) 2018 Intel Corporation
9109     + * Copyright(c) 2018 - 2019 Intel Corporation
9110     *
9111     * This program is free software; you can redistribute it and/or modify
9112     * it under the terms of version 2 of the GNU General Public License as
9113     @@ -31,7 +31,7 @@
9114     * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
9115     * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
9116     * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
9117     - * Copyright(c) 2018 Intel Corporation
9118     + * Copyright(c) 2018 - 2019 Intel Corporation
9119     * All rights reserved.
9120     *
9121     * Redistribution and use in source and binary forms, with or without
9122     @@ -134,6 +134,7 @@ void iwl_get_shared_mem_conf(struct iwl_fw_runtime *fwrt)
9123     .len = { 0, },
9124     };
9125     struct iwl_rx_packet *pkt;
9126     + int ret;
9127    
9128     if (fw_has_capa(&fwrt->fw->ucode_capa,
9129     IWL_UCODE_TLV_CAPA_EXTEND_SHARED_MEM_CFG))
9130     @@ -141,8 +142,13 @@ void iwl_get_shared_mem_conf(struct iwl_fw_runtime *fwrt)
9131     else
9132     cmd.id = SHARED_MEM_CFG;
9133    
9134     - if (WARN_ON(iwl_trans_send_cmd(fwrt->trans, &cmd)))
9135     + ret = iwl_trans_send_cmd(fwrt->trans, &cmd);
9136     +
9137     + if (ret) {
9138     + WARN(ret != -ERFKILL,
9139     + "Could not send the SMEM command: %d\n", ret);
9140     return;
9141     + }
9142    
9143     pkt = cmd.resp_pkt;
9144     if (fwrt->trans->cfg->device_family >= IWL_DEVICE_FAMILY_22000)
9145     diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
9146     index 2d21f0a1fa00..ffae299c3492 100644
9147     --- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
9148     +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
9149     @@ -641,6 +641,9 @@ int iwl_mvm_tx_skb_non_sta(struct iwl_mvm *mvm, struct sk_buff *skb)
9150    
9151     memcpy(&info, skb->cb, sizeof(info));
9152    
9153     + if (WARN_ON_ONCE(skb->len > IEEE80211_MAX_DATA_LEN + hdrlen))
9154     + return -1;
9155     +
9156     if (WARN_ON_ONCE(info.flags & IEEE80211_TX_CTL_AMPDU))
9157     return -1;
9158    
9159     diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c b/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c
9160     index 2146fda8da2f..64d976d872b8 100644
9161     --- a/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c
9162     +++ b/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c
9163     @@ -164,7 +164,7 @@ int iwl_pcie_ctxt_info_gen3_init(struct iwl_trans *trans,
9164    
9165     memcpy(iml_img, trans->iml, trans->iml_len);
9166    
9167     - iwl_enable_interrupts(trans);
9168     + iwl_enable_fw_load_int_ctx_info(trans);
9169    
9170     /* kick FW self load */
9171     iwl_write64(trans, CSR_CTXT_INFO_ADDR,
9172     diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info.c b/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info.c
9173     index b2cd7ef5fc3a..6f25fd1bbd8f 100644
9174     --- a/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info.c
9175     +++ b/drivers/net/wireless/intel/iwlwifi/pcie/ctxt-info.c
9176     @@ -206,7 +206,7 @@ int iwl_pcie_ctxt_info_init(struct iwl_trans *trans,
9177    
9178     trans_pcie->ctxt_info = ctxt_info;
9179    
9180     - iwl_enable_interrupts(trans);
9181     + iwl_enable_fw_load_int_ctx_info(trans);
9182    
9183     /* Configure debug, if exists */
9184     if (trans->dbg_dest_tlv)
9185     diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
9186     index b63d44b7cd7c..00f9566bcc21 100644
9187     --- a/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
9188     +++ b/drivers/net/wireless/intel/iwlwifi/pcie/internal.h
9189     @@ -896,6 +896,33 @@ static inline void iwl_enable_fw_load_int(struct iwl_trans *trans)
9190     }
9191     }
9192    
9193     +static inline void iwl_enable_fw_load_int_ctx_info(struct iwl_trans *trans)
9194     +{
9195     + struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
9196     +
9197     + IWL_DEBUG_ISR(trans, "Enabling ALIVE interrupt only\n");
9198     +
9199     + if (!trans_pcie->msix_enabled) {
9200     + /*
9201     + * When we'll receive the ALIVE interrupt, the ISR will call
9202     + * iwl_enable_fw_load_int_ctx_info again to set the ALIVE
9203     + * interrupt (which is not really needed anymore) but also the
9204     + * RX interrupt which will allow us to receive the ALIVE
9205     + * notification (which is Rx) and continue the flow.
9206     + */
9207     + trans_pcie->inta_mask = CSR_INT_BIT_ALIVE | CSR_INT_BIT_FH_RX;
9208     + iwl_write32(trans, CSR_INT_MASK, trans_pcie->inta_mask);
9209     + } else {
9210     + iwl_enable_hw_int_msk_msix(trans,
9211     + MSIX_HW_INT_CAUSES_REG_ALIVE);
9212     + /*
9213     + * Leave all the FH causes enabled to get the ALIVE
9214     + * notification.
9215     + */
9216     + iwl_enable_fh_int_msk_msix(trans, trans_pcie->fh_init_mask);
9217     + }
9218     +}
9219     +
9220     static inline u16 iwl_pcie_get_cmd_index(const struct iwl_txq *q, u32 index)
9221     {
9222     return index & (q->n_window - 1);
9223     diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
9224     index 6dcd5374d9b4..1d144985ea58 100644
9225     --- a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
9226     +++ b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c
9227     @@ -1778,26 +1778,26 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)
9228     goto out;
9229     }
9230    
9231     - if (iwl_have_debug_level(IWL_DL_ISR)) {
9232     - /* NIC fires this, but we don't use it, redundant with WAKEUP */
9233     - if (inta & CSR_INT_BIT_SCD) {
9234     - IWL_DEBUG_ISR(trans,
9235     - "Scheduler finished to transmit the frame/frames.\n");
9236     - isr_stats->sch++;
9237     - }
9238     + /* NIC fires this, but we don't use it, redundant with WAKEUP */
9239     + if (inta & CSR_INT_BIT_SCD) {
9240     + IWL_DEBUG_ISR(trans,
9241     + "Scheduler finished to transmit the frame/frames.\n");
9242     + isr_stats->sch++;
9243     + }
9244    
9245     - /* Alive notification via Rx interrupt will do the real work */
9246     - if (inta & CSR_INT_BIT_ALIVE) {
9247     - IWL_DEBUG_ISR(trans, "Alive interrupt\n");
9248     - isr_stats->alive++;
9249     - if (trans->cfg->gen2) {
9250     - /*
9251     - * We can restock, since firmware configured
9252     - * the RFH
9253     - */
9254     - iwl_pcie_rxmq_restock(trans, trans_pcie->rxq);
9255     - }
9256     + /* Alive notification via Rx interrupt will do the real work */
9257     + if (inta & CSR_INT_BIT_ALIVE) {
9258     + IWL_DEBUG_ISR(trans, "Alive interrupt\n");
9259     + isr_stats->alive++;
9260     + if (trans->cfg->gen2) {
9261     + /*
9262     + * We can restock, since firmware configured
9263     + * the RFH
9264     + */
9265     + iwl_pcie_rxmq_restock(trans, trans_pcie->rxq);
9266     }
9267     +
9268     + handled |= CSR_INT_BIT_ALIVE;
9269     }
9270    
9271     /* Safely ignore these bits for debug checks below */
9272     @@ -1916,6 +1916,9 @@ irqreturn_t iwl_pcie_irq_handler(int irq, void *dev_id)
9273     /* Re-enable RF_KILL if it occurred */
9274     else if (handled & CSR_INT_BIT_RF_KILL)
9275     iwl_enable_rfkill_int(trans);
9276     + /* Re-enable the ALIVE / Rx interrupt if it occurred */
9277     + else if (handled & (CSR_INT_BIT_ALIVE | CSR_INT_BIT_FH_RX))
9278     + iwl_enable_fw_load_int_ctx_info(trans);
9279     spin_unlock(&trans_pcie->irq_lock);
9280    
9281     out:
9282     @@ -2060,10 +2063,18 @@ irqreturn_t iwl_pcie_irq_msix_handler(int irq, void *dev_id)
9283     return IRQ_NONE;
9284     }
9285    
9286     - if (iwl_have_debug_level(IWL_DL_ISR))
9287     - IWL_DEBUG_ISR(trans, "ISR inta_fh 0x%08x, enabled 0x%08x\n",
9288     - inta_fh,
9289     + if (iwl_have_debug_level(IWL_DL_ISR)) {
9290     + IWL_DEBUG_ISR(trans,
9291     + "ISR inta_fh 0x%08x, enabled (sw) 0x%08x (hw) 0x%08x\n",
9292     + inta_fh, trans_pcie->fh_mask,
9293     iwl_read32(trans, CSR_MSIX_FH_INT_MASK_AD));
9294     + if (inta_fh & ~trans_pcie->fh_mask)
9295     + IWL_DEBUG_ISR(trans,
9296     + "We got a masked interrupt (0x%08x)\n",
9297     + inta_fh & ~trans_pcie->fh_mask);
9298     + }
9299     +
9300     + inta_fh &= trans_pcie->fh_mask;
9301    
9302     if ((trans_pcie->shared_vec_mask & IWL_SHARED_IRQ_NON_RX) &&
9303     inta_fh & MSIX_FH_INT_CAUSES_Q0) {
9304     @@ -2103,11 +2114,18 @@ irqreturn_t iwl_pcie_irq_msix_handler(int irq, void *dev_id)
9305     }
9306    
9307     /* After checking FH register check HW register */
9308     - if (iwl_have_debug_level(IWL_DL_ISR))
9309     + if (iwl_have_debug_level(IWL_DL_ISR)) {
9310     IWL_DEBUG_ISR(trans,
9311     - "ISR inta_hw 0x%08x, enabled 0x%08x\n",
9312     - inta_hw,
9313     + "ISR inta_hw 0x%08x, enabled (sw) 0x%08x (hw) 0x%08x\n",
9314     + inta_hw, trans_pcie->hw_mask,
9315     iwl_read32(trans, CSR_MSIX_HW_INT_MASK_AD));
9316     + if (inta_hw & ~trans_pcie->hw_mask)
9317     + IWL_DEBUG_ISR(trans,
9318     + "We got a masked interrupt 0x%08x\n",
9319     + inta_hw & ~trans_pcie->hw_mask);
9320     + }
9321     +
9322     + inta_hw &= trans_pcie->hw_mask;
9323    
9324     /* Alive notification via Rx interrupt will do the real work */
9325     if (inta_hw & MSIX_HW_INT_CAUSES_REG_ALIVE) {
9326     diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c b/drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c
9327     index 2bc67219ed3e..31e72e1ff1e2 100644
9328     --- a/drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c
9329     +++ b/drivers/net/wireless/intel/iwlwifi/pcie/trans-gen2.c
9330     @@ -289,6 +289,15 @@ void iwl_trans_pcie_gen2_fw_alive(struct iwl_trans *trans, u32 scd_addr)
9331     * paging memory cannot be freed included since FW will still use it
9332     */
9333     iwl_pcie_ctxt_info_free(trans);
9334     +
9335     + /*
9336     + * Re-enable all the interrupts, including the RF-Kill one, now that
9337     + * the firmware is alive.
9338     + */
9339     + iwl_enable_interrupts(trans);
9340     + mutex_lock(&trans_pcie->mutex);
9341     + iwl_pcie_check_hw_rf_kill(trans);
9342     + mutex_unlock(&trans_pcie->mutex);
9343     }
9344    
9345     int iwl_trans_pcie_gen2_start_fw(struct iwl_trans *trans,
9346     diff --git a/drivers/net/wireless/mediatek/mt7601u/dma.c b/drivers/net/wireless/mediatek/mt7601u/dma.c
9347     index 7f3e3983b781..47cebb2ec05c 100644
9348     --- a/drivers/net/wireless/mediatek/mt7601u/dma.c
9349     +++ b/drivers/net/wireless/mediatek/mt7601u/dma.c
9350     @@ -193,10 +193,23 @@ static void mt7601u_complete_rx(struct urb *urb)
9351     struct mt7601u_rx_queue *q = &dev->rx_q;
9352     unsigned long flags;
9353    
9354     - spin_lock_irqsave(&dev->rx_lock, flags);
9355     + /* do no schedule rx tasklet if urb has been unlinked
9356     + * or the device has been removed
9357     + */
9358     + switch (urb->status) {
9359     + case -ECONNRESET:
9360     + case -ESHUTDOWN:
9361     + case -ENOENT:
9362     + return;
9363     + default:
9364     + dev_err_ratelimited(dev->dev, "rx urb failed: %d\n",
9365     + urb->status);
9366     + /* fall through */
9367     + case 0:
9368     + break;
9369     + }
9370    
9371     - if (mt7601u_urb_has_error(urb))
9372     - dev_err(dev->dev, "Error: RX urb failed:%d\n", urb->status);
9373     + spin_lock_irqsave(&dev->rx_lock, flags);
9374     if (WARN_ONCE(q->e[q->end].urb != urb, "RX urb mismatch"))
9375     goto out;
9376    
9377     @@ -228,14 +241,25 @@ static void mt7601u_complete_tx(struct urb *urb)
9378     struct sk_buff *skb;
9379     unsigned long flags;
9380    
9381     - spin_lock_irqsave(&dev->tx_lock, flags);
9382     + switch (urb->status) {
9383     + case -ECONNRESET:
9384     + case -ESHUTDOWN:
9385     + case -ENOENT:
9386     + return;
9387     + default:
9388     + dev_err_ratelimited(dev->dev, "tx urb failed: %d\n",
9389     + urb->status);
9390     + /* fall through */
9391     + case 0:
9392     + break;
9393     + }
9394    
9395     - if (mt7601u_urb_has_error(urb))
9396     - dev_err(dev->dev, "Error: TX urb failed:%d\n", urb->status);
9397     + spin_lock_irqsave(&dev->tx_lock, flags);
9398     if (WARN_ONCE(q->e[q->start].urb != urb, "TX urb mismatch"))
9399     goto out;
9400    
9401     skb = q->e[q->start].skb;
9402     + q->e[q->start].skb = NULL;
9403     trace_mt_tx_dma_done(dev, skb);
9404    
9405     __skb_queue_tail(&dev->tx_skb_done, skb);
9406     @@ -363,19 +387,9 @@ int mt7601u_dma_enqueue_tx(struct mt7601u_dev *dev, struct sk_buff *skb,
9407     static void mt7601u_kill_rx(struct mt7601u_dev *dev)
9408     {
9409     int i;
9410     - unsigned long flags;
9411     -
9412     - spin_lock_irqsave(&dev->rx_lock, flags);
9413     -
9414     - for (i = 0; i < dev->rx_q.entries; i++) {
9415     - int next = dev->rx_q.end;
9416    
9417     - spin_unlock_irqrestore(&dev->rx_lock, flags);
9418     - usb_poison_urb(dev->rx_q.e[next].urb);
9419     - spin_lock_irqsave(&dev->rx_lock, flags);
9420     - }
9421     -
9422     - spin_unlock_irqrestore(&dev->rx_lock, flags);
9423     + for (i = 0; i < dev->rx_q.entries; i++)
9424     + usb_poison_urb(dev->rx_q.e[i].urb);
9425     }
9426    
9427     static int mt7601u_submit_rx_buf(struct mt7601u_dev *dev,
9428     @@ -445,10 +459,10 @@ static void mt7601u_free_tx_queue(struct mt7601u_tx_queue *q)
9429     {
9430     int i;
9431    
9432     - WARN_ON(q->used);
9433     -
9434     for (i = 0; i < q->entries; i++) {
9435     usb_poison_urb(q->e[i].urb);
9436     + if (q->e[i].skb)
9437     + mt7601u_tx_status(q->dev, q->e[i].skb);
9438     usb_free_urb(q->e[i].urb);
9439     }
9440     }
9441     diff --git a/drivers/net/wireless/mediatek/mt7601u/tx.c b/drivers/net/wireless/mediatek/mt7601u/tx.c
9442     index 3600e911a63e..4d81c45722fb 100644
9443     --- a/drivers/net/wireless/mediatek/mt7601u/tx.c
9444     +++ b/drivers/net/wireless/mediatek/mt7601u/tx.c
9445     @@ -117,9 +117,9 @@ void mt7601u_tx_status(struct mt7601u_dev *dev, struct sk_buff *skb)
9446     info->status.rates[0].idx = -1;
9447     info->flags |= IEEE80211_TX_STAT_ACK;
9448    
9449     - spin_lock(&dev->mac_lock);
9450     + spin_lock_bh(&dev->mac_lock);
9451     ieee80211_tx_status(dev->hw, skb);
9452     - spin_unlock(&dev->mac_lock);
9453     + spin_unlock_bh(&dev->mac_lock);
9454     }
9455    
9456     static int mt7601u_skb_rooms(struct mt7601u_dev *dev, struct sk_buff *skb)
9457     diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.c b/drivers/net/wireless/realtek/rtlwifi/usb.c
9458     index 2ac5004d7a40..5adb939afee8 100644
9459     --- a/drivers/net/wireless/realtek/rtlwifi/usb.c
9460     +++ b/drivers/net/wireless/realtek/rtlwifi/usb.c
9461     @@ -1081,13 +1081,13 @@ int rtl_usb_probe(struct usb_interface *intf,
9462     rtlpriv->cfg->ops->read_eeprom_info(hw);
9463     err = _rtl_usb_init(hw);
9464     if (err)
9465     - goto error_out;
9466     + goto error_out2;
9467     rtl_usb_init_sw(hw);
9468     /* Init mac80211 sw */
9469     err = rtl_init_core(hw);
9470     if (err) {
9471     pr_err("Can't allocate sw for mac80211\n");
9472     - goto error_out;
9473     + goto error_out2;
9474     }
9475     if (rtlpriv->cfg->ops->init_sw_vars(hw)) {
9476     pr_err("Can't init_sw_vars\n");
9477     @@ -1108,6 +1108,7 @@ int rtl_usb_probe(struct usb_interface *intf,
9478    
9479     error_out:
9480     rtl_deinit_core(hw);
9481     +error_out2:
9482     _rtl_usb_io_handler_release(hw);
9483     usb_put_dev(udev);
9484     complete(&rtlpriv->firmware_loading_complete);
9485     diff --git a/drivers/nvdimm/dax_devs.c b/drivers/nvdimm/dax_devs.c
9486     index 0453f49dc708..326f02ffca81 100644
9487     --- a/drivers/nvdimm/dax_devs.c
9488     +++ b/drivers/nvdimm/dax_devs.c
9489     @@ -126,7 +126,7 @@ int nd_dax_probe(struct device *dev, struct nd_namespace_common *ndns)
9490     nvdimm_bus_unlock(&ndns->dev);
9491     if (!dax_dev)
9492     return -ENOMEM;
9493     - pfn_sb = devm_kzalloc(dev, sizeof(*pfn_sb), GFP_KERNEL);
9494     + pfn_sb = devm_kmalloc(dev, sizeof(*pfn_sb), GFP_KERNEL);
9495     nd_pfn->pfn_sb = pfn_sb;
9496     rc = nd_pfn_validate(nd_pfn, DAX_SIG);
9497     dev_dbg(dev, "dax: %s\n", rc == 0 ? dev_name(dax_dev) : "<none>");
9498     diff --git a/drivers/nvdimm/pfn.h b/drivers/nvdimm/pfn.h
9499     index dde9853453d3..e901e3a3b04c 100644
9500     --- a/drivers/nvdimm/pfn.h
9501     +++ b/drivers/nvdimm/pfn.h
9502     @@ -36,6 +36,7 @@ struct nd_pfn_sb {
9503     __le32 end_trunc;
9504     /* minor-version-2 record the base alignment of the mapping */
9505     __le32 align;
9506     + /* minor-version-3 guarantee the padding and flags are zero */
9507     u8 padding[4000];
9508     __le64 checksum;
9509     };
9510     diff --git a/drivers/nvdimm/pfn_devs.c b/drivers/nvdimm/pfn_devs.c
9511     index 3ee995a3bfc9..86ed09b2a192 100644
9512     --- a/drivers/nvdimm/pfn_devs.c
9513     +++ b/drivers/nvdimm/pfn_devs.c
9514     @@ -361,6 +361,15 @@ struct device *nd_pfn_create(struct nd_region *nd_region)
9515     return dev;
9516     }
9517    
9518     +/**
9519     + * nd_pfn_validate - read and validate info-block
9520     + * @nd_pfn: fsdax namespace runtime state / properties
9521     + * @sig: 'devdax' or 'fsdax' signature
9522     + *
9523     + * Upon return the info-block buffer contents (->pfn_sb) are
9524     + * indeterminate when validation fails, and a coherent info-block
9525     + * otherwise.
9526     + */
9527     int nd_pfn_validate(struct nd_pfn *nd_pfn, const char *sig)
9528     {
9529     u64 checksum, offset;
9530     @@ -506,7 +515,7 @@ int nd_pfn_probe(struct device *dev, struct nd_namespace_common *ndns)
9531     nvdimm_bus_unlock(&ndns->dev);
9532     if (!pfn_dev)
9533     return -ENOMEM;
9534     - pfn_sb = devm_kzalloc(dev, sizeof(*pfn_sb), GFP_KERNEL);
9535     + pfn_sb = devm_kmalloc(dev, sizeof(*pfn_sb), GFP_KERNEL);
9536     nd_pfn = to_nd_pfn(pfn_dev);
9537     nd_pfn->pfn_sb = pfn_sb;
9538     rc = nd_pfn_validate(nd_pfn, PFN_SIG);
9539     @@ -638,7 +647,7 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
9540     u64 checksum;
9541     int rc;
9542    
9543     - pfn_sb = devm_kzalloc(&nd_pfn->dev, sizeof(*pfn_sb), GFP_KERNEL);
9544     + pfn_sb = devm_kmalloc(&nd_pfn->dev, sizeof(*pfn_sb), GFP_KERNEL);
9545     if (!pfn_sb)
9546     return -ENOMEM;
9547    
9548     @@ -647,11 +656,14 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
9549     sig = DAX_SIG;
9550     else
9551     sig = PFN_SIG;
9552     +
9553     rc = nd_pfn_validate(nd_pfn, sig);
9554     if (rc != -ENODEV)
9555     return rc;
9556    
9557     /* no info block, do init */;
9558     + memset(pfn_sb, 0, sizeof(*pfn_sb));
9559     +
9560     nd_region = to_nd_region(nd_pfn->dev.parent);
9561     if (nd_region->ro) {
9562     dev_info(&nd_pfn->dev,
9563     @@ -705,7 +717,7 @@ static int nd_pfn_init(struct nd_pfn *nd_pfn)
9564     memcpy(pfn_sb->uuid, nd_pfn->uuid, 16);
9565     memcpy(pfn_sb->parent_uuid, nd_dev_to_uuid(&ndns->dev), 16);
9566     pfn_sb->version_major = cpu_to_le16(1);
9567     - pfn_sb->version_minor = cpu_to_le16(2);
9568     + pfn_sb->version_minor = cpu_to_le16(3);
9569     pfn_sb->start_pad = cpu_to_le32(start_pad);
9570     pfn_sb->end_trunc = cpu_to_le32(end_trunc);
9571     pfn_sb->align = cpu_to_le32(nd_pfn->align);
9572     diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
9573     index d8869d978c34..e26d1191c5ad 100644
9574     --- a/drivers/nvme/host/core.c
9575     +++ b/drivers/nvme/host/core.c
9576     @@ -3168,6 +3168,14 @@ static void nvme_ns_remove(struct nvme_ns *ns)
9577     return;
9578    
9579     nvme_fault_inject_fini(ns);
9580     +
9581     + mutex_lock(&ns->ctrl->subsys->lock);
9582     + list_del_rcu(&ns->siblings);
9583     + mutex_unlock(&ns->ctrl->subsys->lock);
9584     + synchronize_rcu(); /* guarantee not available in head->list */
9585     + nvme_mpath_clear_current_path(ns);
9586     + synchronize_srcu(&ns->head->srcu); /* wait for concurrent submissions */
9587     +
9588     if (ns->disk && ns->disk->flags & GENHD_FL_UP) {
9589     sysfs_remove_group(&disk_to_dev(ns->disk)->kobj,
9590     &nvme_ns_id_attr_group);
9591     @@ -3179,16 +3187,10 @@ static void nvme_ns_remove(struct nvme_ns *ns)
9592     blk_integrity_unregister(ns->disk);
9593     }
9594    
9595     - mutex_lock(&ns->ctrl->subsys->lock);
9596     - list_del_rcu(&ns->siblings);
9597     - nvme_mpath_clear_current_path(ns);
9598     - mutex_unlock(&ns->ctrl->subsys->lock);
9599     -
9600     down_write(&ns->ctrl->namespaces_rwsem);
9601     list_del_init(&ns->list);
9602     up_write(&ns->ctrl->namespaces_rwsem);
9603    
9604     - synchronize_srcu(&ns->head->srcu);
9605     nvme_mpath_check_last_path(ns);
9606     nvme_put_ns(ns);
9607     }
9608     diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
9609     index c8eeecc58115..0a5d064f82ca 100644
9610     --- a/drivers/nvme/host/pci.c
9611     +++ b/drivers/nvme/host/pci.c
9612     @@ -2253,11 +2253,13 @@ static void nvme_reset_work(struct work_struct *work)
9613     struct nvme_dev *dev =
9614     container_of(work, struct nvme_dev, ctrl.reset_work);
9615     bool was_suspend = !!(dev->ctrl.ctrl_config & NVME_CC_SHN_NORMAL);
9616     - int result = -ENODEV;
9617     + int result;
9618     enum nvme_ctrl_state new_state = NVME_CTRL_LIVE;
9619    
9620     - if (WARN_ON(dev->ctrl.state != NVME_CTRL_RESETTING))
9621     + if (WARN_ON(dev->ctrl.state != NVME_CTRL_RESETTING)) {
9622     + result = -ENODEV;
9623     goto out;
9624     + }
9625    
9626     /*
9627     * If we're called to reset a live controller first shut it down before
9628     @@ -2294,6 +2296,7 @@ static void nvme_reset_work(struct work_struct *work)
9629     if (!nvme_change_ctrl_state(&dev->ctrl, NVME_CTRL_CONNECTING)) {
9630     dev_warn(dev->ctrl.device,
9631     "failed to mark controller CONNECTING\n");
9632     + result = -EBUSY;
9633     goto out;
9634     }
9635    
9636     @@ -2354,6 +2357,7 @@ static void nvme_reset_work(struct work_struct *work)
9637     if (!nvme_change_ctrl_state(&dev->ctrl, new_state)) {
9638     dev_warn(dev->ctrl.device,
9639     "failed to mark controller state %d\n", new_state);
9640     + result = -ENODEV;
9641     goto out;
9642     }
9643    
9644     diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
9645     index 4352c1cb926d..87a8887fd4d3 100644
9646     --- a/drivers/pci/controller/dwc/pcie-qcom.c
9647     +++ b/drivers/pci/controller/dwc/pcie-qcom.c
9648     @@ -178,6 +178,8 @@ static void qcom_ep_reset_assert(struct qcom_pcie *pcie)
9649    
9650     static void qcom_ep_reset_deassert(struct qcom_pcie *pcie)
9651     {
9652     + /* Ensure that PERST has been asserted for at least 100 ms */
9653     + msleep(100);
9654     gpiod_set_value_cansleep(pcie->reset, 0);
9655     usleep_range(PERST_DELAY_US, PERST_DELAY_US + 500);
9656     }
9657     diff --git a/drivers/pci/controller/pci-hyperv.c b/drivers/pci/controller/pci-hyperv.c
9658     index 808a182830e5..5dadc964ad3b 100644
9659     --- a/drivers/pci/controller/pci-hyperv.c
9660     +++ b/drivers/pci/controller/pci-hyperv.c
9661     @@ -1880,6 +1880,7 @@ static void hv_pci_devices_present(struct hv_pcibus_device *hbus,
9662     static void hv_eject_device_work(struct work_struct *work)
9663     {
9664     struct pci_eject_response *ejct_pkt;
9665     + struct hv_pcibus_device *hbus;
9666     struct hv_pci_dev *hpdev;
9667     struct pci_dev *pdev;
9668     unsigned long flags;
9669     @@ -1890,6 +1891,7 @@ static void hv_eject_device_work(struct work_struct *work)
9670     } ctxt;
9671    
9672     hpdev = container_of(work, struct hv_pci_dev, wrk);
9673     + hbus = hpdev->hbus;
9674    
9675     WARN_ON(hpdev->state != hv_pcichild_ejecting);
9676    
9677     @@ -1900,8 +1902,7 @@ static void hv_eject_device_work(struct work_struct *work)
9678     * because hbus->pci_bus may not exist yet.
9679     */
9680     wslot = wslot_to_devfn(hpdev->desc.win_slot.slot);
9681     - pdev = pci_get_domain_bus_and_slot(hpdev->hbus->sysdata.domain, 0,
9682     - wslot);
9683     + pdev = pci_get_domain_bus_and_slot(hbus->sysdata.domain, 0, wslot);
9684     if (pdev) {
9685     pci_lock_rescan_remove();
9686     pci_stop_and_remove_bus_device(pdev);
9687     @@ -1909,9 +1910,9 @@ static void hv_eject_device_work(struct work_struct *work)
9688     pci_unlock_rescan_remove();
9689     }
9690    
9691     - spin_lock_irqsave(&hpdev->hbus->device_list_lock, flags);
9692     + spin_lock_irqsave(&hbus->device_list_lock, flags);
9693     list_del(&hpdev->list_entry);
9694     - spin_unlock_irqrestore(&hpdev->hbus->device_list_lock, flags);
9695     + spin_unlock_irqrestore(&hbus->device_list_lock, flags);
9696    
9697     if (hpdev->pci_slot)
9698     pci_destroy_slot(hpdev->pci_slot);
9699     @@ -1920,7 +1921,7 @@ static void hv_eject_device_work(struct work_struct *work)
9700     ejct_pkt = (struct pci_eject_response *)&ctxt.pkt.message;
9701     ejct_pkt->message_type.type = PCI_EJECTION_COMPLETE;
9702     ejct_pkt->wslot.slot = hpdev->desc.win_slot.slot;
9703     - vmbus_sendpacket(hpdev->hbus->hdev->channel, ejct_pkt,
9704     + vmbus_sendpacket(hbus->hdev->channel, ejct_pkt,
9705     sizeof(*ejct_pkt), (unsigned long)&ctxt.pkt,
9706     VM_PKT_DATA_INBAND, 0);
9707    
9708     @@ -1929,7 +1930,9 @@ static void hv_eject_device_work(struct work_struct *work)
9709     /* For the two refs got in new_pcichild_device() */
9710     put_pcichild(hpdev);
9711     put_pcichild(hpdev);
9712     - put_hvpcibus(hpdev->hbus);
9713     + /* hpdev has been freed. Do not use it any more. */
9714     +
9715     + put_hvpcibus(hbus);
9716     }
9717    
9718     /**
9719     diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
9720     index 61f2ef28ea1c..c65465385d8c 100644
9721     --- a/drivers/pci/pci.c
9722     +++ b/drivers/pci/pci.c
9723     @@ -2004,6 +2004,13 @@ static void pci_pme_list_scan(struct work_struct *work)
9724     */
9725     if (bridge && bridge->current_state != PCI_D0)
9726     continue;
9727     + /*
9728     + * If the device is in D3cold it should not be
9729     + * polled either.
9730     + */
9731     + if (pme_dev->dev->current_state == PCI_D3cold)
9732     + continue;
9733     +
9734     pci_pme_wakeup(pme_dev->dev, NULL);
9735     } else {
9736     list_del(&pme_dev->list);
9737     diff --git a/drivers/ras/cec.c b/drivers/ras/cec.c
9738     index f85d6b7a1984..5d2b2c02cbbe 100644
9739     --- a/drivers/ras/cec.c
9740     +++ b/drivers/ras/cec.c
9741     @@ -369,7 +369,9 @@ static int pfn_set(void *data, u64 val)
9742     {
9743     *(u64 *)data = val;
9744    
9745     - return cec_add_elem(val);
9746     + cec_add_elem(val);
9747     +
9748     + return 0;
9749     }
9750    
9751     DEFINE_DEBUGFS_ATTRIBUTE(pfn_ops, u64_get, pfn_set, "0x%llx\n");
9752     diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
9753     index c584bd1ffa9c..7c598c156d9e 100644
9754     --- a/drivers/regulator/s2mps11.c
9755     +++ b/drivers/regulator/s2mps11.c
9756     @@ -373,8 +373,8 @@ static const struct regulator_desc s2mps11_regulators[] = {
9757     regulator_desc_s2mps11_buck1_4(4),
9758     regulator_desc_s2mps11_buck5,
9759     regulator_desc_s2mps11_buck67810(6, MIN_600_MV, STEP_6_25_MV),
9760     - regulator_desc_s2mps11_buck67810(7, MIN_600_MV, STEP_12_5_MV),
9761     - regulator_desc_s2mps11_buck67810(8, MIN_600_MV, STEP_12_5_MV),
9762     + regulator_desc_s2mps11_buck67810(7, MIN_750_MV, STEP_12_5_MV),
9763     + regulator_desc_s2mps11_buck67810(8, MIN_750_MV, STEP_12_5_MV),
9764     regulator_desc_s2mps11_buck9,
9765     regulator_desc_s2mps11_buck67810(10, MIN_750_MV, STEP_12_5_MV),
9766     };
9767     diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c
9768     index 9c7d9da42ba0..4ac4a73037f5 100644
9769     --- a/drivers/s390/cio/qdio_main.c
9770     +++ b/drivers/s390/cio/qdio_main.c
9771     @@ -749,6 +749,7 @@ static int get_outbound_buffer_frontier(struct qdio_q *q)
9772    
9773     switch (state) {
9774     case SLSB_P_OUTPUT_EMPTY:
9775     + case SLSB_P_OUTPUT_PENDING:
9776     /* the adapter got it */
9777     DBF_DEV_EVENT(DBF_INFO, q->irq_ptr,
9778     "out empty:%1d %02x", q->nr, count);
9779     diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c
9780     index 90ea0f5d9bdb..5160d6214a36 100644
9781     --- a/drivers/scsi/NCR5380.c
9782     +++ b/drivers/scsi/NCR5380.c
9783     @@ -710,6 +710,8 @@ static void NCR5380_main(struct work_struct *work)
9784     NCR5380_information_transfer(instance);
9785     done = 0;
9786     }
9787     + if (!hostdata->connected)
9788     + NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
9789     spin_unlock_irq(&hostdata->lock);
9790     if (!done)
9791     cond_resched();
9792     @@ -984,7 +986,7 @@ static struct scsi_cmnd *NCR5380_select(struct Scsi_Host *instance,
9793     if (!hostdata->selecting) {
9794     /* Command was aborted */
9795     NCR5380_write(MODE_REG, MR_BASE);
9796     - goto out;
9797     + return NULL;
9798     }
9799     if (err < 0) {
9800     NCR5380_write(MODE_REG, MR_BASE);
9801     @@ -1033,7 +1035,7 @@ static struct scsi_cmnd *NCR5380_select(struct Scsi_Host *instance,
9802     if (!hostdata->selecting) {
9803     NCR5380_write(MODE_REG, MR_BASE);
9804     NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
9805     - goto out;
9806     + return NULL;
9807     }
9808    
9809     dsprintk(NDEBUG_ARBITRATION, instance, "won arbitration\n");
9810     @@ -1106,8 +1108,6 @@ static struct scsi_cmnd *NCR5380_select(struct Scsi_Host *instance,
9811     spin_lock_irq(&hostdata->lock);
9812     NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
9813     NCR5380_reselect(instance);
9814     - if (!hostdata->connected)
9815     - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
9816     shost_printk(KERN_ERR, instance, "reselection after won arbitration?\n");
9817     goto out;
9818     }
9819     @@ -1115,14 +1115,16 @@ static struct scsi_cmnd *NCR5380_select(struct Scsi_Host *instance,
9820     if (err < 0) {
9821     spin_lock_irq(&hostdata->lock);
9822     NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
9823     - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
9824     +
9825     /* Can't touch cmd if it has been reclaimed by the scsi ML */
9826     - if (hostdata->selecting) {
9827     - cmd->result = DID_BAD_TARGET << 16;
9828     - complete_cmd(instance, cmd);
9829     - dsprintk(NDEBUG_SELECTION, instance, "target did not respond within 250ms\n");
9830     - cmd = NULL;
9831     - }
9832     + if (!hostdata->selecting)
9833     + return NULL;
9834     +
9835     + cmd->result = DID_BAD_TARGET << 16;
9836     + complete_cmd(instance, cmd);
9837     + dsprintk(NDEBUG_SELECTION, instance,
9838     + "target did not respond within 250ms\n");
9839     + cmd = NULL;
9840     goto out;
9841     }
9842    
9843     @@ -1150,12 +1152,11 @@ static struct scsi_cmnd *NCR5380_select(struct Scsi_Host *instance,
9844     if (err < 0) {
9845     shost_printk(KERN_ERR, instance, "select: REQ timeout\n");
9846     NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE);
9847     - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
9848     goto out;
9849     }
9850     if (!hostdata->selecting) {
9851     do_abort(instance);
9852     - goto out;
9853     + return NULL;
9854     }
9855    
9856     dsprintk(NDEBUG_SELECTION, instance, "target %d selected, going into MESSAGE OUT phase.\n",
9857     @@ -1817,9 +1818,6 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
9858     */
9859     NCR5380_write(TARGET_COMMAND_REG, 0);
9860    
9861     - /* Enable reselect interrupts */
9862     - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
9863     -
9864     maybe_release_dma_irq(instance);
9865     return;
9866     case MESSAGE_REJECT:
9867     @@ -1851,8 +1849,6 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
9868     */
9869     NCR5380_write(TARGET_COMMAND_REG, 0);
9870    
9871     - /* Enable reselect interrupts */
9872     - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
9873     #ifdef SUN3_SCSI_VME
9874     dregs->csr |= CSR_DMA_ENABLE;
9875     #endif
9876     @@ -1954,7 +1950,6 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
9877     cmd->result = DID_ERROR << 16;
9878     complete_cmd(instance, cmd);
9879     maybe_release_dma_irq(instance);
9880     - NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask);
9881     return;
9882     }
9883     msgout = NOP;
9884     diff --git a/drivers/scsi/NCR5380.h b/drivers/scsi/NCR5380.h
9885     index 31096a0b0fdd..8a6d002e6789 100644
9886     --- a/drivers/scsi/NCR5380.h
9887     +++ b/drivers/scsi/NCR5380.h
9888     @@ -235,7 +235,7 @@ struct NCR5380_cmd {
9889     #define NCR5380_PIO_CHUNK_SIZE 256
9890    
9891     /* Time limit (ms) to poll registers when IRQs are disabled, e.g. during PDMA */
9892     -#define NCR5380_REG_POLL_TIME 15
9893     +#define NCR5380_REG_POLL_TIME 10
9894    
9895     static inline struct scsi_cmnd *NCR5380_to_scmd(struct NCR5380_cmd *ncmd_ptr)
9896     {
9897     diff --git a/drivers/scsi/mac_scsi.c b/drivers/scsi/mac_scsi.c
9898     index dd6057359d7c..643321fc152d 100644
9899     --- a/drivers/scsi/mac_scsi.c
9900     +++ b/drivers/scsi/mac_scsi.c
9901     @@ -3,6 +3,8 @@
9902     *
9903     * Copyright 1998, Michael Schmitz <mschmitz@lbl.gov>
9904     *
9905     + * Copyright 2019 Finn Thain
9906     + *
9907     * derived in part from:
9908     */
9909     /*
9910     @@ -11,6 +13,7 @@
9911     * Copyright 1995, Russell King
9912     */
9913    
9914     +#include <linux/delay.h>
9915     #include <linux/types.h>
9916     #include <linux/module.h>
9917     #include <linux/ioport.h>
9918     @@ -52,7 +55,7 @@ static int setup_cmd_per_lun = -1;
9919     module_param(setup_cmd_per_lun, int, 0);
9920     static int setup_sg_tablesize = -1;
9921     module_param(setup_sg_tablesize, int, 0);
9922     -static int setup_use_pdma = -1;
9923     +static int setup_use_pdma = 512;
9924     module_param(setup_use_pdma, int, 0);
9925     static int setup_hostid = -1;
9926     module_param(setup_hostid, int, 0);
9927     @@ -89,101 +92,217 @@ static int __init mac_scsi_setup(char *str)
9928     __setup("mac5380=", mac_scsi_setup);
9929     #endif /* !MODULE */
9930    
9931     -/* Pseudo DMA asm originally by Ove Edlund */
9932     -
9933     -#define CP_IO_TO_MEM(s,d,n) \
9934     -__asm__ __volatile__ \
9935     - (" cmp.w #4,%2\n" \
9936     - " bls 8f\n" \
9937     - " move.w %1,%%d0\n" \
9938     - " neg.b %%d0\n" \
9939     - " and.w #3,%%d0\n" \
9940     - " sub.w %%d0,%2\n" \
9941     - " bra 2f\n" \
9942     - " 1: move.b (%0),(%1)+\n" \
9943     - " 2: dbf %%d0,1b\n" \
9944     - " move.w %2,%%d0\n" \
9945     - " lsr.w #5,%%d0\n" \
9946     - " bra 4f\n" \
9947     - " 3: move.l (%0),(%1)+\n" \
9948     - "31: move.l (%0),(%1)+\n" \
9949     - "32: move.l (%0),(%1)+\n" \
9950     - "33: move.l (%0),(%1)+\n" \
9951     - "34: move.l (%0),(%1)+\n" \
9952     - "35: move.l (%0),(%1)+\n" \
9953     - "36: move.l (%0),(%1)+\n" \
9954     - "37: move.l (%0),(%1)+\n" \
9955     - " 4: dbf %%d0,3b\n" \
9956     - " move.w %2,%%d0\n" \
9957     - " lsr.w #2,%%d0\n" \
9958     - " and.w #7,%%d0\n" \
9959     - " bra 6f\n" \
9960     - " 5: move.l (%0),(%1)+\n" \
9961     - " 6: dbf %%d0,5b\n" \
9962     - " and.w #3,%2\n" \
9963     - " bra 8f\n" \
9964     - " 7: move.b (%0),(%1)+\n" \
9965     - " 8: dbf %2,7b\n" \
9966     - " moveq.l #0, %2\n" \
9967     - " 9: \n" \
9968     - ".section .fixup,\"ax\"\n" \
9969     - " .even\n" \
9970     - "91: moveq.l #1, %2\n" \
9971     - " jra 9b\n" \
9972     - "94: moveq.l #4, %2\n" \
9973     - " jra 9b\n" \
9974     - ".previous\n" \
9975     - ".section __ex_table,\"a\"\n" \
9976     - " .align 4\n" \
9977     - " .long 1b,91b\n" \
9978     - " .long 3b,94b\n" \
9979     - " .long 31b,94b\n" \
9980     - " .long 32b,94b\n" \
9981     - " .long 33b,94b\n" \
9982     - " .long 34b,94b\n" \
9983     - " .long 35b,94b\n" \
9984     - " .long 36b,94b\n" \
9985     - " .long 37b,94b\n" \
9986     - " .long 5b,94b\n" \
9987     - " .long 7b,91b\n" \
9988     - ".previous" \
9989     - : "=a"(s), "=a"(d), "=d"(n) \
9990     - : "0"(s), "1"(d), "2"(n) \
9991     - : "d0")
9992     +/*
9993     + * According to "Inside Macintosh: Devices", Mac OS requires disk drivers to
9994     + * specify the number of bytes between the delays expected from a SCSI target.
9995     + * This allows the operating system to "prevent bus errors when a target fails
9996     + * to deliver the next byte within the processor bus error timeout period."
9997     + * Linux SCSI drivers lack knowledge of the timing behaviour of SCSI targets
9998     + * so bus errors are unavoidable.
9999     + *
10000     + * If a MOVE.B instruction faults, we assume that zero bytes were transferred
10001     + * and simply retry. That assumption probably depends on target behaviour but
10002     + * seems to hold up okay. The NOP provides synchronization: without it the
10003     + * fault can sometimes occur after the program counter has moved past the
10004     + * offending instruction. Post-increment addressing can't be used.
10005     + */
10006     +
10007     +#define MOVE_BYTE(operands) \
10008     + asm volatile ( \
10009     + "1: moveb " operands " \n" \
10010     + "11: nop \n" \
10011     + " addq #1,%0 \n" \
10012     + " subq #1,%1 \n" \
10013     + "40: \n" \
10014     + " \n" \
10015     + ".section .fixup,\"ax\" \n" \
10016     + ".even \n" \
10017     + "90: movel #1, %2 \n" \
10018     + " jra 40b \n" \
10019     + ".previous \n" \
10020     + " \n" \
10021     + ".section __ex_table,\"a\" \n" \
10022     + ".align 4 \n" \
10023     + ".long 1b,90b \n" \
10024     + ".long 11b,90b \n" \
10025     + ".previous \n" \
10026     + : "+a" (addr), "+r" (n), "+r" (result) : "a" (io))
10027     +
10028     +/*
10029     + * If a MOVE.W (or MOVE.L) instruction faults, it cannot be retried because
10030     + * the residual byte count would be uncertain. In that situation the MOVE_WORD
10031     + * macro clears n in the fixup section to abort the transfer.
10032     + */
10033     +
10034     +#define MOVE_WORD(operands) \
10035     + asm volatile ( \
10036     + "1: movew " operands " \n" \
10037     + "11: nop \n" \
10038     + " subq #2,%1 \n" \
10039     + "40: \n" \
10040     + " \n" \
10041     + ".section .fixup,\"ax\" \n" \
10042     + ".even \n" \
10043     + "90: movel #0, %1 \n" \
10044     + " movel #2, %2 \n" \
10045     + " jra 40b \n" \
10046     + ".previous \n" \
10047     + " \n" \
10048     + ".section __ex_table,\"a\" \n" \
10049     + ".align 4 \n" \
10050     + ".long 1b,90b \n" \
10051     + ".long 11b,90b \n" \
10052     + ".previous \n" \
10053     + : "+a" (addr), "+r" (n), "+r" (result) : "a" (io))
10054     +
10055     +#define MOVE_16_WORDS(operands) \
10056     + asm volatile ( \
10057     + "1: movew " operands " \n" \
10058     + "2: movew " operands " \n" \
10059     + "3: movew " operands " \n" \
10060     + "4: movew " operands " \n" \
10061     + "5: movew " operands " \n" \
10062     + "6: movew " operands " \n" \
10063     + "7: movew " operands " \n" \
10064     + "8: movew " operands " \n" \
10065     + "9: movew " operands " \n" \
10066     + "10: movew " operands " \n" \
10067     + "11: movew " operands " \n" \
10068     + "12: movew " operands " \n" \
10069     + "13: movew " operands " \n" \
10070     + "14: movew " operands " \n" \
10071     + "15: movew " operands " \n" \
10072     + "16: movew " operands " \n" \
10073     + "17: nop \n" \
10074     + " subl #32,%1 \n" \
10075     + "40: \n" \
10076     + " \n" \
10077     + ".section .fixup,\"ax\" \n" \
10078     + ".even \n" \
10079     + "90: movel #0, %1 \n" \
10080     + " movel #2, %2 \n" \
10081     + " jra 40b \n" \
10082     + ".previous \n" \
10083     + " \n" \
10084     + ".section __ex_table,\"a\" \n" \
10085     + ".align 4 \n" \
10086     + ".long 1b,90b \n" \
10087     + ".long 2b,90b \n" \
10088     + ".long 3b,90b \n" \
10089     + ".long 4b,90b \n" \
10090     + ".long 5b,90b \n" \
10091     + ".long 6b,90b \n" \
10092     + ".long 7b,90b \n" \
10093     + ".long 8b,90b \n" \
10094     + ".long 9b,90b \n" \
10095     + ".long 10b,90b \n" \
10096     + ".long 11b,90b \n" \
10097     + ".long 12b,90b \n" \
10098     + ".long 13b,90b \n" \
10099     + ".long 14b,90b \n" \
10100     + ".long 15b,90b \n" \
10101     + ".long 16b,90b \n" \
10102     + ".long 17b,90b \n" \
10103     + ".previous \n" \
10104     + : "+a" (addr), "+r" (n), "+r" (result) : "a" (io))
10105     +
10106     +#define MAC_PDMA_DELAY 32
10107     +
10108     +static inline int mac_pdma_recv(void __iomem *io, unsigned char *start, int n)
10109     +{
10110     + unsigned char *addr = start;
10111     + int result = 0;
10112     +
10113     + if (n >= 1) {
10114     + MOVE_BYTE("%3@,%0@");
10115     + if (result)
10116     + goto out;
10117     + }
10118     + if (n >= 1 && ((unsigned long)addr & 1)) {
10119     + MOVE_BYTE("%3@,%0@");
10120     + if (result)
10121     + goto out;
10122     + }
10123     + while (n >= 32)
10124     + MOVE_16_WORDS("%3@,%0@+");
10125     + while (n >= 2)
10126     + MOVE_WORD("%3@,%0@+");
10127     + if (result)
10128     + return start - addr; /* Negated to indicate uncertain length */
10129     + if (n == 1)
10130     + MOVE_BYTE("%3@,%0@");
10131     +out:
10132     + return addr - start;
10133     +}
10134     +
10135     +static inline int mac_pdma_send(unsigned char *start, void __iomem *io, int n)
10136     +{
10137     + unsigned char *addr = start;
10138     + int result = 0;
10139     +
10140     + if (n >= 1) {
10141     + MOVE_BYTE("%0@,%3@");
10142     + if (result)
10143     + goto out;
10144     + }
10145     + if (n >= 1 && ((unsigned long)addr & 1)) {
10146     + MOVE_BYTE("%0@,%3@");
10147     + if (result)
10148     + goto out;
10149     + }
10150     + while (n >= 32)
10151     + MOVE_16_WORDS("%0@+,%3@");
10152     + while (n >= 2)
10153     + MOVE_WORD("%0@+,%3@");
10154     + if (result)
10155     + return start - addr; /* Negated to indicate uncertain length */
10156     + if (n == 1)
10157     + MOVE_BYTE("%0@,%3@");
10158     +out:
10159     + return addr - start;
10160     +}
10161    
10162     static inline int macscsi_pread(struct NCR5380_hostdata *hostdata,
10163     unsigned char *dst, int len)
10164     {
10165     u8 __iomem *s = hostdata->pdma_io + (INPUT_DATA_REG << 4);
10166     unsigned char *d = dst;
10167     - int n = len;
10168     - int transferred;
10169     +
10170     + hostdata->pdma_residual = len;
10171    
10172     while (!NCR5380_poll_politely(hostdata, BUS_AND_STATUS_REG,
10173     BASR_DRQ | BASR_PHASE_MATCH,
10174     BASR_DRQ | BASR_PHASE_MATCH, HZ / 64)) {
10175     - CP_IO_TO_MEM(s, d, n);
10176     + int bytes;
10177    
10178     - transferred = d - dst - n;
10179     - hostdata->pdma_residual = len - transferred;
10180     + bytes = mac_pdma_recv(s, d, min(hostdata->pdma_residual, 512));
10181    
10182     - /* No bus error. */
10183     - if (n == 0)
10184     + if (bytes > 0) {
10185     + d += bytes;
10186     + hostdata->pdma_residual -= bytes;
10187     + }
10188     +
10189     + if (hostdata->pdma_residual == 0)
10190     return 0;
10191    
10192     - /* Target changed phase early? */
10193     if (NCR5380_poll_politely2(hostdata, STATUS_REG, SR_REQ, SR_REQ,
10194     - BUS_AND_STATUS_REG, BASR_ACK, BASR_ACK, HZ / 64) < 0)
10195     - scmd_printk(KERN_ERR, hostdata->connected,
10196     + BUS_AND_STATUS_REG, BASR_ACK,
10197     + BASR_ACK, HZ / 64) < 0)
10198     + scmd_printk(KERN_DEBUG, hostdata->connected,
10199     "%s: !REQ and !ACK\n", __func__);
10200     if (!(NCR5380_read(BUS_AND_STATUS_REG) & BASR_PHASE_MATCH))
10201     return 0;
10202    
10203     + if (bytes == 0)
10204     + udelay(MAC_PDMA_DELAY);
10205     +
10206     + if (bytes >= 0)
10207     + continue;
10208     +
10209     dsprintk(NDEBUG_PSEUDO_DMA, hostdata->host,
10210     - "%s: bus error (%d/%d)\n", __func__, transferred, len);
10211     + "%s: bus error (%d/%d)\n", __func__, d - dst, len);
10212     NCR5380_dprint(NDEBUG_PSEUDO_DMA, hostdata->host);
10213     - d = dst + transferred;
10214     - n = len - transferred;
10215     + return -1;
10216     }
10217    
10218     scmd_printk(KERN_ERR, hostdata->connected,
10219     @@ -192,93 +311,27 @@ static inline int macscsi_pread(struct NCR5380_hostdata *hostdata,
10220     return -1;
10221     }
10222    
10223     -
10224     -#define CP_MEM_TO_IO(s,d,n) \
10225     -__asm__ __volatile__ \
10226     - (" cmp.w #4,%2\n" \
10227     - " bls 8f\n" \
10228     - " move.w %0,%%d0\n" \
10229     - " neg.b %%d0\n" \
10230     - " and.w #3,%%d0\n" \
10231     - " sub.w %%d0,%2\n" \
10232     - " bra 2f\n" \
10233     - " 1: move.b (%0)+,(%1)\n" \
10234     - " 2: dbf %%d0,1b\n" \
10235     - " move.w %2,%%d0\n" \
10236     - " lsr.w #5,%%d0\n" \
10237     - " bra 4f\n" \
10238     - " 3: move.l (%0)+,(%1)\n" \
10239     - "31: move.l (%0)+,(%1)\n" \
10240     - "32: move.l (%0)+,(%1)\n" \
10241     - "33: move.l (%0)+,(%1)\n" \
10242     - "34: move.l (%0)+,(%1)\n" \
10243     - "35: move.l (%0)+,(%1)\n" \
10244     - "36: move.l (%0)+,(%1)\n" \
10245     - "37: move.l (%0)+,(%1)\n" \
10246     - " 4: dbf %%d0,3b\n" \
10247     - " move.w %2,%%d0\n" \
10248     - " lsr.w #2,%%d0\n" \
10249     - " and.w #7,%%d0\n" \
10250     - " bra 6f\n" \
10251     - " 5: move.l (%0)+,(%1)\n" \
10252     - " 6: dbf %%d0,5b\n" \
10253     - " and.w #3,%2\n" \
10254     - " bra 8f\n" \
10255     - " 7: move.b (%0)+,(%1)\n" \
10256     - " 8: dbf %2,7b\n" \
10257     - " moveq.l #0, %2\n" \
10258     - " 9: \n" \
10259     - ".section .fixup,\"ax\"\n" \
10260     - " .even\n" \
10261     - "91: moveq.l #1, %2\n" \
10262     - " jra 9b\n" \
10263     - "94: moveq.l #4, %2\n" \
10264     - " jra 9b\n" \
10265     - ".previous\n" \
10266     - ".section __ex_table,\"a\"\n" \
10267     - " .align 4\n" \
10268     - " .long 1b,91b\n" \
10269     - " .long 3b,94b\n" \
10270     - " .long 31b,94b\n" \
10271     - " .long 32b,94b\n" \
10272     - " .long 33b,94b\n" \
10273     - " .long 34b,94b\n" \
10274     - " .long 35b,94b\n" \
10275     - " .long 36b,94b\n" \
10276     - " .long 37b,94b\n" \
10277     - " .long 5b,94b\n" \
10278     - " .long 7b,91b\n" \
10279     - ".previous" \
10280     - : "=a"(s), "=a"(d), "=d"(n) \
10281     - : "0"(s), "1"(d), "2"(n) \
10282     - : "d0")
10283     -
10284     static inline int macscsi_pwrite(struct NCR5380_hostdata *hostdata,
10285     unsigned char *src, int len)
10286     {
10287     unsigned char *s = src;
10288     u8 __iomem *d = hostdata->pdma_io + (OUTPUT_DATA_REG << 4);
10289     - int n = len;
10290     - int transferred;
10291     +
10292     + hostdata->pdma_residual = len;
10293    
10294     while (!NCR5380_poll_politely(hostdata, BUS_AND_STATUS_REG,
10295     BASR_DRQ | BASR_PHASE_MATCH,
10296     BASR_DRQ | BASR_PHASE_MATCH, HZ / 64)) {
10297     - CP_MEM_TO_IO(s, d, n);
10298     + int bytes;
10299    
10300     - transferred = s - src - n;
10301     - hostdata->pdma_residual = len - transferred;
10302     + bytes = mac_pdma_send(s, d, min(hostdata->pdma_residual, 512));
10303    
10304     - /* Target changed phase early? */
10305     - if (NCR5380_poll_politely2(hostdata, STATUS_REG, SR_REQ, SR_REQ,
10306     - BUS_AND_STATUS_REG, BASR_ACK, BASR_ACK, HZ / 64) < 0)
10307     - scmd_printk(KERN_ERR, hostdata->connected,
10308     - "%s: !REQ and !ACK\n", __func__);
10309     - if (!(NCR5380_read(BUS_AND_STATUS_REG) & BASR_PHASE_MATCH))
10310     - return 0;
10311     + if (bytes > 0) {
10312     + s += bytes;
10313     + hostdata->pdma_residual -= bytes;
10314     + }
10315    
10316     - /* No bus error. */
10317     - if (n == 0) {
10318     + if (hostdata->pdma_residual == 0) {
10319     if (NCR5380_poll_politely(hostdata, TARGET_COMMAND_REG,
10320     TCR_LAST_BYTE_SENT,
10321     TCR_LAST_BYTE_SENT, HZ / 64) < 0)
10322     @@ -287,17 +340,29 @@ static inline int macscsi_pwrite(struct NCR5380_hostdata *hostdata,
10323     return 0;
10324     }
10325    
10326     + if (NCR5380_poll_politely2(hostdata, STATUS_REG, SR_REQ, SR_REQ,
10327     + BUS_AND_STATUS_REG, BASR_ACK,
10328     + BASR_ACK, HZ / 64) < 0)
10329     + scmd_printk(KERN_DEBUG, hostdata->connected,
10330     + "%s: !REQ and !ACK\n", __func__);
10331     + if (!(NCR5380_read(BUS_AND_STATUS_REG) & BASR_PHASE_MATCH))
10332     + return 0;
10333     +
10334     + if (bytes == 0)
10335     + udelay(MAC_PDMA_DELAY);
10336     +
10337     + if (bytes >= 0)
10338     + continue;
10339     +
10340     dsprintk(NDEBUG_PSEUDO_DMA, hostdata->host,
10341     - "%s: bus error (%d/%d)\n", __func__, transferred, len);
10342     + "%s: bus error (%d/%d)\n", __func__, s - src, len);
10343     NCR5380_dprint(NDEBUG_PSEUDO_DMA, hostdata->host);
10344     - s = src + transferred;
10345     - n = len - transferred;
10346     + return -1;
10347     }
10348    
10349     scmd_printk(KERN_ERR, hostdata->connected,
10350     "%s: phase mismatch or !DRQ\n", __func__);
10351     NCR5380_dprint(NDEBUG_PSEUDO_DMA, hostdata->host);
10352     -
10353     return -1;
10354     }
10355    
10356     @@ -305,7 +370,7 @@ static int macscsi_dma_xfer_len(struct NCR5380_hostdata *hostdata,
10357     struct scsi_cmnd *cmd)
10358     {
10359     if (hostdata->flags & FLAG_NO_PSEUDO_DMA ||
10360     - cmd->SCp.this_residual < 16)
10361     + cmd->SCp.this_residual < setup_use_pdma)
10362     return 0;
10363    
10364     return cmd->SCp.this_residual;
10365     diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
10366     index acb503ea8f0c..e0c87228438d 100644
10367     --- a/drivers/scsi/megaraid/megaraid_sas_base.c
10368     +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
10369     @@ -5862,7 +5862,8 @@ megasas_get_target_prop(struct megasas_instance *instance,
10370     int ret;
10371     struct megasas_cmd *cmd;
10372     struct megasas_dcmd_frame *dcmd;
10373     - u16 targetId = (sdev->channel % 2) + sdev->id;
10374     + u16 targetId = ((sdev->channel % 2) * MEGASAS_MAX_DEV_PER_CHANNEL) +
10375     + sdev->id;
10376    
10377     cmd = megasas_get_cmd(instance);
10378    
10379     diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
10380     index 1fc832751a4f..32652b2c5e7c 100644
10381     --- a/drivers/scsi/scsi_lib.c
10382     +++ b/drivers/scsi/scsi_lib.c
10383     @@ -71,11 +71,11 @@ int scsi_init_sense_cache(struct Scsi_Host *shost)
10384     struct kmem_cache *cache;
10385     int ret = 0;
10386    
10387     + mutex_lock(&scsi_sense_cache_mutex);
10388     cache = scsi_select_sense_cache(shost->unchecked_isa_dma);
10389     if (cache)
10390     - return 0;
10391     + goto exit;
10392    
10393     - mutex_lock(&scsi_sense_cache_mutex);
10394     if (shost->unchecked_isa_dma) {
10395     scsi_sense_isadma_cache =
10396     kmem_cache_create("scsi_sense_cache(DMA)",
10397     @@ -91,7 +91,7 @@ int scsi_init_sense_cache(struct Scsi_Host *shost)
10398     if (!scsi_sense_cache)
10399     ret = -ENOMEM;
10400     }
10401     -
10402     + exit:
10403     mutex_unlock(&scsi_sense_cache_mutex);
10404     return ret;
10405     }
10406     diff --git a/drivers/staging/media/davinci_vpfe/vpfe_video.c b/drivers/staging/media/davinci_vpfe/vpfe_video.c
10407     index 1269a983455e..13b890b9ef18 100644
10408     --- a/drivers/staging/media/davinci_vpfe/vpfe_video.c
10409     +++ b/drivers/staging/media/davinci_vpfe/vpfe_video.c
10410     @@ -422,6 +422,9 @@ static int vpfe_open(struct file *file)
10411     /* If decoder is not initialized. initialize it */
10412     if (!video->initialized && vpfe_update_pipe_state(video)) {
10413     mutex_unlock(&video->lock);
10414     + v4l2_fh_del(&handle->vfh);
10415     + v4l2_fh_exit(&handle->vfh);
10416     + kfree(handle);
10417     return -ENODEV;
10418     }
10419     /* Increment device users counter */
10420     diff --git a/drivers/target/iscsi/iscsi_target_auth.c b/drivers/target/iscsi/iscsi_target_auth.c
10421     index 4e680d753941..e2fa3a3bc81d 100644
10422     --- a/drivers/target/iscsi/iscsi_target_auth.c
10423     +++ b/drivers/target/iscsi/iscsi_target_auth.c
10424     @@ -89,6 +89,12 @@ out:
10425     return CHAP_DIGEST_UNKNOWN;
10426     }
10427    
10428     +static void chap_close(struct iscsi_conn *conn)
10429     +{
10430     + kfree(conn->auth_protocol);
10431     + conn->auth_protocol = NULL;
10432     +}
10433     +
10434     static struct iscsi_chap *chap_server_open(
10435     struct iscsi_conn *conn,
10436     struct iscsi_node_auth *auth,
10437     @@ -126,7 +132,7 @@ static struct iscsi_chap *chap_server_open(
10438     case CHAP_DIGEST_UNKNOWN:
10439     default:
10440     pr_err("Unsupported CHAP_A value\n");
10441     - kfree(conn->auth_protocol);
10442     + chap_close(conn);
10443     return NULL;
10444     }
10445    
10446     @@ -141,19 +147,13 @@ static struct iscsi_chap *chap_server_open(
10447     * Generate Challenge.
10448     */
10449     if (chap_gen_challenge(conn, 1, aic_str, aic_len) < 0) {
10450     - kfree(conn->auth_protocol);
10451     + chap_close(conn);
10452     return NULL;
10453     }
10454    
10455     return chap;
10456     }
10457    
10458     -static void chap_close(struct iscsi_conn *conn)
10459     -{
10460     - kfree(conn->auth_protocol);
10461     - conn->auth_protocol = NULL;
10462     -}
10463     -
10464     static int chap_server_compute_md5(
10465     struct iscsi_conn *conn,
10466     struct iscsi_node_auth *auth,
10467     diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
10468     index eb24ec0e160d..f4e8e869649a 100644
10469     --- a/drivers/usb/core/hub.c
10470     +++ b/drivers/usb/core/hub.c
10471     @@ -3575,6 +3575,7 @@ static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port,
10472     struct usb_device *hdev;
10473     struct usb_device *udev;
10474     int connect_change = 0;
10475     + u16 link_state;
10476     int ret;
10477    
10478     hdev = hub->hdev;
10479     @@ -3584,9 +3585,11 @@ static int hub_handle_remote_wakeup(struct usb_hub *hub, unsigned int port,
10480     return 0;
10481     usb_clear_port_feature(hdev, port, USB_PORT_FEAT_C_SUSPEND);
10482     } else {
10483     + link_state = portstatus & USB_PORT_STAT_LINK_STATE;
10484     if (!udev || udev->state != USB_STATE_SUSPENDED ||
10485     - (portstatus & USB_PORT_STAT_LINK_STATE) !=
10486     - USB_SS_PORT_LS_U0)
10487     + (link_state != USB_SS_PORT_LS_U0 &&
10488     + link_state != USB_SS_PORT_LS_U1 &&
10489     + link_state != USB_SS_PORT_LS_U2))
10490     return 0;
10491     }
10492    
10493     diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c
10494     index 39155d7cc894..ae704658b528 100644
10495     --- a/drivers/vhost/net.c
10496     +++ b/drivers/vhost/net.c
10497     @@ -36,7 +36,7 @@
10498    
10499     #include "vhost.h"
10500    
10501     -static int experimental_zcopytx = 1;
10502     +static int experimental_zcopytx = 0;
10503     module_param(experimental_zcopytx, int, 0444);
10504     MODULE_PARM_DESC(experimental_zcopytx, "Enable Zero Copy TX;"
10505     " 1 -Enable; 0 - Disable");
10506     diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
10507     index 7ab6caef599c..d4e8b717ce2b 100644
10508     --- a/drivers/xen/balloon.c
10509     +++ b/drivers/xen/balloon.c
10510     @@ -527,8 +527,15 @@ static void balloon_process(struct work_struct *work)
10511     state = reserve_additional_memory();
10512     }
10513    
10514     - if (credit < 0)
10515     - state = decrease_reservation(-credit, GFP_BALLOON);
10516     + if (credit < 0) {
10517     + long n_pages;
10518     +
10519     + n_pages = min(-credit, si_mem_available());
10520     + state = decrease_reservation(n_pages, GFP_BALLOON);
10521     + if (state == BP_DONE && n_pages != -credit &&
10522     + n_pages < totalreserve_pages)
10523     + state = BP_EAGAIN;
10524     + }
10525    
10526     state = update_schedule(state);
10527    
10528     @@ -567,6 +574,9 @@ static int add_ballooned_pages(int nr_pages)
10529     }
10530     }
10531    
10532     + if (si_mem_available() < nr_pages)
10533     + return -ENOMEM;
10534     +
10535     st = decrease_reservation(nr_pages, GFP_USER);
10536     if (st != BP_DONE)
10537     return -ENOMEM;
10538     @@ -696,7 +706,7 @@ static int __init balloon_init(void)
10539     balloon_stats.schedule_delay = 1;
10540     balloon_stats.max_schedule_delay = 32;
10541     balloon_stats.retry_count = 1;
10542     - balloon_stats.max_retry_count = RETRY_UNLIMITED;
10543     + balloon_stats.max_retry_count = 4;
10544    
10545     #ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG
10546     set_online_page_callback(&xen_online_page);
10547     diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
10548     index fe1f16351f94..8d49b91d92cd 100644
10549     --- a/drivers/xen/events/events_base.c
10550     +++ b/drivers/xen/events/events_base.c
10551     @@ -1293,7 +1293,7 @@ void rebind_evtchn_irq(int evtchn, int irq)
10552     }
10553    
10554     /* Rebind an evtchn so that it gets delivered to a specific cpu */
10555     -int xen_rebind_evtchn_to_cpu(int evtchn, unsigned tcpu)
10556     +static int xen_rebind_evtchn_to_cpu(int evtchn, unsigned int tcpu)
10557     {
10558     struct evtchn_bind_vcpu bind_vcpu;
10559     int masked;
10560     @@ -1327,7 +1327,6 @@ int xen_rebind_evtchn_to_cpu(int evtchn, unsigned tcpu)
10561    
10562     return 0;
10563     }
10564     -EXPORT_SYMBOL_GPL(xen_rebind_evtchn_to_cpu);
10565    
10566     static int set_affinity_irq(struct irq_data *data, const struct cpumask *dest,
10567     bool force)
10568     @@ -1341,6 +1340,15 @@ static int set_affinity_irq(struct irq_data *data, const struct cpumask *dest,
10569     return ret;
10570     }
10571    
10572     +/* To be called with desc->lock held. */
10573     +int xen_set_affinity_evtchn(struct irq_desc *desc, unsigned int tcpu)
10574     +{
10575     + struct irq_data *d = irq_desc_get_irq_data(desc);
10576     +
10577     + return set_affinity_irq(d, cpumask_of(tcpu), false);
10578     +}
10579     +EXPORT_SYMBOL_GPL(xen_set_affinity_evtchn);
10580     +
10581     static void enable_dynirq(struct irq_data *data)
10582     {
10583     int evtchn = evtchn_from_irq(data->irq);
10584     diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c
10585     index 6d1a5e58968f..47c70b826a6a 100644
10586     --- a/drivers/xen/evtchn.c
10587     +++ b/drivers/xen/evtchn.c
10588     @@ -447,7 +447,7 @@ static void evtchn_bind_interdom_next_vcpu(int evtchn)
10589     this_cpu_write(bind_last_selected_cpu, selected_cpu);
10590    
10591     /* unmask expects irqs to be disabled */
10592     - xen_rebind_evtchn_to_cpu(evtchn, selected_cpu);
10593     + xen_set_affinity_evtchn(desc, selected_cpu);
10594     raw_spin_unlock_irqrestore(&desc->lock, flags);
10595     }
10596    
10597     diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
10598     index e24c0a69ff5d..c84186563c31 100644
10599     --- a/fs/btrfs/file.c
10600     +++ b/fs/btrfs/file.c
10601     @@ -2732,6 +2732,11 @@ out_only_mutex:
10602     * for detecting, at fsync time, if the inode isn't yet in the
10603     * log tree or it's there but not up to date.
10604     */
10605     + struct timespec64 now = current_time(inode);
10606     +
10607     + inode_inc_iversion(inode);
10608     + inode->i_mtime = now;
10609     + inode->i_ctime = now;
10610     trans = btrfs_start_transaction(root, 1);
10611     if (IS_ERR(trans)) {
10612     err = PTR_ERR(trans);
10613     diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
10614     index 0d5840d20efc..08c5afa06aee 100644
10615     --- a/fs/btrfs/tree-log.c
10616     +++ b/fs/btrfs/tree-log.c
10617     @@ -3262,6 +3262,30 @@ int btrfs_free_log_root_tree(struct btrfs_trans_handle *trans,
10618     return 0;
10619     }
10620    
10621     +/*
10622     + * Check if an inode was logged in the current transaction. We can't always rely
10623     + * on an inode's logged_trans value, because it's an in-memory only field and
10624     + * therefore not persisted. This means that its value is lost if the inode gets
10625     + * evicted and loaded again from disk (in which case it has a value of 0, and
10626     + * certainly it is smaller then any possible transaction ID), when that happens
10627     + * the full_sync flag is set in the inode's runtime flags, so on that case we
10628     + * assume eviction happened and ignore the logged_trans value, assuming the
10629     + * worst case, that the inode was logged before in the current transaction.
10630     + */
10631     +static bool inode_logged(struct btrfs_trans_handle *trans,
10632     + struct btrfs_inode *inode)
10633     +{
10634     + if (inode->logged_trans == trans->transid)
10635     + return true;
10636     +
10637     + if (inode->last_trans == trans->transid &&
10638     + test_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags) &&
10639     + !test_bit(BTRFS_FS_LOG_RECOVERING, &trans->fs_info->flags))
10640     + return true;
10641     +
10642     + return false;
10643     +}
10644     +
10645     /*
10646     * If both a file and directory are logged, and unlinks or renames are
10647     * mixed in, we have a few interesting corners:
10648     @@ -3296,7 +3320,7 @@ int btrfs_del_dir_entries_in_log(struct btrfs_trans_handle *trans,
10649     int bytes_del = 0;
10650     u64 dir_ino = btrfs_ino(dir);
10651    
10652     - if (dir->logged_trans < trans->transid)
10653     + if (!inode_logged(trans, dir))
10654     return 0;
10655    
10656     ret = join_running_log_trans(root);
10657     @@ -3401,7 +3425,7 @@ int btrfs_del_inode_ref_in_log(struct btrfs_trans_handle *trans,
10658     u64 index;
10659     int ret;
10660    
10661     - if (inode->logged_trans < trans->transid)
10662     + if (!inode_logged(trans, inode))
10663     return 0;
10664    
10665     ret = join_running_log_trans(root);
10666     @@ -5250,9 +5274,19 @@ log_extents:
10667     }
10668     }
10669    
10670     + /*
10671     + * Don't update last_log_commit if we logged that an inode exists after
10672     + * it was loaded to memory (full_sync bit set).
10673     + * This is to prevent data loss when we do a write to the inode, then
10674     + * the inode gets evicted after all delalloc was flushed, then we log
10675     + * it exists (due to a rename for example) and then fsync it. This last
10676     + * fsync would do nothing (not logging the extents previously written).
10677     + */
10678     spin_lock(&inode->lock);
10679     inode->logged_trans = trans->transid;
10680     - inode->last_log_commit = inode->last_sub_trans;
10681     + if (inode_only != LOG_INODE_EXISTS ||
10682     + !test_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &inode->runtime_flags))
10683     + inode->last_log_commit = inode->last_sub_trans;
10684     spin_unlock(&inode->lock);
10685     out_unlock:
10686     mutex_unlock(&inode->log_mutex);
10687     diff --git a/fs/coda/file.c b/fs/coda/file.c
10688     index 1cbc1f2298ee..43d371551d2b 100644
10689     --- a/fs/coda/file.c
10690     +++ b/fs/coda/file.c
10691     @@ -27,6 +27,13 @@
10692     #include "coda_linux.h"
10693     #include "coda_int.h"
10694    
10695     +struct coda_vm_ops {
10696     + atomic_t refcnt;
10697     + struct file *coda_file;
10698     + const struct vm_operations_struct *host_vm_ops;
10699     + struct vm_operations_struct vm_ops;
10700     +};
10701     +
10702     static ssize_t
10703     coda_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
10704     {
10705     @@ -61,6 +68,34 @@ coda_file_write_iter(struct kiocb *iocb, struct iov_iter *to)
10706     return ret;
10707     }
10708    
10709     +static void
10710     +coda_vm_open(struct vm_area_struct *vma)
10711     +{
10712     + struct coda_vm_ops *cvm_ops =
10713     + container_of(vma->vm_ops, struct coda_vm_ops, vm_ops);
10714     +
10715     + atomic_inc(&cvm_ops->refcnt);
10716     +
10717     + if (cvm_ops->host_vm_ops && cvm_ops->host_vm_ops->open)
10718     + cvm_ops->host_vm_ops->open(vma);
10719     +}
10720     +
10721     +static void
10722     +coda_vm_close(struct vm_area_struct *vma)
10723     +{
10724     + struct coda_vm_ops *cvm_ops =
10725     + container_of(vma->vm_ops, struct coda_vm_ops, vm_ops);
10726     +
10727     + if (cvm_ops->host_vm_ops && cvm_ops->host_vm_ops->close)
10728     + cvm_ops->host_vm_ops->close(vma);
10729     +
10730     + if (atomic_dec_and_test(&cvm_ops->refcnt)) {
10731     + vma->vm_ops = cvm_ops->host_vm_ops;
10732     + fput(cvm_ops->coda_file);
10733     + kfree(cvm_ops);
10734     + }
10735     +}
10736     +
10737     static int
10738     coda_file_mmap(struct file *coda_file, struct vm_area_struct *vma)
10739     {
10740     @@ -68,6 +103,8 @@ coda_file_mmap(struct file *coda_file, struct vm_area_struct *vma)
10741     struct coda_inode_info *cii;
10742     struct file *host_file;
10743     struct inode *coda_inode, *host_inode;
10744     + struct coda_vm_ops *cvm_ops;
10745     + int ret;
10746    
10747     cfi = CODA_FTOC(coda_file);
10748     BUG_ON(!cfi || cfi->cfi_magic != CODA_MAGIC);
10749     @@ -76,6 +113,13 @@ coda_file_mmap(struct file *coda_file, struct vm_area_struct *vma)
10750     if (!host_file->f_op->mmap)
10751     return -ENODEV;
10752    
10753     + if (WARN_ON(coda_file != vma->vm_file))
10754     + return -EIO;
10755     +
10756     + cvm_ops = kmalloc(sizeof(struct coda_vm_ops), GFP_KERNEL);
10757     + if (!cvm_ops)
10758     + return -ENOMEM;
10759     +
10760     coda_inode = file_inode(coda_file);
10761     host_inode = file_inode(host_file);
10762    
10763     @@ -89,6 +133,7 @@ coda_file_mmap(struct file *coda_file, struct vm_area_struct *vma)
10764     * the container file on us! */
10765     else if (coda_inode->i_mapping != host_inode->i_mapping) {
10766     spin_unlock(&cii->c_lock);
10767     + kfree(cvm_ops);
10768     return -EBUSY;
10769     }
10770    
10771     @@ -97,7 +142,29 @@ coda_file_mmap(struct file *coda_file, struct vm_area_struct *vma)
10772     cfi->cfi_mapcount++;
10773     spin_unlock(&cii->c_lock);
10774    
10775     - return call_mmap(host_file, vma);
10776     + vma->vm_file = get_file(host_file);
10777     + ret = call_mmap(vma->vm_file, vma);
10778     +
10779     + if (ret) {
10780     + /* if call_mmap fails, our caller will put coda_file so we
10781     + * should drop the reference to the host_file that we got.
10782     + */
10783     + fput(host_file);
10784     + kfree(cvm_ops);
10785     + } else {
10786     + /* here we add redirects for the open/close vm_operations */
10787     + cvm_ops->host_vm_ops = vma->vm_ops;
10788     + if (vma->vm_ops)
10789     + cvm_ops->vm_ops = *vma->vm_ops;
10790     +
10791     + cvm_ops->vm_ops.open = coda_vm_open;
10792     + cvm_ops->vm_ops.close = coda_vm_close;
10793     + cvm_ops->coda_file = coda_file;
10794     + atomic_set(&cvm_ops->refcnt, 1);
10795     +
10796     + vma->vm_ops = &cvm_ops->vm_ops;
10797     + }
10798     + return ret;
10799     }
10800    
10801     int coda_open(struct inode *coda_inode, struct file *coda_file)
10802     @@ -207,4 +274,3 @@ const struct file_operations coda_file_operations = {
10803     .fsync = coda_fsync,
10804     .splice_read = generic_file_splice_read,
10805     };
10806     -
10807     diff --git a/fs/crypto/crypto.c b/fs/crypto/crypto.c
10808     index 0f46cf550907..c83ddff3ff4a 100644
10809     --- a/fs/crypto/crypto.c
10810     +++ b/fs/crypto/crypto.c
10811     @@ -149,7 +149,10 @@ int fscrypt_do_page_crypto(const struct inode *inode, fscrypt_direction_t rw,
10812     struct crypto_skcipher *tfm = ci->ci_ctfm;
10813     int res = 0;
10814    
10815     - BUG_ON(len == 0);
10816     + if (WARN_ON_ONCE(len <= 0))
10817     + return -EINVAL;
10818     + if (WARN_ON_ONCE(len % FS_CRYPTO_BLOCK_SIZE != 0))
10819     + return -EINVAL;
10820    
10821     BUILD_BUG_ON(sizeof(iv) != FS_IV_SIZE);
10822     BUILD_BUG_ON(AES_BLOCK_SIZE != FS_IV_SIZE);
10823     @@ -241,8 +244,6 @@ struct page *fscrypt_encrypt_page(const struct inode *inode,
10824     struct page *ciphertext_page = page;
10825     int err;
10826    
10827     - BUG_ON(len % FS_CRYPTO_BLOCK_SIZE != 0);
10828     -
10829     if (inode->i_sb->s_cop->flags & FS_CFLG_OWN_PAGES) {
10830     /* with inplace-encryption we just encrypt the page */
10831     err = fscrypt_do_page_crypto(inode, FS_ENCRYPT, lblk_num, page,
10832     @@ -254,7 +255,8 @@ struct page *fscrypt_encrypt_page(const struct inode *inode,
10833     return ciphertext_page;
10834     }
10835    
10836     - BUG_ON(!PageLocked(page));
10837     + if (WARN_ON_ONCE(!PageLocked(page)))
10838     + return ERR_PTR(-EINVAL);
10839    
10840     ctx = fscrypt_get_ctx(inode, gfp_flags);
10841     if (IS_ERR(ctx))
10842     @@ -302,8 +304,9 @@ EXPORT_SYMBOL(fscrypt_encrypt_page);
10843     int fscrypt_decrypt_page(const struct inode *inode, struct page *page,
10844     unsigned int len, unsigned int offs, u64 lblk_num)
10845     {
10846     - if (!(inode->i_sb->s_cop->flags & FS_CFLG_OWN_PAGES))
10847     - BUG_ON(!PageLocked(page));
10848     + if (WARN_ON_ONCE(!PageLocked(page) &&
10849     + !(inode->i_sb->s_cop->flags & FS_CFLG_OWN_PAGES)))
10850     + return -EINVAL;
10851    
10852     return fscrypt_do_page_crypto(inode, FS_DECRYPT, lblk_num, page, page,
10853     len, offs, GFP_NOFS);
10854     diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c
10855     index 4dd842f72846..708f931c36f1 100644
10856     --- a/fs/ecryptfs/crypto.c
10857     +++ b/fs/ecryptfs/crypto.c
10858     @@ -1018,8 +1018,10 @@ int ecryptfs_read_and_validate_header_region(struct inode *inode)
10859    
10860     rc = ecryptfs_read_lower(file_size, 0, ECRYPTFS_SIZE_AND_MARKER_BYTES,
10861     inode);
10862     - if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES)
10863     - return rc >= 0 ? -EINVAL : rc;
10864     + if (rc < 0)
10865     + return rc;
10866     + else if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES)
10867     + return -EINVAL;
10868     rc = ecryptfs_validate_marker(marker);
10869     if (!rc)
10870     ecryptfs_i_size_init(file_size, inode);
10871     @@ -1381,8 +1383,10 @@ int ecryptfs_read_and_validate_xattr_region(struct dentry *dentry,
10872     ecryptfs_inode_to_lower(inode),
10873     ECRYPTFS_XATTR_NAME, file_size,
10874     ECRYPTFS_SIZE_AND_MARKER_BYTES);
10875     - if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES)
10876     - return rc >= 0 ? -EINVAL : rc;
10877     + if (rc < 0)
10878     + return rc;
10879     + else if (rc < ECRYPTFS_SIZE_AND_MARKER_BYTES)
10880     + return -EINVAL;
10881     rc = ecryptfs_validate_marker(marker);
10882     if (!rc)
10883     ecryptfs_i_size_init(file_size, inode);
10884     diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c
10885     index 9544e2f8b79f..7ee86d8f313d 100644
10886     --- a/fs/fs-writeback.c
10887     +++ b/fs/fs-writeback.c
10888     @@ -721,6 +721,7 @@ void wbc_detach_inode(struct writeback_control *wbc)
10889     void wbc_account_io(struct writeback_control *wbc, struct page *page,
10890     size_t bytes)
10891     {
10892     + struct cgroup_subsys_state *css;
10893     int id;
10894    
10895     /*
10896     @@ -732,7 +733,12 @@ void wbc_account_io(struct writeback_control *wbc, struct page *page,
10897     if (!wbc->wb)
10898     return;
10899    
10900     - id = mem_cgroup_css_from_page(page)->id;
10901     + css = mem_cgroup_css_from_page(page);
10902     + /* dead cgroups shouldn't contribute to inode ownership arbitration */
10903     + if (!(css->flags & CSS_ONLINE))
10904     + return;
10905     +
10906     + id = css->id;
10907    
10908     if (id == wbc->wb_id) {
10909     wbc->wb_bytes += bytes;
10910     diff --git a/fs/nfs/flexfilelayout/flexfilelayoutdev.c b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
10911     index 364028c710a8..8da239b6cc16 100644
10912     --- a/fs/nfs/flexfilelayout/flexfilelayoutdev.c
10913     +++ b/fs/nfs/flexfilelayout/flexfilelayoutdev.c
10914     @@ -307,7 +307,7 @@ int ff_layout_track_ds_error(struct nfs4_flexfile_layout *flo,
10915     if (status == 0)
10916     return 0;
10917    
10918     - if (mirror->mirror_ds == NULL)
10919     + if (IS_ERR_OR_NULL(mirror->mirror_ds))
10920     return -EINVAL;
10921    
10922     dserr = kmalloc(sizeof(*dserr), gfp_flags);
10923     diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
10924     index b65aee481d13..e4cd3a2fe698 100644
10925     --- a/fs/nfs/inode.c
10926     +++ b/fs/nfs/inode.c
10927     @@ -1100,6 +1100,7 @@ int nfs_open(struct inode *inode, struct file *filp)
10928     nfs_fscache_open_file(inode, filp);
10929     return 0;
10930     }
10931     +EXPORT_SYMBOL_GPL(nfs_open);
10932    
10933     /*
10934     * This function is called whenever some part of NFS notices that
10935     diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c
10936     index 134858507268..61abbb087ed1 100644
10937     --- a/fs/nfs/nfs4file.c
10938     +++ b/fs/nfs/nfs4file.c
10939     @@ -49,7 +49,7 @@ nfs4_file_open(struct inode *inode, struct file *filp)
10940     return err;
10941    
10942     if ((openflags & O_ACCMODE) == 3)
10943     - openflags--;
10944     + return nfs_open(inode, filp);
10945    
10946     /* We can't create new files here */
10947     openflags &= ~(O_CREAT|O_EXCL);
10948     diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
10949     index 7d9a51e6b847..4931c3a75f03 100644
10950     --- a/fs/nfs/pnfs.c
10951     +++ b/fs/nfs/pnfs.c
10952     @@ -1866,8 +1866,8 @@ lookup_again:
10953     atomic_read(&lo->plh_outstanding) != 0) {
10954     spin_unlock(&ino->i_lock);
10955     lseg = ERR_PTR(wait_var_event_killable(&lo->plh_outstanding,
10956     - atomic_read(&lo->plh_outstanding)));
10957     - if (IS_ERR(lseg) || !list_empty(&lo->plh_segs))
10958     + !atomic_read(&lo->plh_outstanding)));
10959     + if (IS_ERR(lseg))
10960     goto out_put_layout_hdr;
10961     pnfs_put_layout_hdr(lo);
10962     goto lookup_again;
10963     diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
10964     index 7325baa8f9d4..c95f32b83a94 100644
10965     --- a/fs/proc/proc_sysctl.c
10966     +++ b/fs/proc/proc_sysctl.c
10967     @@ -498,6 +498,10 @@ static struct inode *proc_sys_make_inode(struct super_block *sb,
10968    
10969     if (root->set_ownership)
10970     root->set_ownership(head, table, &inode->i_uid, &inode->i_gid);
10971     + else {
10972     + inode->i_uid = GLOBAL_ROOT_UID;
10973     + inode->i_gid = GLOBAL_ROOT_GID;
10974     + }
10975    
10976     return inode;
10977     }
10978     diff --git a/fs/xfs/libxfs/xfs_ag_resv.c b/fs/xfs/libxfs/xfs_ag_resv.c
10979     index e701ebc36c06..e2ba2a3b63b2 100644
10980     --- a/fs/xfs/libxfs/xfs_ag_resv.c
10981     +++ b/fs/xfs/libxfs/xfs_ag_resv.c
10982     @@ -281,7 +281,7 @@ xfs_ag_resv_init(
10983     */
10984     ask = used = 0;
10985    
10986     - mp->m_inotbt_nores = true;
10987     + mp->m_finobt_nores = true;
10988    
10989     error = xfs_refcountbt_calc_reserves(mp, tp, agno, &ask,
10990     &used);
10991     diff --git a/fs/xfs/libxfs/xfs_ialloc_btree.c b/fs/xfs/libxfs/xfs_ialloc_btree.c
10992     index 86c50208a143..adb2f6df5a11 100644
10993     --- a/fs/xfs/libxfs/xfs_ialloc_btree.c
10994     +++ b/fs/xfs/libxfs/xfs_ialloc_btree.c
10995     @@ -124,7 +124,7 @@ xfs_finobt_alloc_block(
10996     union xfs_btree_ptr *new,
10997     int *stat)
10998     {
10999     - if (cur->bc_mp->m_inotbt_nores)
11000     + if (cur->bc_mp->m_finobt_nores)
11001     return xfs_inobt_alloc_block(cur, start, new, stat);
11002     return __xfs_inobt_alloc_block(cur, start, new, stat,
11003     XFS_AG_RESV_METADATA);
11004     @@ -157,7 +157,7 @@ xfs_finobt_free_block(
11005     struct xfs_btree_cur *cur,
11006     struct xfs_buf *bp)
11007     {
11008     - if (cur->bc_mp->m_inotbt_nores)
11009     + if (cur->bc_mp->m_finobt_nores)
11010     return xfs_inobt_free_block(cur, bp);
11011     return __xfs_inobt_free_block(cur, bp, XFS_AG_RESV_METADATA);
11012     }
11013     diff --git a/fs/xfs/xfs_attr_list.c b/fs/xfs/xfs_attr_list.c
11014     index a58034049995..3d213a7394c5 100644
11015     --- a/fs/xfs/xfs_attr_list.c
11016     +++ b/fs/xfs/xfs_attr_list.c
11017     @@ -555,6 +555,7 @@ xfs_attr_put_listent(
11018     attrlist_ent_t *aep;
11019     int arraytop;
11020    
11021     + ASSERT(!context->seen_enough);
11022     ASSERT(!(context->flags & ATTR_KERNOVAL));
11023     ASSERT(context->count >= 0);
11024     ASSERT(context->count < (ATTR_MAX_VALUELEN/8));
11025     diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c
11026     index 211b06e4702e..41ad9eaab6ce 100644
11027     --- a/fs/xfs/xfs_bmap_util.c
11028     +++ b/fs/xfs/xfs_bmap_util.c
11029     @@ -1080,7 +1080,7 @@ xfs_adjust_extent_unmap_boundaries(
11030     return 0;
11031     }
11032    
11033     -static int
11034     +int
11035     xfs_flush_unmap_range(
11036     struct xfs_inode *ip,
11037     xfs_off_t offset,
11038     diff --git a/fs/xfs/xfs_bmap_util.h b/fs/xfs/xfs_bmap_util.h
11039     index 87363d136bb6..9c73d012f56a 100644
11040     --- a/fs/xfs/xfs_bmap_util.h
11041     +++ b/fs/xfs/xfs_bmap_util.h
11042     @@ -76,6 +76,8 @@ int xfs_swap_extents(struct xfs_inode *ip, struct xfs_inode *tip,
11043     xfs_daddr_t xfs_fsb_to_db(struct xfs_inode *ip, xfs_fsblock_t fsb);
11044    
11045     xfs_extnum_t xfs_bmap_count_leaves(struct xfs_ifork *ifp, xfs_filblks_t *count);
11046     +int xfs_flush_unmap_range(struct xfs_inode *ip, xfs_off_t offset,
11047     + xfs_off_t len);
11048     int xfs_bmap_count_blocks(struct xfs_trans *tp, struct xfs_inode *ip,
11049     int whichfork, xfs_extnum_t *nextents,
11050     xfs_filblks_t *count);
11051     diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
11052     index 61a5ad2600e8..259549698ba7 100644
11053     --- a/fs/xfs/xfs_file.c
11054     +++ b/fs/xfs/xfs_file.c
11055     @@ -517,6 +517,9 @@ xfs_file_dio_aio_write(
11056     }
11057    
11058     if (iocb->ki_flags & IOCB_NOWAIT) {
11059     + /* unaligned dio always waits, bail */
11060     + if (unaligned_io)
11061     + return -EAGAIN;
11062     if (!xfs_ilock_nowait(ip, iolock))
11063     return -EAGAIN;
11064     } else {
11065     @@ -529,18 +532,14 @@ xfs_file_dio_aio_write(
11066     count = iov_iter_count(from);
11067    
11068     /*
11069     - * If we are doing unaligned IO, wait for all other IO to drain,
11070     - * otherwise demote the lock if we had to take the exclusive lock
11071     - * for other reasons in xfs_file_aio_write_checks.
11072     + * If we are doing unaligned IO, we can't allow any other overlapping IO
11073     + * in-flight at the same time or we risk data corruption. Wait for all
11074     + * other IO to drain before we submit. If the IO is aligned, demote the
11075     + * iolock if we had to take the exclusive lock in
11076     + * xfs_file_aio_write_checks() for other reasons.
11077     */
11078     if (unaligned_io) {
11079     - /* If we are going to wait for other DIO to finish, bail */
11080     - if (iocb->ki_flags & IOCB_NOWAIT) {
11081     - if (atomic_read(&inode->i_dio_count))
11082     - return -EAGAIN;
11083     - } else {
11084     - inode_dio_wait(inode);
11085     - }
11086     + inode_dio_wait(inode);
11087     } else if (iolock == XFS_IOLOCK_EXCL) {
11088     xfs_ilock_demote(ip, XFS_IOLOCK_EXCL);
11089     iolock = XFS_IOLOCK_SHARED;
11090     @@ -548,6 +547,14 @@ xfs_file_dio_aio_write(
11091    
11092     trace_xfs_file_direct_write(ip, count, iocb->ki_pos);
11093     ret = iomap_dio_rw(iocb, from, &xfs_iomap_ops, xfs_dio_write_end_io);
11094     +
11095     + /*
11096     + * If unaligned, this is the only IO in-flight. If it has not yet
11097     + * completed, wait on it before we release the iolock to prevent
11098     + * subsequent overlapping IO.
11099     + */
11100     + if (ret == -EIOCBQUEUED && unaligned_io)
11101     + inode_dio_wait(inode);
11102     out:
11103     xfs_iunlock(ip, iolock);
11104    
11105     diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c
11106     index 7c00b8bedfe3..09fd602507ef 100644
11107     --- a/fs/xfs/xfs_fsops.c
11108     +++ b/fs/xfs/xfs_fsops.c
11109     @@ -534,6 +534,7 @@ xfs_fs_reserve_ag_blocks(
11110     int error = 0;
11111     int err2;
11112    
11113     + mp->m_finobt_nores = false;
11114     for (agno = 0; agno < mp->m_sb.sb_agcount; agno++) {
11115     pag = xfs_perag_get(mp, agno);
11116     err2 = xfs_ag_resv_init(pag, NULL);
11117     diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
11118     index 05db9540e459..5ed84d6c7059 100644
11119     --- a/fs/xfs/xfs_inode.c
11120     +++ b/fs/xfs/xfs_inode.c
11121     @@ -1332,7 +1332,7 @@ xfs_create_tmpfile(
11122     if (error)
11123     goto out_trans_cancel;
11124    
11125     - error = xfs_dir_ialloc(&tp, dp, mode, 1, 0, prid, &ip);
11126     + error = xfs_dir_ialloc(&tp, dp, mode, 0, 0, prid, &ip);
11127     if (error)
11128     goto out_trans_cancel;
11129    
11130     @@ -1754,7 +1754,7 @@ xfs_inactive_ifree(
11131     * now remains allocated and sits on the unlinked list until the fs is
11132     * repaired.
11133     */
11134     - if (unlikely(mp->m_inotbt_nores)) {
11135     + if (unlikely(mp->m_finobt_nores)) {
11136     error = xfs_trans_alloc(mp, &M_RES(mp)->tr_ifree,
11137     XFS_IFREE_SPACE_RES(mp), 0, XFS_TRANS_RESERVE,
11138     &tp);
11139     @@ -1907,11 +1907,8 @@ xfs_inactive(
11140     }
11141    
11142     /*
11143     - * This is called when the inode's link count goes to 0 or we are creating a
11144     - * tmpfile via O_TMPFILE. In the case of a tmpfile, @ignore_linkcount will be
11145     - * set to true as the link count is dropped to zero by the VFS after we've
11146     - * created the file successfully, so we have to add it to the unlinked list
11147     - * while the link count is non-zero.
11148     + * This is called when the inode's link count has gone to 0 or we are creating
11149     + * a tmpfile via O_TMPFILE. The inode @ip must have nlink == 0.
11150     *
11151     * We place the on-disk inode on a list in the AGI. It will be pulled from this
11152     * list when the inode is freed.
11153     @@ -1931,6 +1928,7 @@ xfs_iunlink(
11154     int offset;
11155     int error;
11156    
11157     + ASSERT(VFS_I(ip)->i_nlink == 0);
11158     ASSERT(VFS_I(ip)->i_mode != 0);
11159    
11160     /*
11161     @@ -2837,11 +2835,9 @@ xfs_rename_alloc_whiteout(
11162    
11163     /*
11164     * Prepare the tmpfile inode as if it were created through the VFS.
11165     - * Otherwise, the link increment paths will complain about nlink 0->1.
11166     - * Drop the link count as done by d_tmpfile(), complete the inode setup
11167     - * and flag it as linkable.
11168     + * Complete the inode setup and flag it as linkable. nlink is already
11169     + * zero, so we can skip the drop_nlink.
11170     */
11171     - drop_nlink(VFS_I(tmpfile));
11172     xfs_setup_iops(tmpfile);
11173     xfs_finish_inode_setup(tmpfile);
11174     VFS_I(tmpfile)->i_state |= I_LINKABLE;
11175     diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c
11176     index f48ffd7a8d3e..74047bd0c1ae 100644
11177     --- a/fs/xfs/xfs_iops.c
11178     +++ b/fs/xfs/xfs_iops.c
11179     @@ -191,9 +191,18 @@ xfs_generic_create(
11180    
11181     xfs_setup_iops(ip);
11182    
11183     - if (tmpfile)
11184     + if (tmpfile) {
11185     + /*
11186     + * The VFS requires that any inode fed to d_tmpfile must have
11187     + * nlink == 1 so that it can decrement the nlink in d_tmpfile.
11188     + * However, we created the temp file with nlink == 0 because
11189     + * we're not allowed to put an inode with nlink > 0 on the
11190     + * unlinked list. Therefore we have to set nlink to 1 so that
11191     + * d_tmpfile can immediately set it back to zero.
11192     + */
11193     + set_nlink(inode, 1);
11194     d_tmpfile(dentry, inode);
11195     - else
11196     + } else
11197     d_instantiate(dentry, inode);
11198    
11199     xfs_finish_inode_setup(ip);
11200     @@ -522,6 +531,10 @@ xfs_vn_getattr(
11201     }
11202     }
11203    
11204     + /*
11205     + * Note: If you add another clause to set an attribute flag, please
11206     + * update attributes_mask below.
11207     + */
11208     if (ip->i_d.di_flags & XFS_DIFLAG_IMMUTABLE)
11209     stat->attributes |= STATX_ATTR_IMMUTABLE;
11210     if (ip->i_d.di_flags & XFS_DIFLAG_APPEND)
11211     @@ -529,6 +542,10 @@ xfs_vn_getattr(
11212     if (ip->i_d.di_flags & XFS_DIFLAG_NODUMP)
11213     stat->attributes |= STATX_ATTR_NODUMP;
11214    
11215     + stat->attributes_mask |= (STATX_ATTR_IMMUTABLE |
11216     + STATX_ATTR_APPEND |
11217     + STATX_ATTR_NODUMP);
11218     +
11219     switch (inode->i_mode & S_IFMT) {
11220     case S_IFBLK:
11221     case S_IFCHR:
11222     diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h
11223     index 7964513c3128..7e0bf952e087 100644
11224     --- a/fs/xfs/xfs_mount.h
11225     +++ b/fs/xfs/xfs_mount.h
11226     @@ -127,7 +127,7 @@ typedef struct xfs_mount {
11227     struct mutex m_growlock; /* growfs mutex */
11228     int m_fixedfsid[2]; /* unchanged for life of FS */
11229     uint64_t m_flags; /* global mount flags */
11230     - bool m_inotbt_nores; /* no per-AG finobt resv. */
11231     + bool m_finobt_nores; /* no per-AG finobt resv. */
11232     int m_ialloc_inos; /* inodes in inode allocation */
11233     int m_ialloc_blks; /* blocks in inode allocation */
11234     int m_ialloc_min_blks;/* min blocks in sparse inode
11235     diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c
11236     index 7088f44c0c59..f3c393f309e1 100644
11237     --- a/fs/xfs/xfs_reflink.c
11238     +++ b/fs/xfs/xfs_reflink.c
11239     @@ -1368,9 +1368,19 @@ xfs_reflink_remap_prep(
11240     if (ret)
11241     goto out_unlock;
11242    
11243     - /* Zap any page cache for the destination file's range. */
11244     - truncate_inode_pages_range(&inode_out->i_data, pos_out,
11245     - PAGE_ALIGN(pos_out + *len) - 1);
11246     + /*
11247     + * If pos_out > EOF, we may have dirtied blocks between EOF and
11248     + * pos_out. In that case, we need to extend the flush and unmap to cover
11249     + * from EOF to the end of the copy length.
11250     + */
11251     + if (pos_out > XFS_ISIZE(dest)) {
11252     + loff_t flen = *len + (pos_out - XFS_ISIZE(dest));
11253     + ret = xfs_flush_unmap_range(dest, XFS_ISIZE(dest), flen);
11254     + } else {
11255     + ret = xfs_flush_unmap_range(dest, pos_out, *len);
11256     + }
11257     + if (ret)
11258     + goto out_unlock;
11259    
11260     /* If we're altering the file contents... */
11261     if (!is_dedupe) {
11262     diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
11263     index 207ee302b1bb..dce8114e3198 100644
11264     --- a/fs/xfs/xfs_super.c
11265     +++ b/fs/xfs/xfs_super.c
11266     @@ -1561,6 +1561,13 @@ xfs_mount_alloc(
11267     INIT_DELAYED_WORK(&mp->m_eofblocks_work, xfs_eofblocks_worker);
11268     INIT_DELAYED_WORK(&mp->m_cowblocks_work, xfs_cowblocks_worker);
11269     mp->m_kobj.kobject.kset = xfs_kset;
11270     + /*
11271     + * We don't create the finobt per-ag space reservation until after log
11272     + * recovery, so we must set this to true so that an ifree transaction
11273     + * started during log recovery will not depend on space reservations
11274     + * for finobt expansion.
11275     + */
11276     + mp->m_finobt_nores = true;
11277     return mp;
11278     }
11279    
11280     diff --git a/fs/xfs/xfs_xattr.c b/fs/xfs/xfs_xattr.c
11281     index 63ee1d5bf1d7..9a63016009a1 100644
11282     --- a/fs/xfs/xfs_xattr.c
11283     +++ b/fs/xfs/xfs_xattr.c
11284     @@ -129,6 +129,9 @@ __xfs_xattr_put_listent(
11285     char *offset;
11286     int arraytop;
11287    
11288     + if (context->count < 0 || context->seen_enough)
11289     + return;
11290     +
11291     if (!context->alist)
11292     goto compute_size;
11293    
11294     diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h
11295     index 20561a60db9c..d4fb510a4fbe 100644
11296     --- a/include/asm-generic/bug.h
11297     +++ b/include/asm-generic/bug.h
11298     @@ -104,8 +104,10 @@ extern void warn_slowpath_null(const char *file, const int line);
11299     warn_slowpath_fmt_taint(__FILE__, __LINE__, taint, arg)
11300     #else
11301     extern __printf(1, 2) void __warn_printk(const char *fmt, ...);
11302     -#define __WARN() __WARN_TAINT(TAINT_WARN)
11303     -#define __WARN_printf(arg...) do { __warn_printk(arg); __WARN(); } while (0)
11304     +#define __WARN() do { \
11305     + printk(KERN_WARNING CUT_HERE); __WARN_TAINT(TAINT_WARN); \
11306     +} while (0)
11307     +#define __WARN_printf(arg...) __WARN_printf_taint(TAINT_WARN, arg)
11308     #define __WARN_printf_taint(taint, arg...) \
11309     do { __warn_printk(arg); __WARN_TAINT(taint); } while (0)
11310     #endif
11311     diff --git a/include/drm/drm_displayid.h b/include/drm/drm_displayid.h
11312     index c0d4df6a606f..9d3b745c3107 100644
11313     --- a/include/drm/drm_displayid.h
11314     +++ b/include/drm/drm_displayid.h
11315     @@ -40,6 +40,7 @@
11316     #define DATA_BLOCK_DISPLAY_INTERFACE 0x0f
11317     #define DATA_BLOCK_STEREO_DISPLAY_INTERFACE 0x10
11318     #define DATA_BLOCK_TILED_DISPLAY 0x12
11319     +#define DATA_BLOCK_CTA 0x81
11320    
11321     #define DATA_BLOCK_VENDOR_SPECIFIC 0x7f
11322    
11323     @@ -90,4 +91,13 @@ struct displayid_detailed_timing_block {
11324     struct displayid_block base;
11325     struct displayid_detailed_timings_1 timings[0];
11326     };
11327     +
11328     +#define for_each_displayid_db(displayid, block, idx, length) \
11329     + for ((block) = (struct displayid_block *)&(displayid)[idx]; \
11330     + (idx) + sizeof(struct displayid_block) <= (length) && \
11331     + (idx) + sizeof(struct displayid_block) + (block)->num_bytes <= (length) && \
11332     + (block)->num_bytes > 0; \
11333     + (idx) += (block)->num_bytes + sizeof(struct displayid_block), \
11334     + (block) = (struct displayid_block *)&(displayid)[idx])
11335     +
11336     #endif
11337     diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h
11338     index dec0372efe2e..d67c0035165c 100644
11339     --- a/include/linux/cpuhotplug.h
11340     +++ b/include/linux/cpuhotplug.h
11341     @@ -116,10 +116,10 @@ enum cpuhp_state {
11342     CPUHP_AP_PERF_ARM_ACPI_STARTING,
11343     CPUHP_AP_PERF_ARM_STARTING,
11344     CPUHP_AP_ARM_L2X0_STARTING,
11345     + CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING,
11346     CPUHP_AP_ARM_ARCH_TIMER_STARTING,
11347     CPUHP_AP_ARM_GLOBAL_TIMER_STARTING,
11348     CPUHP_AP_JCORE_TIMER_STARTING,
11349     - CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING,
11350     CPUHP_AP_ARM_TWD_STARTING,
11351     CPUHP_AP_QCOM_TIMER_STARTING,
11352     CPUHP_AP_ARMADA_TIMER_STARTING,
11353     diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
11354     index e102c5bccbb9..68cbe111420b 100644
11355     --- a/include/linux/rcupdate.h
11356     +++ b/include/linux/rcupdate.h
11357     @@ -620,7 +620,7 @@ static inline void rcu_preempt_sleep_check(void) { }
11358     * read-side critical sections may be preempted and they may also block, but
11359     * only when acquiring spinlocks that are subject to priority inheritance.
11360     */
11361     -static inline void rcu_read_lock(void)
11362     +static __always_inline void rcu_read_lock(void)
11363     {
11364     __rcu_read_lock();
11365     __acquire(RCU);
11366     diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
11367     index a0d2e0bb9a94..0e3c0d83bd99 100644
11368     --- a/include/net/ip_vs.h
11369     +++ b/include/net/ip_vs.h
11370     @@ -806,11 +806,12 @@ struct ipvs_master_sync_state {
11371     struct ip_vs_sync_buff *sync_buff;
11372     unsigned long sync_queue_len;
11373     unsigned int sync_queue_delay;
11374     - struct task_struct *master_thread;
11375     struct delayed_work master_wakeup_work;
11376     struct netns_ipvs *ipvs;
11377     };
11378    
11379     +struct ip_vs_sync_thread_data;
11380     +
11381     /* How much time to keep dests in trash */
11382     #define IP_VS_DEST_TRASH_PERIOD (120 * HZ)
11383    
11384     @@ -941,7 +942,8 @@ struct netns_ipvs {
11385     spinlock_t sync_lock;
11386     struct ipvs_master_sync_state *ms;
11387     spinlock_t sync_buff_lock;
11388     - struct task_struct **backup_threads;
11389     + struct ip_vs_sync_thread_data *master_tinfo;
11390     + struct ip_vs_sync_thread_data *backup_tinfo;
11391     int threads_mask;
11392     volatile int sync_state;
11393     struct mutex sync_mutex;
11394     diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
11395     index ec299fcf55f7..412c2820626d 100644
11396     --- a/include/rdma/ib_verbs.h
11397     +++ b/include/rdma/ib_verbs.h
11398     @@ -290,8 +290,8 @@ struct ib_rss_caps {
11399     };
11400    
11401     enum ib_tm_cap_flags {
11402     - /* Support tag matching on RC transport */
11403     - IB_TM_CAP_RC = 1 << 0,
11404     + /* Support tag matching with rendezvous offload for RC transport */
11405     + IB_TM_CAP_RNDV_RC = 1 << 0,
11406     };
11407    
11408     struct ib_tm_caps {
11409     diff --git a/include/trace/events/rxrpc.h b/include/trace/events/rxrpc.h
11410     index 6d182746afab..147546e0c11b 100644
11411     --- a/include/trace/events/rxrpc.h
11412     +++ b/include/trace/events/rxrpc.h
11413     @@ -1381,7 +1381,7 @@ TRACE_EVENT(rxrpc_rx_eproto,
11414     ),
11415    
11416     TP_fast_assign(
11417     - __entry->call = call->debug_id;
11418     + __entry->call = call ? call->debug_id : 0;
11419     __entry->serial = serial;
11420     __entry->why = why;
11421     ),
11422     diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
11423     index 2932600ce271..d143e277cdaf 100644
11424     --- a/include/uapi/linux/bpf.h
11425     +++ b/include/uapi/linux/bpf.h
11426     @@ -2486,6 +2486,7 @@ struct bpf_prog_info {
11427     char name[BPF_OBJ_NAME_LEN];
11428     __u32 ifindex;
11429     __u32 gpl_compatible:1;
11430     + __u32 :31; /* alignment pad */
11431     __u64 netns_dev;
11432     __u64 netns_ino;
11433     __u32 nr_jited_ksyms;
11434     diff --git a/include/xen/events.h b/include/xen/events.h
11435     index c3e6bc643a7b..1650d39decae 100644
11436     --- a/include/xen/events.h
11437     +++ b/include/xen/events.h
11438     @@ -3,6 +3,7 @@
11439     #define _XEN_EVENTS_H
11440    
11441     #include <linux/interrupt.h>
11442     +#include <linux/irq.h>
11443     #ifdef CONFIG_PCI_MSI
11444     #include <linux/msi.h>
11445     #endif
11446     @@ -59,7 +60,7 @@ void evtchn_put(unsigned int evtchn);
11447    
11448     void xen_send_IPI_one(unsigned int cpu, enum ipi_vector vector);
11449     void rebind_evtchn_irq(int evtchn, int irq);
11450     -int xen_rebind_evtchn_to_cpu(int evtchn, unsigned tcpu);
11451     +int xen_set_affinity_evtchn(struct irq_desc *desc, unsigned int tcpu);
11452    
11453     static inline void notify_remote_via_evtchn(int port)
11454     {
11455     diff --git a/kernel/bpf/Makefile b/kernel/bpf/Makefile
11456     index 0488b8258321..ffc39a7e028d 100644
11457     --- a/kernel/bpf/Makefile
11458     +++ b/kernel/bpf/Makefile
11459     @@ -1,5 +1,6 @@
11460     # SPDX-License-Identifier: GPL-2.0
11461     obj-y := core.o
11462     +CFLAGS_core.o += $(call cc-disable-warning, override-init)
11463    
11464     obj-$(CONFIG_BPF_SYSCALL) += syscall.o verifier.o inode.o helpers.o tnum.o
11465     obj-$(CONFIG_BPF_SYSCALL) += hashtab.o arraymap.o percpu_freelist.o bpf_lru_list.o lpm_trie.o map_in_map.o
11466     diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
11467     index 26b57e24476f..e810e8cb17e1 100644
11468     --- a/kernel/locking/lockdep.c
11469     +++ b/kernel/locking/lockdep.c
11470     @@ -3326,17 +3326,17 @@ static int __lock_acquire(struct lockdep_map *lock, unsigned int subclass,
11471     if (depth) {
11472     hlock = curr->held_locks + depth - 1;
11473     if (hlock->class_idx == class_idx && nest_lock) {
11474     - if (hlock->references) {
11475     - /*
11476     - * Check: unsigned int references:12, overflow.
11477     - */
11478     - if (DEBUG_LOCKS_WARN_ON(hlock->references == (1 << 12)-1))
11479     - return 0;
11480     + if (!references)
11481     + references++;
11482    
11483     + if (!hlock->references)
11484     hlock->references++;
11485     - } else {
11486     - hlock->references = 2;
11487     - }
11488     +
11489     + hlock->references += references;
11490     +
11491     + /* Overflow */
11492     + if (DEBUG_LOCKS_WARN_ON(hlock->references < references))
11493     + return 0;
11494    
11495     return 1;
11496     }
11497     diff --git a/kernel/padata.c b/kernel/padata.c
11498     index d568cc56405f..6c06b3039fae 100644
11499     --- a/kernel/padata.c
11500     +++ b/kernel/padata.c
11501     @@ -267,7 +267,12 @@ static void padata_reorder(struct parallel_data *pd)
11502     * The next object that needs serialization might have arrived to
11503     * the reorder queues in the meantime, we will be called again
11504     * from the timer function if no one else cares for it.
11505     + *
11506     + * Ensure reorder_objects is read after pd->lock is dropped so we see
11507     + * an increment from another task in padata_do_serial. Pairs with
11508     + * smp_mb__after_atomic in padata_do_serial.
11509     */
11510     + smp_mb();
11511     if (atomic_read(&pd->reorder_objects)
11512     && !(pinst->flags & PADATA_RESET))
11513     mod_timer(&pd->timer, jiffies + HZ);
11514     @@ -387,6 +392,13 @@ void padata_do_serial(struct padata_priv *padata)
11515     list_add_tail(&padata->list, &pqueue->reorder.list);
11516     spin_unlock(&pqueue->reorder.lock);
11517    
11518     + /*
11519     + * Ensure the atomic_inc of reorder_objects above is ordered correctly
11520     + * with the trylock of pd->lock in padata_reorder. Pairs with smp_mb
11521     + * in padata_reorder.
11522     + */
11523     + smp_mb__after_atomic();
11524     +
11525     put_cpu();
11526    
11527     /* If we're running on the wrong CPU, call padata_reorder() via a
11528     diff --git a/kernel/pid_namespace.c b/kernel/pid_namespace.c
11529     index 2a2ac53d8b8b..95271f180687 100644
11530     --- a/kernel/pid_namespace.c
11531     +++ b/kernel/pid_namespace.c
11532     @@ -325,7 +325,7 @@ int reboot_pid_ns(struct pid_namespace *pid_ns, int cmd)
11533     }
11534    
11535     read_lock(&tasklist_lock);
11536     - force_sig(SIGKILL, pid_ns->child_reaper);
11537     + send_sig(SIGKILL, pid_ns->child_reaper, 1);
11538     read_unlock(&tasklist_lock);
11539    
11540     do_exit(0);
11541     diff --git a/kernel/sched/core.c b/kernel/sched/core.c
11542     index 6859ea1d5c04..795c63ca44a9 100644
11543     --- a/kernel/sched/core.c
11544     +++ b/kernel/sched/core.c
11545     @@ -5133,7 +5133,7 @@ long __sched io_schedule_timeout(long timeout)
11546     }
11547     EXPORT_SYMBOL(io_schedule_timeout);
11548    
11549     -void io_schedule(void)
11550     +void __sched io_schedule(void)
11551     {
11552     int token;
11553    
11554     diff --git a/kernel/sched/sched-pelt.h b/kernel/sched/sched-pelt.h
11555     index a26473674fb7..c529706bed11 100644
11556     --- a/kernel/sched/sched-pelt.h
11557     +++ b/kernel/sched/sched-pelt.h
11558     @@ -1,7 +1,7 @@
11559     /* SPDX-License-Identifier: GPL-2.0 */
11560     /* Generated by Documentation/scheduler/sched-pelt; do not modify. */
11561    
11562     -static const u32 runnable_avg_yN_inv[] = {
11563     +static const u32 runnable_avg_yN_inv[] __maybe_unused = {
11564     0xffffffff, 0xfa83b2da, 0xf5257d14, 0xefe4b99a, 0xeac0c6e6, 0xe5b906e6,
11565     0xe0ccdeeb, 0xdbfbb796, 0xd744fcc9, 0xd2a81d91, 0xce248c14, 0xc9b9bd85,
11566     0xc5672a10, 0xc12c4cc9, 0xbd08a39e, 0xb8fbaf46, 0xb504f333, 0xb123f581,
11567     diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
11568     index 6b23cd584295..e1110a7bd3e6 100644
11569     --- a/kernel/time/ntp.c
11570     +++ b/kernel/time/ntp.c
11571     @@ -43,6 +43,7 @@ static u64 tick_length_base;
11572     #define MAX_TICKADJ 500LL /* usecs */
11573     #define MAX_TICKADJ_SCALED \
11574     (((MAX_TICKADJ * NSEC_PER_USEC) << NTP_SCALE_SHIFT) / NTP_INTERVAL_FREQ)
11575     +#define MAX_TAI_OFFSET 100000
11576    
11577     /*
11578     * phase-lock loop variables
11579     @@ -698,7 +699,8 @@ static inline void process_adjtimex_modes(const struct timex *txc, s32 *time_tai
11580     time_constant = max(time_constant, 0l);
11581     }
11582    
11583     - if (txc->modes & ADJ_TAI && txc->constant >= 0)
11584     + if (txc->modes & ADJ_TAI &&
11585     + txc->constant >= 0 && txc->constant <= MAX_TAI_OFFSET)
11586     *time_tai = txc->constant;
11587    
11588     if (txc->modes & ADJ_OFFSET)
11589     diff --git a/kernel/time/timer_list.c b/kernel/time/timer_list.c
11590     index d647dabdac97..07afcfe2a61b 100644
11591     --- a/kernel/time/timer_list.c
11592     +++ b/kernel/time/timer_list.c
11593     @@ -287,23 +287,6 @@ static inline void timer_list_header(struct seq_file *m, u64 now)
11594     SEQ_printf(m, "\n");
11595     }
11596    
11597     -static int timer_list_show(struct seq_file *m, void *v)
11598     -{
11599     - struct timer_list_iter *iter = v;
11600     -
11601     - if (iter->cpu == -1 && !iter->second_pass)
11602     - timer_list_header(m, iter->now);
11603     - else if (!iter->second_pass)
11604     - print_cpu(m, iter->cpu, iter->now);
11605     -#ifdef CONFIG_GENERIC_CLOCKEVENTS
11606     - else if (iter->cpu == -1 && iter->second_pass)
11607     - timer_list_show_tickdevices_header(m);
11608     - else
11609     - print_tickdevice(m, tick_get_device(iter->cpu), iter->cpu);
11610     -#endif
11611     - return 0;
11612     -}
11613     -
11614     void sysrq_timer_list_show(void)
11615     {
11616     u64 now = ktime_to_ns(ktime_get());
11617     @@ -322,6 +305,24 @@ void sysrq_timer_list_show(void)
11618     return;
11619     }
11620    
11621     +#ifdef CONFIG_PROC_FS
11622     +static int timer_list_show(struct seq_file *m, void *v)
11623     +{
11624     + struct timer_list_iter *iter = v;
11625     +
11626     + if (iter->cpu == -1 && !iter->second_pass)
11627     + timer_list_header(m, iter->now);
11628     + else if (!iter->second_pass)
11629     + print_cpu(m, iter->cpu, iter->now);
11630     +#ifdef CONFIG_GENERIC_CLOCKEVENTS
11631     + else if (iter->cpu == -1 && iter->second_pass)
11632     + timer_list_show_tickdevices_header(m);
11633     + else
11634     + print_tickdevice(m, tick_get_device(iter->cpu), iter->cpu);
11635     +#endif
11636     + return 0;
11637     +}
11638     +
11639     static void *move_iter(struct timer_list_iter *iter, loff_t offset)
11640     {
11641     for (; offset; offset--) {
11642     @@ -381,3 +382,4 @@ static int __init init_timer_list_procfs(void)
11643     return 0;
11644     }
11645     __initcall(init_timer_list_procfs);
11646     +#endif
11647     diff --git a/lib/reed_solomon/decode_rs.c b/lib/reed_solomon/decode_rs.c
11648     index 1db74eb098d0..121beb2f0930 100644
11649     --- a/lib/reed_solomon/decode_rs.c
11650     +++ b/lib/reed_solomon/decode_rs.c
11651     @@ -42,8 +42,18 @@
11652     BUG_ON(pad < 0 || pad >= nn);
11653    
11654     /* Does the caller provide the syndrome ? */
11655     - if (s != NULL)
11656     - goto decode;
11657     + if (s != NULL) {
11658     + for (i = 0; i < nroots; i++) {
11659     + /* The syndrome is in index form,
11660     + * so nn represents zero
11661     + */
11662     + if (s[i] != nn)
11663     + goto decode;
11664     + }
11665     +
11666     + /* syndrome is zero, no errors to correct */
11667     + return 0;
11668     + }
11669    
11670     /* form the syndromes; i.e., evaluate data(x) at roots of
11671     * g(x) */
11672     @@ -99,9 +109,9 @@
11673     if (no_eras > 0) {
11674     /* Init lambda to be the erasure locator polynomial */
11675     lambda[1] = alpha_to[rs_modnn(rs,
11676     - prim * (nn - 1 - eras_pos[0]))];
11677     + prim * (nn - 1 - (eras_pos[0] + pad)))];
11678     for (i = 1; i < no_eras; i++) {
11679     - u = rs_modnn(rs, prim * (nn - 1 - eras_pos[i]));
11680     + u = rs_modnn(rs, prim * (nn - 1 - (eras_pos[i] + pad)));
11681     for (j = i + 1; j > 0; j--) {
11682     tmp = index_of[lambda[j - 1]];
11683     if (tmp != nn) {
11684     diff --git a/lib/scatterlist.c b/lib/scatterlist.c
11685     index 7c6096a71704..8c3036c37ba0 100644
11686     --- a/lib/scatterlist.c
11687     +++ b/lib/scatterlist.c
11688     @@ -652,17 +652,18 @@ static bool sg_miter_get_next_page(struct sg_mapping_iter *miter)
11689     {
11690     if (!miter->__remaining) {
11691     struct scatterlist *sg;
11692     - unsigned long pgoffset;
11693    
11694     if (!__sg_page_iter_next(&miter->piter))
11695     return false;
11696    
11697     sg = miter->piter.sg;
11698     - pgoffset = miter->piter.sg_pgoffset;
11699    
11700     - miter->__offset = pgoffset ? 0 : sg->offset;
11701     + miter->__offset = miter->piter.sg_pgoffset ? 0 : sg->offset;
11702     + miter->piter.sg_pgoffset += miter->__offset >> PAGE_SHIFT;
11703     + miter->__offset &= PAGE_SIZE - 1;
11704     miter->__remaining = sg->offset + sg->length -
11705     - (pgoffset << PAGE_SHIFT) - miter->__offset;
11706     + (miter->piter.sg_pgoffset << PAGE_SHIFT) -
11707     + miter->__offset;
11708     miter->__remaining = min_t(unsigned long, miter->__remaining,
11709     PAGE_SIZE - miter->__offset);
11710     }
11711     diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c
11712     index eb596c2ed546..849336211c79 100644
11713     --- a/net/9p/trans_virtio.c
11714     +++ b/net/9p/trans_virtio.c
11715     @@ -782,10 +782,16 @@ static struct p9_trans_module p9_virtio_trans = {
11716     /* The standard init function */
11717     static int __init p9_virtio_init(void)
11718     {
11719     + int rc;
11720     +
11721     INIT_LIST_HEAD(&virtio_chan_list);
11722    
11723     v9fs_register_trans(&p9_virtio_trans);
11724     - return register_virtio_driver(&p9_virtio_drv);
11725     + rc = register_virtio_driver(&p9_virtio_drv);
11726     + if (rc)
11727     + v9fs_unregister_trans(&p9_virtio_trans);
11728     +
11729     + return rc;
11730     }
11731    
11732     static void __exit p9_virtio_cleanup(void)
11733     diff --git a/net/9p/trans_xen.c b/net/9p/trans_xen.c
11734     index e2fbf3677b9b..9daab0dd833b 100644
11735     --- a/net/9p/trans_xen.c
11736     +++ b/net/9p/trans_xen.c
11737     @@ -530,13 +530,19 @@ static struct xenbus_driver xen_9pfs_front_driver = {
11738    
11739     static int p9_trans_xen_init(void)
11740     {
11741     + int rc;
11742     +
11743     if (!xen_domain())
11744     return -ENODEV;
11745    
11746     pr_info("Initialising Xen transport for 9pfs\n");
11747    
11748     v9fs_register_trans(&p9_xen_trans);
11749     - return xenbus_register_frontend(&xen_9pfs_front_driver);
11750     + rc = xenbus_register_frontend(&xen_9pfs_front_driver);
11751     + if (rc)
11752     + v9fs_unregister_trans(&p9_xen_trans);
11753     +
11754     + return rc;
11755     }
11756     module_init(p9_trans_xen_init);
11757    
11758     diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c
11759     index 73bf6a93a3cf..0b7b36fa0d5c 100644
11760     --- a/net/batman-adv/bat_iv_ogm.c
11761     +++ b/net/batman-adv/bat_iv_ogm.c
11762     @@ -2485,7 +2485,7 @@ batadv_iv_ogm_neigh_is_sob(struct batadv_neigh_node *neigh1,
11763     return ret;
11764     }
11765    
11766     -static void batadv_iv_iface_activate(struct batadv_hard_iface *hard_iface)
11767     +static void batadv_iv_iface_enabled(struct batadv_hard_iface *hard_iface)
11768     {
11769     /* begin scheduling originator messages on that interface */
11770     batadv_iv_ogm_schedule(hard_iface);
11771     @@ -2825,8 +2825,8 @@ unlock:
11772     static struct batadv_algo_ops batadv_batman_iv __read_mostly = {
11773     .name = "BATMAN_IV",
11774     .iface = {
11775     - .activate = batadv_iv_iface_activate,
11776     .enable = batadv_iv_ogm_iface_enable,
11777     + .enabled = batadv_iv_iface_enabled,
11778     .disable = batadv_iv_ogm_iface_disable,
11779     .update_mac = batadv_iv_ogm_iface_update_mac,
11780     .primary_set = batadv_iv_ogm_primary_iface_set,
11781     diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
11782     index 08690d06b7be..36f0962040d1 100644
11783     --- a/net/batman-adv/hard-interface.c
11784     +++ b/net/batman-adv/hard-interface.c
11785     @@ -821,6 +821,9 @@ int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface,
11786    
11787     batadv_hardif_recalc_extra_skbroom(soft_iface);
11788    
11789     + if (bat_priv->algo_ops->iface.enabled)
11790     + bat_priv->algo_ops->iface.enabled(hard_iface);
11791     +
11792     out:
11793     return 0;
11794    
11795     diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c
11796     index 359ec1a6e822..9fa5389ea244 100644
11797     --- a/net/batman-adv/translation-table.c
11798     +++ b/net/batman-adv/translation-table.c
11799     @@ -3821,6 +3821,8 @@ static void batadv_tt_purge(struct work_struct *work)
11800     */
11801     void batadv_tt_free(struct batadv_priv *bat_priv)
11802     {
11803     + batadv_tvlv_handler_unregister(bat_priv, BATADV_TVLV_ROAM, 1);
11804     +
11805     batadv_tvlv_container_unregister(bat_priv, BATADV_TVLV_TT, 1);
11806     batadv_tvlv_handler_unregister(bat_priv, BATADV_TVLV_TT, 1);
11807    
11808     diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h
11809     index eeee3e61c625..fdba8a144d73 100644
11810     --- a/net/batman-adv/types.h
11811     +++ b/net/batman-adv/types.h
11812     @@ -2130,6 +2130,9 @@ struct batadv_algo_iface_ops {
11813     /** @enable: init routing info when hard-interface is enabled */
11814     int (*enable)(struct batadv_hard_iface *hard_iface);
11815    
11816     + /** @enabled: notification when hard-interface was enabled (optional) */
11817     + void (*enabled)(struct batadv_hard_iface *hard_iface);
11818     +
11819     /** @disable: de-init routing info when hard-interface is disabled */
11820     void (*disable)(struct batadv_hard_iface *hard_iface);
11821    
11822     diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c
11823     index 4e2576fc0c59..357475cceec6 100644
11824     --- a/net/bluetooth/6lowpan.c
11825     +++ b/net/bluetooth/6lowpan.c
11826     @@ -187,10 +187,16 @@ static inline struct lowpan_peer *peer_lookup_dst(struct lowpan_btle_dev *dev,
11827     }
11828    
11829     if (!rt) {
11830     - nexthop = &lowpan_cb(skb)->gw;
11831     -
11832     - if (ipv6_addr_any(nexthop))
11833     - return NULL;
11834     + if (ipv6_addr_any(&lowpan_cb(skb)->gw)) {
11835     + /* There is neither route nor gateway,
11836     + * probably the destination is a direct peer.
11837     + */
11838     + nexthop = daddr;
11839     + } else {
11840     + /* There is a known gateway
11841     + */
11842     + nexthop = &lowpan_cb(skb)->gw;
11843     + }
11844     } else {
11845     nexthop = rt6_nexthop(rt, daddr);
11846    
11847     diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
11848     index 3e7badb3ac2d..0adcddb211fa 100644
11849     --- a/net/bluetooth/hci_event.c
11850     +++ b/net/bluetooth/hci_event.c
11851     @@ -5545,6 +5545,11 @@ static void hci_le_remote_conn_param_req_evt(struct hci_dev *hdev,
11852     return send_conn_param_neg_reply(hdev, handle,
11853     HCI_ERROR_UNKNOWN_CONN_ID);
11854    
11855     + if (min < hcon->le_conn_min_interval ||
11856     + max > hcon->le_conn_max_interval)
11857     + return send_conn_param_neg_reply(hdev, handle,
11858     + HCI_ERROR_INVALID_LL_PARAMS);
11859     +
11860     if (hci_check_conn_params(min, max, latency, timeout))
11861     return send_conn_param_neg_reply(hdev, handle,
11862     HCI_ERROR_INVALID_LL_PARAMS);
11863     diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
11864     index 879d5432bf77..a54dadf4a6ca 100644
11865     --- a/net/bluetooth/l2cap_core.c
11866     +++ b/net/bluetooth/l2cap_core.c
11867     @@ -4384,6 +4384,12 @@ static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn,
11868    
11869     l2cap_chan_lock(chan);
11870    
11871     + if (chan->state != BT_DISCONN) {
11872     + l2cap_chan_unlock(chan);
11873     + mutex_unlock(&conn->chan_lock);
11874     + return 0;
11875     + }
11876     +
11877     l2cap_chan_hold(chan);
11878     l2cap_chan_del(chan, 0);
11879    
11880     @@ -5281,7 +5287,14 @@ static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
11881    
11882     memset(&rsp, 0, sizeof(rsp));
11883    
11884     - err = hci_check_conn_params(min, max, latency, to_multiplier);
11885     + if (min < hcon->le_conn_min_interval ||
11886     + max > hcon->le_conn_max_interval) {
11887     + BT_DBG("requested connection interval exceeds current bounds.");
11888     + err = -EINVAL;
11889     + } else {
11890     + err = hci_check_conn_params(min, max, latency, to_multiplier);
11891     + }
11892     +
11893     if (err)
11894     rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
11895     else
11896     diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
11897     index a1c1b7e8a45c..cc2f7ca91ccd 100644
11898     --- a/net/bluetooth/smp.c
11899     +++ b/net/bluetooth/smp.c
11900     @@ -2580,6 +2580,19 @@ static int smp_cmd_ident_addr_info(struct l2cap_conn *conn,
11901     goto distribute;
11902     }
11903    
11904     + /* Drop IRK if peer is using identity address during pairing but is
11905     + * providing different address as identity information.
11906     + *
11907     + * Microsoft Surface Precision Mouse is known to have this bug.
11908     + */
11909     + if (hci_is_identity_address(&hcon->dst, hcon->dst_type) &&
11910     + (bacmp(&info->bdaddr, &hcon->dst) ||
11911     + info->addr_type != hcon->dst_type)) {
11912     + bt_dev_err(hcon->hdev,
11913     + "ignoring IRK with invalid identity address");
11914     + goto distribute;
11915     + }
11916     +
11917     bacpy(&smp->id_addr, &info->bdaddr);
11918     smp->id_addr_type = info->addr_type;
11919    
11920     diff --git a/net/key/af_key.c b/net/key/af_key.c
11921     index 0b79c9aa8eb1..1982f9f31deb 100644
11922     --- a/net/key/af_key.c
11923     +++ b/net/key/af_key.c
11924     @@ -2442,8 +2442,10 @@ static int key_pol_get_resp(struct sock *sk, struct xfrm_policy *xp, const struc
11925     goto out;
11926     }
11927     err = pfkey_xfrm_policy2msg(out_skb, xp, dir);
11928     - if (err < 0)
11929     + if (err < 0) {
11930     + kfree_skb(out_skb);
11931     goto out;
11932     + }
11933    
11934     out_hdr = (struct sadb_msg *) out_skb->data;
11935     out_hdr->sadb_msg_version = hdr->sadb_msg_version;
11936     @@ -2694,8 +2696,10 @@ static int dump_sp(struct xfrm_policy *xp, int dir, int count, void *ptr)
11937     return PTR_ERR(out_skb);
11938    
11939     err = pfkey_xfrm_policy2msg(out_skb, xp, dir);
11940     - if (err < 0)
11941     + if (err < 0) {
11942     + kfree_skb(out_skb);
11943     return err;
11944     + }
11945    
11946     out_hdr = (struct sadb_msg *) out_skb->data;
11947     out_hdr->sadb_msg_version = pfk->dump.msg_version;
11948     diff --git a/net/netfilter/ipset/ip_set_hash_gen.h b/net/netfilter/ipset/ip_set_hash_gen.h
11949     index 8a33dac4e805..ddfe06d7530b 100644
11950     --- a/net/netfilter/ipset/ip_set_hash_gen.h
11951     +++ b/net/netfilter/ipset/ip_set_hash_gen.h
11952     @@ -625,7 +625,7 @@ retry:
11953     goto cleanup;
11954     }
11955     m->size = AHASH_INIT_SIZE;
11956     - extsize = ext_size(AHASH_INIT_SIZE, dsize);
11957     + extsize += ext_size(AHASH_INIT_SIZE, dsize);
11958     RCU_INIT_POINTER(hbucket(t, key), m);
11959     } else if (m->pos >= m->size) {
11960     struct hbucket *ht;
11961     diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
11962     index 62c0e80dcd71..a71f777d1353 100644
11963     --- a/net/netfilter/ipvs/ip_vs_core.c
11964     +++ b/net/netfilter/ipvs/ip_vs_core.c
11965     @@ -2218,7 +2218,6 @@ static const struct nf_hook_ops ip_vs_ops[] = {
11966     static int __net_init __ip_vs_init(struct net *net)
11967     {
11968     struct netns_ipvs *ipvs;
11969     - int ret;
11970    
11971     ipvs = net_generic(net, ip_vs_net_id);
11972     if (ipvs == NULL)
11973     @@ -2250,17 +2249,11 @@ static int __net_init __ip_vs_init(struct net *net)
11974     if (ip_vs_sync_net_init(ipvs) < 0)
11975     goto sync_fail;
11976    
11977     - ret = nf_register_net_hooks(net, ip_vs_ops, ARRAY_SIZE(ip_vs_ops));
11978     - if (ret < 0)
11979     - goto hook_fail;
11980     -
11981     return 0;
11982     /*
11983     * Error handling
11984     */
11985    
11986     -hook_fail:
11987     - ip_vs_sync_net_cleanup(ipvs);
11988     sync_fail:
11989     ip_vs_conn_net_cleanup(ipvs);
11990     conn_fail:
11991     @@ -2290,6 +2283,19 @@ static void __net_exit __ip_vs_cleanup(struct net *net)
11992     net->ipvs = NULL;
11993     }
11994    
11995     +static int __net_init __ip_vs_dev_init(struct net *net)
11996     +{
11997     + int ret;
11998     +
11999     + ret = nf_register_net_hooks(net, ip_vs_ops, ARRAY_SIZE(ip_vs_ops));
12000     + if (ret < 0)
12001     + goto hook_fail;
12002     + return 0;
12003     +
12004     +hook_fail:
12005     + return ret;
12006     +}
12007     +
12008     static void __net_exit __ip_vs_dev_cleanup(struct net *net)
12009     {
12010     struct netns_ipvs *ipvs = net_ipvs(net);
12011     @@ -2309,6 +2315,7 @@ static struct pernet_operations ipvs_core_ops = {
12012     };
12013    
12014     static struct pernet_operations ipvs_core_dev_ops = {
12015     + .init = __ip_vs_dev_init,
12016     .exit = __ip_vs_dev_cleanup,
12017     };
12018    
12019     diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
12020     index 2d4e048762f6..3df94a499126 100644
12021     --- a/net/netfilter/ipvs/ip_vs_ctl.c
12022     +++ b/net/netfilter/ipvs/ip_vs_ctl.c
12023     @@ -2382,9 +2382,7 @@ do_ip_vs_set_ctl(struct sock *sk, int cmd, void __user *user, unsigned int len)
12024     cfg.syncid = dm->syncid;
12025     ret = start_sync_thread(ipvs, &cfg, dm->state);
12026     } else {
12027     - mutex_lock(&ipvs->sync_mutex);
12028     ret = stop_sync_thread(ipvs, dm->state);
12029     - mutex_unlock(&ipvs->sync_mutex);
12030     }
12031     goto out_dec;
12032     }
12033     @@ -3492,10 +3490,8 @@ static int ip_vs_genl_del_daemon(struct netns_ipvs *ipvs, struct nlattr **attrs)
12034     if (!attrs[IPVS_DAEMON_ATTR_STATE])
12035     return -EINVAL;
12036    
12037     - mutex_lock(&ipvs->sync_mutex);
12038     ret = stop_sync_thread(ipvs,
12039     nla_get_u32(attrs[IPVS_DAEMON_ATTR_STATE]));
12040     - mutex_unlock(&ipvs->sync_mutex);
12041     return ret;
12042     }
12043    
12044     diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c
12045     index d4020c5e831d..ecb71062fcb3 100644
12046     --- a/net/netfilter/ipvs/ip_vs_sync.c
12047     +++ b/net/netfilter/ipvs/ip_vs_sync.c
12048     @@ -195,6 +195,7 @@ union ip_vs_sync_conn {
12049     #define IPVS_OPT_F_PARAM (1 << (IPVS_OPT_PARAM-1))
12050    
12051     struct ip_vs_sync_thread_data {
12052     + struct task_struct *task;
12053     struct netns_ipvs *ipvs;
12054     struct socket *sock;
12055     char *buf;
12056     @@ -374,8 +375,11 @@ static inline void sb_queue_tail(struct netns_ipvs *ipvs,
12057     max(IPVS_SYNC_SEND_DELAY, 1));
12058     ms->sync_queue_len++;
12059     list_add_tail(&sb->list, &ms->sync_queue);
12060     - if ((++ms->sync_queue_delay) == IPVS_SYNC_WAKEUP_RATE)
12061     - wake_up_process(ms->master_thread);
12062     + if ((++ms->sync_queue_delay) == IPVS_SYNC_WAKEUP_RATE) {
12063     + int id = (int)(ms - ipvs->ms);
12064     +
12065     + wake_up_process(ipvs->master_tinfo[id].task);
12066     + }
12067     } else
12068     ip_vs_sync_buff_release(sb);
12069     spin_unlock(&ipvs->sync_lock);
12070     @@ -1636,8 +1640,10 @@ static void master_wakeup_work_handler(struct work_struct *work)
12071     spin_lock_bh(&ipvs->sync_lock);
12072     if (ms->sync_queue_len &&
12073     ms->sync_queue_delay < IPVS_SYNC_WAKEUP_RATE) {
12074     + int id = (int)(ms - ipvs->ms);
12075     +
12076     ms->sync_queue_delay = IPVS_SYNC_WAKEUP_RATE;
12077     - wake_up_process(ms->master_thread);
12078     + wake_up_process(ipvs->master_tinfo[id].task);
12079     }
12080     spin_unlock_bh(&ipvs->sync_lock);
12081     }
12082     @@ -1703,10 +1709,6 @@ done:
12083     if (sb)
12084     ip_vs_sync_buff_release(sb);
12085    
12086     - /* release the sending multicast socket */
12087     - sock_release(tinfo->sock);
12088     - kfree(tinfo);
12089     -
12090     return 0;
12091     }
12092    
12093     @@ -1740,11 +1742,6 @@ static int sync_thread_backup(void *data)
12094     }
12095     }
12096    
12097     - /* release the sending multicast socket */
12098     - sock_release(tinfo->sock);
12099     - kfree(tinfo->buf);
12100     - kfree(tinfo);
12101     -
12102     return 0;
12103     }
12104    
12105     @@ -1752,8 +1749,8 @@ static int sync_thread_backup(void *data)
12106     int start_sync_thread(struct netns_ipvs *ipvs, struct ipvs_sync_daemon_cfg *c,
12107     int state)
12108     {
12109     - struct ip_vs_sync_thread_data *tinfo = NULL;
12110     - struct task_struct **array = NULL, *task;
12111     + struct ip_vs_sync_thread_data *ti = NULL, *tinfo;
12112     + struct task_struct *task;
12113     struct net_device *dev;
12114     char *name;
12115     int (*threadfn)(void *data);
12116     @@ -1822,7 +1819,7 @@ int start_sync_thread(struct netns_ipvs *ipvs, struct ipvs_sync_daemon_cfg *c,
12117     threadfn = sync_thread_master;
12118     } else if (state == IP_VS_STATE_BACKUP) {
12119     result = -EEXIST;
12120     - if (ipvs->backup_threads)
12121     + if (ipvs->backup_tinfo)
12122     goto out_early;
12123    
12124     ipvs->bcfg = *c;
12125     @@ -1849,28 +1846,22 @@ int start_sync_thread(struct netns_ipvs *ipvs, struct ipvs_sync_daemon_cfg *c,
12126     master_wakeup_work_handler);
12127     ms->ipvs = ipvs;
12128     }
12129     - } else {
12130     - array = kcalloc(count, sizeof(struct task_struct *),
12131     - GFP_KERNEL);
12132     - result = -ENOMEM;
12133     - if (!array)
12134     - goto out;
12135     }
12136     + result = -ENOMEM;
12137     + ti = kcalloc(count, sizeof(struct ip_vs_sync_thread_data),
12138     + GFP_KERNEL);
12139     + if (!ti)
12140     + goto out;
12141    
12142     for (id = 0; id < count; id++) {
12143     - result = -ENOMEM;
12144     - tinfo = kmalloc(sizeof(*tinfo), GFP_KERNEL);
12145     - if (!tinfo)
12146     - goto out;
12147     + tinfo = &ti[id];
12148     tinfo->ipvs = ipvs;
12149     - tinfo->sock = NULL;
12150     if (state == IP_VS_STATE_BACKUP) {
12151     + result = -ENOMEM;
12152     tinfo->buf = kmalloc(ipvs->bcfg.sync_maxlen,
12153     GFP_KERNEL);
12154     if (!tinfo->buf)
12155     goto out;
12156     - } else {
12157     - tinfo->buf = NULL;
12158     }
12159     tinfo->id = id;
12160     if (state == IP_VS_STATE_MASTER)
12161     @@ -1885,17 +1876,15 @@ int start_sync_thread(struct netns_ipvs *ipvs, struct ipvs_sync_daemon_cfg *c,
12162     result = PTR_ERR(task);
12163     goto out;
12164     }
12165     - tinfo = NULL;
12166     - if (state == IP_VS_STATE_MASTER)
12167     - ipvs->ms[id].master_thread = task;
12168     - else
12169     - array[id] = task;
12170     + tinfo->task = task;
12171     }
12172    
12173     /* mark as active */
12174    
12175     - if (state == IP_VS_STATE_BACKUP)
12176     - ipvs->backup_threads = array;
12177     + if (state == IP_VS_STATE_MASTER)
12178     + ipvs->master_tinfo = ti;
12179     + else
12180     + ipvs->backup_tinfo = ti;
12181     spin_lock_bh(&ipvs->sync_buff_lock);
12182     ipvs->sync_state |= state;
12183     spin_unlock_bh(&ipvs->sync_buff_lock);
12184     @@ -1910,29 +1899,31 @@ int start_sync_thread(struct netns_ipvs *ipvs, struct ipvs_sync_daemon_cfg *c,
12185    
12186     out:
12187     /* We do not need RTNL lock anymore, release it here so that
12188     - * sock_release below and in the kthreads can use rtnl_lock
12189     - * to leave the mcast group.
12190     + * sock_release below can use rtnl_lock to leave the mcast group.
12191     */
12192     rtnl_unlock();
12193     - count = id;
12194     - while (count-- > 0) {
12195     - if (state == IP_VS_STATE_MASTER)
12196     - kthread_stop(ipvs->ms[count].master_thread);
12197     - else
12198     - kthread_stop(array[count]);
12199     + id = min(id, count - 1);
12200     + if (ti) {
12201     + for (tinfo = ti + id; tinfo >= ti; tinfo--) {
12202     + if (tinfo->task)
12203     + kthread_stop(tinfo->task);
12204     + }
12205     }
12206     if (!(ipvs->sync_state & IP_VS_STATE_MASTER)) {
12207     kfree(ipvs->ms);
12208     ipvs->ms = NULL;
12209     }
12210     mutex_unlock(&ipvs->sync_mutex);
12211     - if (tinfo) {
12212     - if (tinfo->sock)
12213     - sock_release(tinfo->sock);
12214     - kfree(tinfo->buf);
12215     - kfree(tinfo);
12216     +
12217     + /* No more mutexes, release socks */
12218     + if (ti) {
12219     + for (tinfo = ti + id; tinfo >= ti; tinfo--) {
12220     + if (tinfo->sock)
12221     + sock_release(tinfo->sock);
12222     + kfree(tinfo->buf);
12223     + }
12224     + kfree(ti);
12225     }
12226     - kfree(array);
12227     return result;
12228    
12229     out_early:
12230     @@ -1944,15 +1935,18 @@ out_early:
12231    
12232     int stop_sync_thread(struct netns_ipvs *ipvs, int state)
12233     {
12234     - struct task_struct **array;
12235     + struct ip_vs_sync_thread_data *ti, *tinfo;
12236     int id;
12237     int retc = -EINVAL;
12238    
12239     IP_VS_DBG(7, "%s(): pid %d\n", __func__, task_pid_nr(current));
12240    
12241     + mutex_lock(&ipvs->sync_mutex);
12242     if (state == IP_VS_STATE_MASTER) {
12243     + retc = -ESRCH;
12244     if (!ipvs->ms)
12245     - return -ESRCH;
12246     + goto err;
12247     + ti = ipvs->master_tinfo;
12248    
12249     /*
12250     * The lock synchronizes with sb_queue_tail(), so that we don't
12251     @@ -1971,38 +1965,56 @@ int stop_sync_thread(struct netns_ipvs *ipvs, int state)
12252     struct ipvs_master_sync_state *ms = &ipvs->ms[id];
12253     int ret;
12254    
12255     + tinfo = &ti[id];
12256     pr_info("stopping master sync thread %d ...\n",
12257     - task_pid_nr(ms->master_thread));
12258     + task_pid_nr(tinfo->task));
12259     cancel_delayed_work_sync(&ms->master_wakeup_work);
12260     - ret = kthread_stop(ms->master_thread);
12261     + ret = kthread_stop(tinfo->task);
12262     if (retc >= 0)
12263     retc = ret;
12264     }
12265     kfree(ipvs->ms);
12266     ipvs->ms = NULL;
12267     + ipvs->master_tinfo = NULL;
12268     } else if (state == IP_VS_STATE_BACKUP) {
12269     - if (!ipvs->backup_threads)
12270     - return -ESRCH;
12271     + retc = -ESRCH;
12272     + if (!ipvs->backup_tinfo)
12273     + goto err;
12274     + ti = ipvs->backup_tinfo;
12275    
12276     ipvs->sync_state &= ~IP_VS_STATE_BACKUP;
12277     - array = ipvs->backup_threads;
12278     retc = 0;
12279     for (id = ipvs->threads_mask; id >= 0; id--) {
12280     int ret;
12281    
12282     + tinfo = &ti[id];
12283     pr_info("stopping backup sync thread %d ...\n",
12284     - task_pid_nr(array[id]));
12285     - ret = kthread_stop(array[id]);
12286     + task_pid_nr(tinfo->task));
12287     + ret = kthread_stop(tinfo->task);
12288     if (retc >= 0)
12289     retc = ret;
12290     }
12291     - kfree(array);
12292     - ipvs->backup_threads = NULL;
12293     + ipvs->backup_tinfo = NULL;
12294     + } else {
12295     + goto err;
12296     }
12297     + id = ipvs->threads_mask;
12298     + mutex_unlock(&ipvs->sync_mutex);
12299     +
12300     + /* No more mutexes, release socks */
12301     + for (tinfo = ti + id; tinfo >= ti; tinfo--) {
12302     + if (tinfo->sock)
12303     + sock_release(tinfo->sock);
12304     + kfree(tinfo->buf);
12305     + }
12306     + kfree(ti);
12307    
12308     /* decrease the module use count */
12309     ip_vs_use_count_dec();
12310     + return retc;
12311    
12312     +err:
12313     + mutex_unlock(&ipvs->sync_mutex);
12314     return retc;
12315     }
12316    
12317     @@ -2021,7 +2033,6 @@ void ip_vs_sync_net_cleanup(struct netns_ipvs *ipvs)
12318     {
12319     int retc;
12320    
12321     - mutex_lock(&ipvs->sync_mutex);
12322     retc = stop_sync_thread(ipvs, IP_VS_STATE_MASTER);
12323     if (retc && retc != -ESRCH)
12324     pr_err("Failed to stop Master Daemon\n");
12325     @@ -2029,5 +2040,4 @@ void ip_vs_sync_net_cleanup(struct netns_ipvs *ipvs)
12326     retc = stop_sync_thread(ipvs, IP_VS_STATE_BACKUP);
12327     if (retc && retc != -ESRCH)
12328     pr_err("Failed to stop Backup Daemon\n");
12329     - mutex_unlock(&ipvs->sync_mutex);
12330     }
12331     diff --git a/net/xdp/xsk_queue.h b/net/xdp/xsk_queue.h
12332     index 8a64b150be54..fe96c0d039f2 100644
12333     --- a/net/xdp/xsk_queue.h
12334     +++ b/net/xdp/xsk_queue.h
12335     @@ -239,7 +239,7 @@ static inline void xskq_produce_flush_desc(struct xsk_queue *q)
12336     /* Order producer and data */
12337     smp_wmb();
12338    
12339     - q->prod_tail = q->prod_head,
12340     + q->prod_tail = q->prod_head;
12341     WRITE_ONCE(q->ring->producer, q->prod_tail);
12342     }
12343    
12344     diff --git a/net/xfrm/Kconfig b/net/xfrm/Kconfig
12345     index 4a9ee2d83158..372c91faa283 100644
12346     --- a/net/xfrm/Kconfig
12347     +++ b/net/xfrm/Kconfig
12348     @@ -14,6 +14,8 @@ config XFRM_ALGO
12349     tristate
12350     select XFRM
12351     select CRYPTO
12352     + select CRYPTO_HASH
12353     + select CRYPTO_BLKCIPHER
12354    
12355     config XFRM_USER
12356     tristate "Transformation user configuration interface"
12357     diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
12358     index 2122f89f6155..1484bc99a537 100644
12359     --- a/net/xfrm/xfrm_user.c
12360     +++ b/net/xfrm/xfrm_user.c
12361     @@ -150,6 +150,25 @@ static int verify_newsa_info(struct xfrm_usersa_info *p,
12362    
12363     err = -EINVAL;
12364     switch (p->family) {
12365     + case AF_INET:
12366     + break;
12367     +
12368     + case AF_INET6:
12369     +#if IS_ENABLED(CONFIG_IPV6)
12370     + break;
12371     +#else
12372     + err = -EAFNOSUPPORT;
12373     + goto out;
12374     +#endif
12375     +
12376     + default:
12377     + goto out;
12378     + }
12379     +
12380     + switch (p->sel.family) {
12381     + case AF_UNSPEC:
12382     + break;
12383     +
12384     case AF_INET:
12385     if (p->sel.prefixlen_d > 32 || p->sel.prefixlen_s > 32)
12386     goto out;
12387     diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
12388     index 91d0a5c014ac..fd99ae90a618 100644
12389     --- a/scripts/kconfig/confdata.c
12390     +++ b/scripts/kconfig/confdata.c
12391     @@ -834,11 +834,12 @@ int conf_write(const char *name)
12392     "#\n"
12393     "# %s\n"
12394     "#\n", str);
12395     - } else if (!(sym->flags & SYMBOL_CHOICE)) {
12396     + } else if (!(sym->flags & SYMBOL_CHOICE) &&
12397     + !(sym->flags & SYMBOL_WRITTEN)) {
12398     sym_calc_value(sym);
12399     if (!(sym->flags & SYMBOL_WRITE))
12400     goto next;
12401     - sym->flags &= ~SYMBOL_WRITE;
12402     + sym->flags |= SYMBOL_WRITTEN;
12403    
12404     conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
12405     }
12406     @@ -1024,8 +1025,6 @@ int conf_write_autoconf(int overwrite)
12407     if (!overwrite && is_present(autoconf_name))
12408     return 0;
12409    
12410     - sym_clear_all_valid();
12411     -
12412     conf_write_dep("include/config/auto.conf.cmd");
12413    
12414     if (conf_split_config())
12415     diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h
12416     index 7c329e179007..43a87f8ea738 100644
12417     --- a/scripts/kconfig/expr.h
12418     +++ b/scripts/kconfig/expr.h
12419     @@ -141,6 +141,7 @@ struct symbol {
12420     #define SYMBOL_OPTIONAL 0x0100 /* choice is optional - values can be 'n' */
12421     #define SYMBOL_WRITE 0x0200 /* write symbol to file (KCONFIG_CONFIG) */
12422     #define SYMBOL_CHANGED 0x0400 /* ? */
12423     +#define SYMBOL_WRITTEN 0x0800 /* track info to avoid double-write to .config */
12424     #define SYMBOL_NO_WRITE 0x1000 /* Symbol for internal use only; it will not be written */
12425     #define SYMBOL_CHECKED 0x2000 /* used during dependency checking */
12426     #define SYMBOL_WARNED 0x8000 /* warning has been issued */
12427     diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
12428     index 70bad15ed7a0..109ab510bdb1 100644
12429     --- a/security/selinux/hooks.c
12430     +++ b/security/selinux/hooks.c
12431     @@ -6550,11 +6550,12 @@ static int selinux_setprocattr(const char *name, void *value, size_t size)
12432     } else if (!strcmp(name, "fscreate")) {
12433     tsec->create_sid = sid;
12434     } else if (!strcmp(name, "keycreate")) {
12435     - error = avc_has_perm(&selinux_state,
12436     - mysid, sid, SECCLASS_KEY, KEY__CREATE,
12437     - NULL);
12438     - if (error)
12439     - goto abort_change;
12440     + if (sid) {
12441     + error = avc_has_perm(&selinux_state, mysid, sid,
12442     + SECCLASS_KEY, KEY__CREATE, NULL);
12443     + if (error)
12444     + goto abort_change;
12445     + }
12446     tsec->keycreate_sid = sid;
12447     } else if (!strcmp(name, "sockcreate")) {
12448     tsec->sockcreate_sid = sid;
12449     diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
12450     index f59e13c1d84a..bbf91a5a938b 100644
12451     --- a/sound/core/seq/seq_clientmgr.c
12452     +++ b/sound/core/seq/seq_clientmgr.c
12453     @@ -1004,7 +1004,7 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
12454     {
12455     struct snd_seq_client *client = file->private_data;
12456     int written = 0, len;
12457     - int err;
12458     + int err, handled;
12459     struct snd_seq_event event;
12460    
12461     if (!(snd_seq_file_flags(file) & SNDRV_SEQ_LFLG_OUTPUT))
12462     @@ -1017,6 +1017,8 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
12463     if (!client->accept_output || client->pool == NULL)
12464     return -ENXIO;
12465    
12466     + repeat:
12467     + handled = 0;
12468     /* allocate the pool now if the pool is not allocated yet */
12469     mutex_lock(&client->ioctl_mutex);
12470     if (client->pool->size > 0 && !snd_seq_write_pool_allocated(client)) {
12471     @@ -1076,12 +1078,19 @@ static ssize_t snd_seq_write(struct file *file, const char __user *buf,
12472     0, 0, &client->ioctl_mutex);
12473     if (err < 0)
12474     break;
12475     + handled++;
12476    
12477     __skip_event:
12478     /* Update pointers and counts */
12479     count -= len;
12480     buf += len;
12481     written += len;
12482     +
12483     + /* let's have a coffee break if too many events are queued */
12484     + if (++handled >= 200) {
12485     + mutex_unlock(&client->ioctl_mutex);
12486     + goto repeat;
12487     + }
12488     }
12489    
12490     out:
12491     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
12492     index 98cfdcfce5b3..dc1989686f09 100644
12493     --- a/sound/pci/hda/patch_realtek.c
12494     +++ b/sound/pci/hda/patch_realtek.c
12495     @@ -7518,9 +7518,12 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
12496     {0x12, 0x90a60130},
12497     {0x17, 0x90170110},
12498     {0x21, 0x03211020}),
12499     - SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
12500     + SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
12501     {0x14, 0x90170110},
12502     {0x21, 0x04211020}),
12503     + SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
12504     + {0x14, 0x90170110},
12505     + {0x21, 0x04211030}),
12506     SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
12507     ALC295_STANDARD_PINS,
12508     {0x17, 0x21014020},
12509     @@ -8654,6 +8657,11 @@ static const struct snd_hda_pin_quirk alc662_pin_fixup_tbl[] = {
12510     {0x18, 0x01a19030},
12511     {0x1a, 0x01813040},
12512     {0x21, 0x01014020}),
12513     + SND_HDA_PIN_QUIRK(0x10ec0867, 0x1028, "Dell", ALC891_FIXUP_DELL_MIC_NO_PRESENCE,
12514     + {0x16, 0x01813030},
12515     + {0x17, 0x02211010},
12516     + {0x18, 0x01a19040},
12517     + {0x21, 0x01014020}),
12518     SND_HDA_PIN_QUIRK(0x10ec0662, 0x1028, "Dell", ALC662_FIXUP_DELL_MIC_NO_PRESENCE,
12519     {0x14, 0x01014010},
12520     {0x18, 0x01a19020},
12521     diff --git a/sound/soc/codecs/hdac_hdmi.c b/sound/soc/codecs/hdac_hdmi.c
12522     index 63487240b61e..098196610542 100644
12523     --- a/sound/soc/codecs/hdac_hdmi.c
12524     +++ b/sound/soc/codecs/hdac_hdmi.c
12525     @@ -1854,6 +1854,12 @@ static void hdmi_codec_remove(struct snd_soc_component *component)
12526     {
12527     struct hdac_hdmi_priv *hdmi = snd_soc_component_get_drvdata(component);
12528     struct hdac_device *hdev = hdmi->hdev;
12529     + int ret;
12530     +
12531     + ret = snd_hdac_acomp_register_notifier(hdev->bus, NULL);
12532     + if (ret < 0)
12533     + dev_err(&hdev->dev, "notifier unregister failed: err: %d\n",
12534     + ret);
12535    
12536     pm_runtime_disable(&hdev->dev);
12537     }
12538     diff --git a/sound/soc/meson/axg-tdm.h b/sound/soc/meson/axg-tdm.h
12539     index e578b6f40a07..5774ce0916d4 100644
12540     --- a/sound/soc/meson/axg-tdm.h
12541     +++ b/sound/soc/meson/axg-tdm.h
12542     @@ -40,7 +40,7 @@ struct axg_tdm_iface {
12543    
12544     static inline bool axg_tdm_lrclk_invert(unsigned int fmt)
12545     {
12546     - return (fmt & SND_SOC_DAIFMT_I2S) ^
12547     + return ((fmt & SND_SOC_DAIFMT_FORMAT_MASK) == SND_SOC_DAIFMT_I2S) ^
12548     !!(fmt & (SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_NB_IF));
12549     }
12550    
12551     diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
12552     index 2257b1b0151c..3bfc788372f3 100644
12553     --- a/sound/soc/soc-dapm.c
12554     +++ b/sound/soc/soc-dapm.c
12555     @@ -2139,23 +2139,25 @@ void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm,
12556     {
12557     struct dentry *d;
12558    
12559     - if (!parent)
12560     + if (!parent || IS_ERR(parent))
12561     return;
12562    
12563     dapm->debugfs_dapm = debugfs_create_dir("dapm", parent);
12564    
12565     - if (!dapm->debugfs_dapm) {
12566     + if (IS_ERR(dapm->debugfs_dapm)) {
12567     dev_warn(dapm->dev,
12568     - "ASoC: Failed to create DAPM debugfs directory\n");
12569     + "ASoC: Failed to create DAPM debugfs directory %ld\n",
12570     + PTR_ERR(dapm->debugfs_dapm));
12571     return;
12572     }
12573    
12574     d = debugfs_create_file("bias_level", 0444,
12575     dapm->debugfs_dapm, dapm,
12576     &dapm_bias_fops);
12577     - if (!d)
12578     + if (IS_ERR(d))
12579     dev_warn(dapm->dev,
12580     - "ASoC: Failed to create bias level debugfs file\n");
12581     + "ASoC: Failed to create bias level debugfs file: %ld\n",
12582     + PTR_ERR(d));
12583     }
12584    
12585     static void dapm_debugfs_add_widget(struct snd_soc_dapm_widget *w)
12586     @@ -2169,10 +2171,10 @@ static void dapm_debugfs_add_widget(struct snd_soc_dapm_widget *w)
12587     d = debugfs_create_file(w->name, 0444,
12588     dapm->debugfs_dapm, w,
12589     &dapm_widget_power_fops);
12590     - if (!d)
12591     + if (IS_ERR(d))
12592     dev_warn(w->dapm->dev,
12593     - "ASoC: Failed to create %s debugfs file\n",
12594     - w->name);
12595     + "ASoC: Failed to create %s debugfs file: %ld\n",
12596     + w->name, PTR_ERR(d));
12597     }
12598    
12599     static void dapm_debugfs_cleanup(struct snd_soc_dapm_context *dapm)
12600     diff --git a/tools/bpf/bpftool/jit_disasm.c b/tools/bpf/bpftool/jit_disasm.c
12601     index 87439320ef70..73d7252729fa 100644
12602     --- a/tools/bpf/bpftool/jit_disasm.c
12603     +++ b/tools/bpf/bpftool/jit_disasm.c
12604     @@ -10,6 +10,8 @@
12605     * Licensed under the GNU General Public License, version 2.0 (GPLv2)
12606     */
12607    
12608     +#define _GNU_SOURCE
12609     +#include <stdio.h>
12610     #include <stdarg.h>
12611     #include <stdint.h>
12612     #include <stdio.h>
12613     @@ -51,11 +53,13 @@ static int fprintf_json(void *out, const char *fmt, ...)
12614     char *s;
12615    
12616     va_start(ap, fmt);
12617     + if (vasprintf(&s, fmt, ap) < 0)
12618     + return -1;
12619     + va_end(ap);
12620     +
12621     if (!oper_count) {
12622     int i;
12623    
12624     - s = va_arg(ap, char *);
12625     -
12626     /* Strip trailing spaces */
12627     i = strlen(s) - 1;
12628     while (s[i] == ' ')
12629     @@ -68,11 +72,10 @@ static int fprintf_json(void *out, const char *fmt, ...)
12630     } else if (!strcmp(fmt, ",")) {
12631     /* Skip */
12632     } else {
12633     - s = va_arg(ap, char *);
12634     jsonw_string(json_wtr, s);
12635     oper_count++;
12636     }
12637     - va_end(ap);
12638     + free(s);
12639     return 0;
12640     }
12641    
12642     diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h
12643     index 66917a4eba27..bf4cd924aed5 100644
12644     --- a/tools/include/uapi/linux/bpf.h
12645     +++ b/tools/include/uapi/linux/bpf.h
12646     @@ -2484,6 +2484,7 @@ struct bpf_prog_info {
12647     char name[BPF_OBJ_NAME_LEN];
12648     __u32 ifindex;
12649     __u32 gpl_compatible:1;
12650     + __u32 :31; /* alignment pad */
12651     __u64 netns_dev;
12652     __u64 netns_ino;
12653     __u32 nr_jited_ksyms;
12654     diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
12655     index bdb94939fd60..a350f97e3a1a 100644
12656     --- a/tools/lib/bpf/libbpf.c
12657     +++ b/tools/lib/bpf/libbpf.c
12658     @@ -2293,10 +2293,7 @@ int bpf_prog_load(const char *file, enum bpf_prog_type type,
12659     int bpf_prog_load_xattr(const struct bpf_prog_load_attr *attr,
12660     struct bpf_object **pobj, int *prog_fd)
12661     {
12662     - struct bpf_object_open_attr open_attr = {
12663     - .file = attr->file,
12664     - .prog_type = attr->prog_type,
12665     - };
12666     + struct bpf_object_open_attr open_attr = {};
12667     struct bpf_program *prog, *first_prog = NULL;
12668     enum bpf_attach_type expected_attach_type;
12669     enum bpf_prog_type prog_type;
12670     @@ -2309,6 +2306,9 @@ int bpf_prog_load_xattr(const struct bpf_prog_load_attr *attr,
12671     if (!attr->file)
12672     return -EINVAL;
12673    
12674     + open_attr.file = attr->file;
12675     + open_attr.prog_type = attr->prog_type;
12676     +
12677     obj = bpf_object__open_xattr(&open_attr);
12678     if (IS_ERR_OR_NULL(obj))
12679     return -ENOENT;
12680     diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/cs-etm.c
12681     index 2f595cd73da6..16af6c3b1365 100644
12682     --- a/tools/perf/arch/arm/util/cs-etm.c
12683     +++ b/tools/perf/arch/arm/util/cs-etm.c
12684     @@ -32,6 +32,8 @@ struct cs_etm_recording {
12685     struct auxtrace_record itr;
12686     struct perf_pmu *cs_etm_pmu;
12687     struct perf_evlist *evlist;
12688     + int wrapped_cnt;
12689     + bool *wrapped;
12690     bool snapshot_mode;
12691     size_t snapshot_size;
12692     };
12693     @@ -495,16 +497,131 @@ static int cs_etm_info_fill(struct auxtrace_record *itr,
12694     return 0;
12695     }
12696    
12697     -static int cs_etm_find_snapshot(struct auxtrace_record *itr __maybe_unused,
12698     +static int cs_etm_alloc_wrapped_array(struct cs_etm_recording *ptr, int idx)
12699     +{
12700     + bool *wrapped;
12701     + int cnt = ptr->wrapped_cnt;
12702     +
12703     + /* Make @ptr->wrapped as big as @idx */
12704     + while (cnt <= idx)
12705     + cnt++;
12706     +
12707     + /*
12708     + * Free'ed in cs_etm_recording_free(). Using realloc() to avoid
12709     + * cross compilation problems where the host's system supports
12710     + * reallocarray() but not the target.
12711     + */
12712     + wrapped = realloc(ptr->wrapped, cnt * sizeof(bool));
12713     + if (!wrapped)
12714     + return -ENOMEM;
12715     +
12716     + wrapped[cnt - 1] = false;
12717     + ptr->wrapped_cnt = cnt;
12718     + ptr->wrapped = wrapped;
12719     +
12720     + return 0;
12721     +}
12722     +
12723     +static bool cs_etm_buffer_has_wrapped(unsigned char *buffer,
12724     + size_t buffer_size, u64 head)
12725     +{
12726     + u64 i, watermark;
12727     + u64 *buf = (u64 *)buffer;
12728     + size_t buf_size = buffer_size;
12729     +
12730     + /*
12731     + * We want to look the very last 512 byte (chosen arbitrarily) in
12732     + * the ring buffer.
12733     + */
12734     + watermark = buf_size - 512;
12735     +
12736     + /*
12737     + * @head is continuously increasing - if its value is equal or greater
12738     + * than the size of the ring buffer, it has wrapped around.
12739     + */
12740     + if (head >= buffer_size)
12741     + return true;
12742     +
12743     + /*
12744     + * The value of @head is somewhere within the size of the ring buffer.
12745     + * This can be that there hasn't been enough data to fill the ring
12746     + * buffer yet or the trace time was so long that @head has numerically
12747     + * wrapped around. To find we need to check if we have data at the very
12748     + * end of the ring buffer. We can reliably do this because mmap'ed
12749     + * pages are zeroed out and there is a fresh mapping with every new
12750     + * session.
12751     + */
12752     +
12753     + /* @head is less than 512 byte from the end of the ring buffer */
12754     + if (head > watermark)
12755     + watermark = head;
12756     +
12757     + /*
12758     + * Speed things up by using 64 bit transactions (see "u64 *buf" above)
12759     + */
12760     + watermark >>= 3;
12761     + buf_size >>= 3;
12762     +
12763     + /*
12764     + * If we find trace data at the end of the ring buffer, @head has
12765     + * been there and has numerically wrapped around at least once.
12766     + */
12767     + for (i = watermark; i < buf_size; i++)
12768     + if (buf[i])
12769     + return true;
12770     +
12771     + return false;
12772     +}
12773     +
12774     +static int cs_etm_find_snapshot(struct auxtrace_record *itr,
12775     int idx, struct auxtrace_mmap *mm,
12776     - unsigned char *data __maybe_unused,
12777     + unsigned char *data,
12778     u64 *head, u64 *old)
12779     {
12780     + int err;
12781     + bool wrapped;
12782     + struct cs_etm_recording *ptr =
12783     + container_of(itr, struct cs_etm_recording, itr);
12784     +
12785     + /*
12786     + * Allocate memory to keep track of wrapping if this is the first
12787     + * time we deal with this *mm.
12788     + */
12789     + if (idx >= ptr->wrapped_cnt) {
12790     + err = cs_etm_alloc_wrapped_array(ptr, idx);
12791     + if (err)
12792     + return err;
12793     + }
12794     +
12795     + /*
12796     + * Check to see if *head has wrapped around. If it hasn't only the
12797     + * amount of data between *head and *old is snapshot'ed to avoid
12798     + * bloating the perf.data file with zeros. But as soon as *head has
12799     + * wrapped around the entire size of the AUX ring buffer it taken.
12800     + */
12801     + wrapped = ptr->wrapped[idx];
12802     + if (!wrapped && cs_etm_buffer_has_wrapped(data, mm->len, *head)) {
12803     + wrapped = true;
12804     + ptr->wrapped[idx] = true;
12805     + }
12806     +
12807     pr_debug3("%s: mmap index %d old head %zu new head %zu size %zu\n",
12808     __func__, idx, (size_t)*old, (size_t)*head, mm->len);
12809    
12810     - *old = *head;
12811     - *head += mm->len;
12812     + /* No wrap has occurred, we can just use *head and *old. */
12813     + if (!wrapped)
12814     + return 0;
12815     +
12816     + /*
12817     + * *head has wrapped around - adjust *head and *old to pickup the
12818     + * entire content of the AUX buffer.
12819     + */
12820     + if (*head >= mm->len) {
12821     + *old = *head - mm->len;
12822     + } else {
12823     + *head += mm->len;
12824     + *old = *head - mm->len;
12825     + }
12826    
12827     return 0;
12828     }
12829     @@ -545,6 +662,8 @@ static void cs_etm_recording_free(struct auxtrace_record *itr)
12830     {
12831     struct cs_etm_recording *ptr =
12832     container_of(itr, struct cs_etm_recording, itr);
12833     +
12834     + zfree(&ptr->wrapped);
12835     free(ptr);
12836     }
12837    
12838     diff --git a/tools/perf/jvmti/libjvmti.c b/tools/perf/jvmti/libjvmti.c
12839     index 6add3e982614..3361d98a4edd 100644
12840     --- a/tools/perf/jvmti/libjvmti.c
12841     +++ b/tools/perf/jvmti/libjvmti.c
12842     @@ -1,5 +1,6 @@
12843     // SPDX-License-Identifier: GPL-2.0
12844     #include <linux/compiler.h>
12845     +#include <linux/string.h>
12846     #include <sys/types.h>
12847     #include <stdio.h>
12848     #include <string.h>
12849     @@ -150,8 +151,7 @@ copy_class_filename(const char * class_sign, const char * file_name, char * resu
12850     result[i] = '\0';
12851     } else {
12852     /* fallback case */
12853     - size_t file_name_len = strlen(file_name);
12854     - strncpy(result, file_name, file_name_len < max_length ? file_name_len : max_length);
12855     + strlcpy(result, file_name, max_length);
12856     }
12857     }
12858    
12859     diff --git a/tools/perf/perf.h b/tools/perf/perf.h
12860     index 21bf7f5a3cf5..19d435a9623b 100644
12861     --- a/tools/perf/perf.h
12862     +++ b/tools/perf/perf.h
12863     @@ -26,7 +26,7 @@ static inline unsigned long long rdclock(void)
12864     }
12865    
12866     #ifndef MAX_NR_CPUS
12867     -#define MAX_NR_CPUS 1024
12868     +#define MAX_NR_CPUS 2048
12869     #endif
12870    
12871     extern const char *input_name;
12872     diff --git a/tools/perf/tests/parse-events.c b/tools/perf/tests/parse-events.c
12873     index 3b97ac018d5a..532c95e8fa6b 100644
12874     --- a/tools/perf/tests/parse-events.c
12875     +++ b/tools/perf/tests/parse-events.c
12876     @@ -18,6 +18,32 @@
12877     #define PERF_TP_SAMPLE_TYPE (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | \
12878     PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD)
12879    
12880     +#if defined(__s390x__)
12881     +/* Return true if kvm module is available and loaded. Test this
12882     + * and retun success when trace point kvm_s390_create_vm
12883     + * exists. Otherwise this test always fails.
12884     + */
12885     +static bool kvm_s390_create_vm_valid(void)
12886     +{
12887     + char *eventfile;
12888     + bool rc = false;
12889     +
12890     + eventfile = get_events_file("kvm-s390");
12891     +
12892     + if (eventfile) {
12893     + DIR *mydir = opendir(eventfile);
12894     +
12895     + if (mydir) {
12896     + rc = true;
12897     + closedir(mydir);
12898     + }
12899     + put_events_file(eventfile);
12900     + }
12901     +
12902     + return rc;
12903     +}
12904     +#endif
12905     +
12906     static int test__checkevent_tracepoint(struct perf_evlist *evlist)
12907     {
12908     struct perf_evsel *evsel = perf_evlist__first(evlist);
12909     @@ -1622,6 +1648,7 @@ static struct evlist_test test__events[] = {
12910     {
12911     .name = "kvm-s390:kvm_s390_create_vm",
12912     .check = test__checkevent_tracepoint,
12913     + .valid = kvm_s390_create_vm_valid,
12914     .id = 100,
12915     },
12916     #endif
12917     diff --git a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
12918     index cab7b0aea6ea..f5837f28f3af 100755
12919     --- a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
12920     +++ b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
12921     @@ -43,7 +43,7 @@ trace_libc_inet_pton_backtrace() {
12922     eventattr='max-stack=4'
12923     echo "gaih_inet.*\+0x[[:xdigit:]]+[[:space:]]\($libc\)$" >> $expected
12924     echo "getaddrinfo\+0x[[:xdigit:]]+[[:space:]]\($libc\)$" >> $expected
12925     - echo ".*\+0x[[:xdigit:]]+[[:space:]]\(.*/bin/ping.*\)$" >> $expected
12926     + echo ".*(\+0x[[:xdigit:]]+|\[unknown\])[[:space:]]\(.*/bin/ping.*\)$" >> $expected
12927     ;;
12928     *)
12929     eventattr='max-stack=3'
12930     diff --git a/tools/perf/ui/browsers/annotate.c b/tools/perf/ui/browsers/annotate.c
12931     index 1d00e5ec7906..a3c255228d62 100644
12932     --- a/tools/perf/ui/browsers/annotate.c
12933     +++ b/tools/perf/ui/browsers/annotate.c
12934     @@ -96,11 +96,12 @@ static void annotate_browser__write(struct ui_browser *browser, void *entry, int
12935     struct annotate_browser *ab = container_of(browser, struct annotate_browser, b);
12936     struct annotation *notes = browser__annotation(browser);
12937     struct annotation_line *al = list_entry(entry, struct annotation_line, node);
12938     + const bool is_current_entry = ui_browser__is_current_entry(browser, row);
12939     struct annotation_write_ops ops = {
12940     .first_line = row == 0,
12941     - .current_entry = ui_browser__is_current_entry(browser, row),
12942     + .current_entry = is_current_entry,
12943     .change_color = (!notes->options->hide_src_code &&
12944     - (!ops.current_entry ||
12945     + (!is_current_entry ||
12946     (browser->use_navkeypressed &&
12947     !browser->navkeypressed))),
12948     .width = browser->width,
12949     diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
12950     index dfee110b3a58..c357051dd2b6 100644
12951     --- a/tools/perf/util/annotate.c
12952     +++ b/tools/perf/util/annotate.c
12953     @@ -911,9 +911,8 @@ static int symbol__inc_addr_samples(struct symbol *sym, struct map *map,
12954     if (sym == NULL)
12955     return 0;
12956     src = symbol__hists(sym, evsel->evlist->nr_entries);
12957     - if (src == NULL)
12958     - return -ENOMEM;
12959     - return __symbol__inc_addr_samples(sym, map, src, evsel->idx, addr, sample);
12960     + return (src) ? __symbol__inc_addr_samples(sym, map, src, evsel->idx,
12961     + addr, sample) : 0;
12962     }
12963    
12964     static int symbol__account_cycles(u64 addr, u64 start,
12965     diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
12966     index b65ad5a273eb..4fad92213609 100644
12967     --- a/tools/perf/util/evsel.c
12968     +++ b/tools/perf/util/evsel.c
12969     @@ -590,6 +590,9 @@ const char *perf_evsel__name(struct perf_evsel *evsel)
12970     {
12971     char bf[128];
12972    
12973     + if (!evsel)
12974     + goto out_unknown;
12975     +
12976     if (evsel->name)
12977     return evsel->name;
12978    
12979     @@ -626,7 +629,10 @@ const char *perf_evsel__name(struct perf_evsel *evsel)
12980    
12981     evsel->name = strdup(bf);
12982    
12983     - return evsel->name ?: "unknown";
12984     + if (evsel->name)
12985     + return evsel->name;
12986     +out_unknown:
12987     + return "unknown";
12988     }
12989    
12990     const char *perf_evsel__group_name(struct perf_evsel *evsel)
12991     diff --git a/tools/perf/util/header.c b/tools/perf/util/header.c
12992     index b9a82598e2ac..7f2e3b1c746c 100644
12993     --- a/tools/perf/util/header.c
12994     +++ b/tools/perf/util/header.c
12995     @@ -1173,7 +1173,7 @@ static int build_caches(struct cpu_cache_level caches[], u32 size, u32 *cntp)
12996     return 0;
12997     }
12998    
12999     -#define MAX_CACHES 2000
13000     +#define MAX_CACHES (MAX_NR_CPUS * 4)
13001    
13002     static int write_cache(struct feat_fd *ff,
13003     struct perf_evlist *evlist __maybe_unused)
13004     diff --git a/tools/perf/util/metricgroup.c b/tools/perf/util/metricgroup.c
13005     index a28f9b5cc4ff..8b3dafe3fac3 100644
13006     --- a/tools/perf/util/metricgroup.c
13007     +++ b/tools/perf/util/metricgroup.c
13008     @@ -94,26 +94,49 @@ struct egroup {
13009     const char *metric_expr;
13010     };
13011    
13012     -static struct perf_evsel *find_evsel(struct perf_evlist *perf_evlist,
13013     - const char **ids,
13014     - int idnum,
13015     - struct perf_evsel **metric_events)
13016     +static bool record_evsel(int *ind, struct perf_evsel **start,
13017     + int idnum,
13018     + struct perf_evsel **metric_events,
13019     + struct perf_evsel *ev)
13020     +{
13021     + metric_events[*ind] = ev;
13022     + if (*ind == 0)
13023     + *start = ev;
13024     + if (++*ind == idnum) {
13025     + metric_events[*ind] = NULL;
13026     + return true;
13027     + }
13028     + return false;
13029     +}
13030     +
13031     +static struct perf_evsel *find_evsel_group(struct perf_evlist *perf_evlist,
13032     + const char **ids,
13033     + int idnum,
13034     + struct perf_evsel **metric_events)
13035     {
13036     struct perf_evsel *ev, *start = NULL;
13037     int ind = 0;
13038    
13039     evlist__for_each_entry (perf_evlist, ev) {
13040     + if (ev->collect_stat)
13041     + continue;
13042     if (!strcmp(ev->name, ids[ind])) {
13043     - metric_events[ind] = ev;
13044     - if (ind == 0)
13045     - start = ev;
13046     - if (++ind == idnum) {
13047     - metric_events[ind] = NULL;
13048     + if (record_evsel(&ind, &start, idnum,
13049     + metric_events, ev))
13050     return start;
13051     - }
13052     } else {
13053     + /*
13054     + * We saw some other event that is not
13055     + * in our list of events. Discard
13056     + * the whole match and start again.
13057     + */
13058     ind = 0;
13059     start = NULL;
13060     + if (!strcmp(ev->name, ids[ind])) {
13061     + if (record_evsel(&ind, &start, idnum,
13062     + metric_events, ev))
13063     + return start;
13064     + }
13065     }
13066     }
13067     /*
13068     @@ -143,8 +166,8 @@ static int metricgroup__setup_events(struct list_head *groups,
13069     ret = -ENOMEM;
13070     break;
13071     }
13072     - evsel = find_evsel(perf_evlist, eg->ids, eg->idnum,
13073     - metric_events);
13074     + evsel = find_evsel_group(perf_evlist, eg->ids, eg->idnum,
13075     + metric_events);
13076     if (!evsel) {
13077     pr_debug("Cannot resolve %s: %s\n",
13078     eg->metric_name, eg->metric_expr);
13079     diff --git a/tools/perf/util/stat-shadow.c b/tools/perf/util/stat-shadow.c
13080     index 99990f5f2512..bbb0e042d8e5 100644
13081     --- a/tools/perf/util/stat-shadow.c
13082     +++ b/tools/perf/util/stat-shadow.c
13083     @@ -303,7 +303,7 @@ static struct perf_evsel *perf_stat__find_event(struct perf_evlist *evsel_list,
13084     struct perf_evsel *c2;
13085    
13086     evlist__for_each_entry (evsel_list, c2) {
13087     - if (!strcasecmp(c2->name, name))
13088     + if (!strcasecmp(c2->name, name) && !c2->collect_stat)
13089     return c2;
13090     }
13091     return NULL;
13092     @@ -342,7 +342,8 @@ void perf_stat__collect_metric_expr(struct perf_evlist *evsel_list)
13093     if (leader) {
13094     /* Search in group */
13095     for_each_group_member (oc, leader) {
13096     - if (!strcasecmp(oc->name, metric_names[i])) {
13097     + if (!strcasecmp(oc->name, metric_names[i]) &&
13098     + !oc->collect_stat) {
13099     found = true;
13100     break;
13101     }
13102     diff --git a/tools/power/cpupower/utils/cpufreq-set.c b/tools/power/cpupower/utils/cpufreq-set.c
13103     index 1eef0aed6423..08a405593a79 100644
13104     --- a/tools/power/cpupower/utils/cpufreq-set.c
13105     +++ b/tools/power/cpupower/utils/cpufreq-set.c
13106     @@ -306,6 +306,8 @@ int cmd_freq_set(int argc, char **argv)
13107     bitmask_setbit(cpus_chosen, cpus->cpu);
13108     cpus = cpus->next;
13109     }
13110     + /* Set the last cpu in related cpus list */
13111     + bitmask_setbit(cpus_chosen, cpus->cpu);
13112     cpufreq_put_related_cpus(cpus);
13113     }
13114     }
13115     diff --git a/tools/testing/selftests/bpf/test_lwt_seg6local.c b/tools/testing/selftests/bpf/test_lwt_seg6local.c
13116     index 0575751bc1bc..e2f6ed0a583d 100644
13117     --- a/tools/testing/selftests/bpf/test_lwt_seg6local.c
13118     +++ b/tools/testing/selftests/bpf/test_lwt_seg6local.c
13119     @@ -61,7 +61,7 @@ struct sr6_tlv_t {
13120     unsigned char value[0];
13121     } BPF_PACKET_HEADER;
13122    
13123     -__attribute__((always_inline)) struct ip6_srh_t *get_srh(struct __sk_buff *skb)
13124     +static __always_inline struct ip6_srh_t *get_srh(struct __sk_buff *skb)
13125     {
13126     void *cursor, *data_end;
13127     struct ip6_srh_t *srh;
13128     @@ -95,7 +95,7 @@ __attribute__((always_inline)) struct ip6_srh_t *get_srh(struct __sk_buff *skb)
13129     return srh;
13130     }
13131    
13132     -__attribute__((always_inline))
13133     +static __always_inline
13134     int update_tlv_pad(struct __sk_buff *skb, uint32_t new_pad,
13135     uint32_t old_pad, uint32_t pad_off)
13136     {
13137     @@ -125,7 +125,7 @@ int update_tlv_pad(struct __sk_buff *skb, uint32_t new_pad,
13138     return 0;
13139     }
13140    
13141     -__attribute__((always_inline))
13142     +static __always_inline
13143     int is_valid_tlv_boundary(struct __sk_buff *skb, struct ip6_srh_t *srh,
13144     uint32_t *tlv_off, uint32_t *pad_size,
13145     uint32_t *pad_off)
13146     @@ -184,7 +184,7 @@ int is_valid_tlv_boundary(struct __sk_buff *skb, struct ip6_srh_t *srh,
13147     return 0;
13148     }
13149    
13150     -__attribute__((always_inline))
13151     +static __always_inline
13152     int add_tlv(struct __sk_buff *skb, struct ip6_srh_t *srh, uint32_t tlv_off,
13153     struct sr6_tlv_t *itlv, uint8_t tlv_size)
13154     {
13155     @@ -228,7 +228,7 @@ int add_tlv(struct __sk_buff *skb, struct ip6_srh_t *srh, uint32_t tlv_off,
13156     return update_tlv_pad(skb, new_pad, pad_size, pad_off);
13157     }
13158    
13159     -__attribute__((always_inline))
13160     +static __always_inline
13161     int delete_tlv(struct __sk_buff *skb, struct ip6_srh_t *srh,
13162     uint32_t tlv_off)
13163     {
13164     @@ -266,7 +266,7 @@ int delete_tlv(struct __sk_buff *skb, struct ip6_srh_t *srh,
13165     return update_tlv_pad(skb, new_pad, pad_size, pad_off);
13166     }
13167    
13168     -__attribute__((always_inline))
13169     +static __always_inline
13170     int has_egr_tlv(struct __sk_buff *skb, struct ip6_srh_t *srh)
13171     {
13172     int tlv_offset = sizeof(struct ip6_t) + sizeof(struct ip6_srh_t) +