Magellan Linux

Annotation of /trunk/kernel-alx/patches-5.4/0152-5.4.53-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3548 - (hide annotations) (download)
Fri Jul 24 06:59:33 2020 UTC (4 years, 2 months ago) by niro
File size: 279559 byte(s)
-linux-5.4.53
1 niro 3548 diff --git a/Documentation/devicetree/bindings/mailbox/xlnx,zynqmp-ipi-mailbox.txt b/Documentation/devicetree/bindings/mailbox/xlnx,zynqmp-ipi-mailbox.txt
2     index 4438432bfe9b..ad76edccf881 100644
3     --- a/Documentation/devicetree/bindings/mailbox/xlnx,zynqmp-ipi-mailbox.txt
4     +++ b/Documentation/devicetree/bindings/mailbox/xlnx,zynqmp-ipi-mailbox.txt
5     @@ -87,7 +87,7 @@ Example:
6     ranges;
7    
8     /* APU<->RPU0 IPI mailbox controller */
9     - ipi_mailbox_rpu0: mailbox@ff90400 {
10     + ipi_mailbox_rpu0: mailbox@ff990400 {
11     reg = <0xff990400 0x20>,
12     <0xff990420 0x20>,
13     <0xff990080 0x20>,
14     diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
15     index 66780a47ad85..c977a3ba2f35 100644
16     --- a/Documentation/devicetree/bindings/usb/dwc3.txt
17     +++ b/Documentation/devicetree/bindings/usb/dwc3.txt
18     @@ -75,6 +75,8 @@ Optional properties:
19     from P0 to P1/P2/P3 without delay.
20     - snps,dis-tx-ipgap-linecheck-quirk: when set, disable u2mac linestate check
21     during HS transmit.
22     + - snps,parkmode-disable-ss-quirk: when set, all SuperSpeed bus instances in
23     + park mode are disabled.
24     - snps,dis_metastability_quirk: when set, disable metastability workaround.
25     CAUTION: use only if you are absolutely sure of it.
26     - snps,is-utmi-l1-suspend: true when DWC3 asserts output signal
27     diff --git a/Makefile b/Makefile
28     index 435d27be54c9..d33b312a14e3 100644
29     --- a/Makefile
30     +++ b/Makefile
31     @@ -1,7 +1,7 @@
32     # SPDX-License-Identifier: GPL-2.0
33     VERSION = 5
34     PATCHLEVEL = 4
35     -SUBLEVEL = 52
36     +SUBLEVEL = 53
37     EXTRAVERSION =
38     NAME = Kleptomaniac Octopus
39    
40     diff --git a/arch/alpha/configs/defconfig b/arch/alpha/configs/defconfig
41     index f4ec420d7f2d..3a132c91d45b 100644
42     --- a/arch/alpha/configs/defconfig
43     +++ b/arch/alpha/configs/defconfig
44     @@ -36,7 +36,6 @@ CONFIG_BLK_DEV_CY82C693=y
45     CONFIG_SCSI=y
46     CONFIG_BLK_DEV_SD=y
47     CONFIG_BLK_DEV_SR=y
48     -CONFIG_BLK_DEV_SR_VENDOR=y
49     CONFIG_SCSI_AIC7XXX=m
50     CONFIG_AIC7XXX_CMDS_PER_DEVICE=253
51     # CONFIG_AIC7XXX_DEBUG_ENABLE is not set
52     diff --git a/arch/arm/boot/dts/am437x-l4.dtsi b/arch/arm/boot/dts/am437x-l4.dtsi
53     index 59770dd3785e..bbe15775fccd 100644
54     --- a/arch/arm/boot/dts/am437x-l4.dtsi
55     +++ b/arch/arm/boot/dts/am437x-l4.dtsi
56     @@ -1576,8 +1576,9 @@
57     reg-names = "rev";
58     ti,hwmods = "d_can0";
59     /* Domains (P, C): per_pwrdm, l4ls_clkdm */
60     - clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN0_CLKCTRL 0>;
61     - clock-names = "fck";
62     + clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN0_CLKCTRL 0>,
63     + <&dcan0_fck>;
64     + clock-names = "fck", "osc";
65     #address-cells = <1>;
66     #size-cells = <1>;
67     ranges = <0x0 0xcc000 0x2000>;
68     @@ -1585,6 +1586,8 @@
69     dcan0: can@0 {
70     compatible = "ti,am4372-d_can", "ti,am3352-d_can";
71     reg = <0x0 0x2000>;
72     + clocks = <&dcan0_fck>;
73     + clock-names = "fck";
74     syscon-raminit = <&scm_conf 0x644 0>;
75     interrupts = <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>;
76     status = "disabled";
77     @@ -1597,8 +1600,9 @@
78     reg-names = "rev";
79     ti,hwmods = "d_can1";
80     /* Domains (P, C): per_pwrdm, l4ls_clkdm */
81     - clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN1_CLKCTRL 0>;
82     - clock-names = "fck";
83     + clocks = <&l4ls_clkctrl AM4_L4LS_D_CAN1_CLKCTRL 0>,
84     + <&dcan1_fck>;
85     + clock-names = "fck", "osc";
86     #address-cells = <1>;
87     #size-cells = <1>;
88     ranges = <0x0 0xd0000 0x2000>;
89     @@ -1606,6 +1610,8 @@
90     dcan1: can@0 {
91     compatible = "ti,am4372-d_can", "ti,am3352-d_can";
92     reg = <0x0 0x2000>;
93     + clocks = <&dcan1_fck>;
94     + clock-name = "fck";
95     syscon-raminit = <&scm_conf 0x644 1>;
96     interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH>;
97     status = "disabled";
98     diff --git a/arch/arm/boot/dts/mt7623n-rfb-emmc.dts b/arch/arm/boot/dts/mt7623n-rfb-emmc.dts
99     index b7606130ade9..0447748f9fa0 100644
100     --- a/arch/arm/boot/dts/mt7623n-rfb-emmc.dts
101     +++ b/arch/arm/boot/dts/mt7623n-rfb-emmc.dts
102     @@ -138,6 +138,7 @@
103     mac@1 {
104     compatible = "mediatek,eth-mac";
105     reg = <1>;
106     + phy-mode = "rgmii";
107     phy-handle = <&phy5>;
108     };
109    
110     diff --git a/arch/arm/boot/dts/socfpga.dtsi b/arch/arm/boot/dts/socfpga.dtsi
111     index 4f3993cc0227..451030897220 100644
112     --- a/arch/arm/boot/dts/socfpga.dtsi
113     +++ b/arch/arm/boot/dts/socfpga.dtsi
114     @@ -710,7 +710,7 @@
115     };
116     };
117    
118     - L2: l2-cache@fffef000 {
119     + L2: cache-controller@fffef000 {
120     compatible = "arm,pl310-cache";
121     reg = <0xfffef000 0x1000>;
122     interrupts = <0 38 0x04>;
123     diff --git a/arch/arm/boot/dts/socfpga_arria10.dtsi b/arch/arm/boot/dts/socfpga_arria10.dtsi
124     index 2a86e72d9791..906bfb580e9e 100644
125     --- a/arch/arm/boot/dts/socfpga_arria10.dtsi
126     +++ b/arch/arm/boot/dts/socfpga_arria10.dtsi
127     @@ -636,7 +636,7 @@
128     reg = <0xffcfb100 0x80>;
129     };
130    
131     - L2: l2-cache@fffff000 {
132     + L2: cache-controller@fffff000 {
133     compatible = "arm,pl310-cache";
134     reg = <0xfffff000 0x1000>;
135     interrupts = <0 18 IRQ_TYPE_LEVEL_HIGH>;
136     diff --git a/arch/arm/configs/rpc_defconfig b/arch/arm/configs/rpc_defconfig
137     index 3b82b64950d9..c090643b1ecb 100644
138     --- a/arch/arm/configs/rpc_defconfig
139     +++ b/arch/arm/configs/rpc_defconfig
140     @@ -32,7 +32,6 @@ CONFIG_BLK_DEV_RAM=y
141     CONFIG_BLK_DEV_SD=y
142     CONFIG_CHR_DEV_ST=m
143     CONFIG_BLK_DEV_SR=y
144     -CONFIG_BLK_DEV_SR_VENDOR=y
145     CONFIG_CHR_DEV_SG=y
146     CONFIG_SCSI_CONSTANTS=y
147     CONFIG_SCSI_LOGGING=y
148     diff --git a/arch/arm/configs/s3c2410_defconfig b/arch/arm/configs/s3c2410_defconfig
149     index 73ed73a8785a..153009130dab 100644
150     --- a/arch/arm/configs/s3c2410_defconfig
151     +++ b/arch/arm/configs/s3c2410_defconfig
152     @@ -202,7 +202,6 @@ CONFIG_EEPROM_AT24=y
153     CONFIG_BLK_DEV_SD=y
154     CONFIG_CHR_DEV_ST=m
155     CONFIG_BLK_DEV_SR=y
156     -CONFIG_BLK_DEV_SR_VENDOR=y
157     CONFIG_CHR_DEV_SG=y
158     CONFIG_CHR_DEV_SCH=m
159     CONFIG_SCSI_CONSTANTS=y
160     diff --git a/arch/arm/include/asm/clocksource.h b/arch/arm/include/asm/clocksource.h
161     index 0b350a7e26f3..afb7a59828fe 100644
162     --- a/arch/arm/include/asm/clocksource.h
163     +++ b/arch/arm/include/asm/clocksource.h
164     @@ -1,8 +1,17 @@
165     #ifndef _ASM_CLOCKSOURCE_H
166     #define _ASM_CLOCKSOURCE_H
167    
168     +enum vdso_arch_clockmode {
169     + /* vdso clocksource not usable */
170     + VDSO_CLOCKMODE_NONE,
171     + /* vdso clocksource usable */
172     + VDSO_CLOCKMODE_ARCHTIMER,
173     + VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT = VDSO_CLOCKMODE_ARCHTIMER,
174     +};
175     +
176     struct arch_clocksource_data {
177     - bool vdso_direct; /* Usable for direct VDSO access? */
178     + /* Usable for direct VDSO access? */
179     + enum vdso_arch_clockmode clock_mode;
180     };
181    
182     #endif
183     diff --git a/arch/arm/kernel/vdso.c b/arch/arm/kernel/vdso.c
184     index f00e45fa62c4..6c69a5548ba2 100644
185     --- a/arch/arm/kernel/vdso.c
186     +++ b/arch/arm/kernel/vdso.c
187     @@ -281,7 +281,7 @@ static bool tk_is_cntvct(const struct timekeeper *tk)
188     if (!IS_ENABLED(CONFIG_ARM_ARCH_TIMER))
189     return false;
190    
191     - if (!tk->tkr_mono.clock->archdata.vdso_direct)
192     + if (tk->tkr_mono.clock->archdata.clock_mode != VDSO_CLOCKMODE_ARCHTIMER)
193     return false;
194    
195     return true;
196     diff --git a/arch/arm/mach-at91/pm_suspend.S b/arch/arm/mach-at91/pm_suspend.S
197     index ed57c879d4e1..2591cba61937 100644
198     --- a/arch/arm/mach-at91/pm_suspend.S
199     +++ b/arch/arm/mach-at91/pm_suspend.S
200     @@ -268,6 +268,10 @@ ENDPROC(at91_backup_mode)
201     orr tmp1, tmp1, #AT91_PMC_KEY
202     str tmp1, [pmc, #AT91_CKGR_MOR]
203    
204     + /* Quirk for SAM9X60's PMC */
205     + nop
206     + nop
207     +
208     wait_mckrdy
209    
210     /* Enable the crystal oscillator */
211     diff --git a/arch/arm/mach-omap2/omap-iommu.c b/arch/arm/mach-omap2/omap-iommu.c
212     index f1a6ece8108e..78247e6f4a72 100644
213     --- a/arch/arm/mach-omap2/omap-iommu.c
214     +++ b/arch/arm/mach-omap2/omap-iommu.c
215     @@ -11,14 +11,43 @@
216    
217     #include "omap_hwmod.h"
218     #include "omap_device.h"
219     +#include "clockdomain.h"
220     #include "powerdomain.h"
221    
222     +static void omap_iommu_dra7_emu_swsup_config(struct platform_device *pdev,
223     + bool enable)
224     +{
225     + static struct clockdomain *emu_clkdm;
226     + static DEFINE_SPINLOCK(emu_lock);
227     + static atomic_t count;
228     + struct device_node *np = pdev->dev.of_node;
229     +
230     + if (!of_device_is_compatible(np, "ti,dra7-dsp-iommu"))
231     + return;
232     +
233     + if (!emu_clkdm) {
234     + emu_clkdm = clkdm_lookup("emu_clkdm");
235     + if (WARN_ON_ONCE(!emu_clkdm))
236     + return;
237     + }
238     +
239     + spin_lock(&emu_lock);
240     +
241     + if (enable && (atomic_inc_return(&count) == 1))
242     + clkdm_deny_idle(emu_clkdm);
243     + else if (!enable && (atomic_dec_return(&count) == 0))
244     + clkdm_allow_idle(emu_clkdm);
245     +
246     + spin_unlock(&emu_lock);
247     +}
248     +
249     int omap_iommu_set_pwrdm_constraint(struct platform_device *pdev, bool request,
250     u8 *pwrst)
251     {
252     struct powerdomain *pwrdm;
253     struct omap_device *od;
254     u8 next_pwrst;
255     + int ret = 0;
256    
257     od = to_omap_device(pdev);
258     if (!od)
259     @@ -31,13 +60,21 @@ int omap_iommu_set_pwrdm_constraint(struct platform_device *pdev, bool request,
260     if (!pwrdm)
261     return -EINVAL;
262    
263     - if (request)
264     + if (request) {
265     *pwrst = pwrdm_read_next_pwrst(pwrdm);
266     + omap_iommu_dra7_emu_swsup_config(pdev, true);
267     + }
268    
269     if (*pwrst > PWRDM_POWER_RET)
270     - return 0;
271     + goto out;
272    
273     next_pwrst = request ? PWRDM_POWER_ON : *pwrst;
274    
275     - return pwrdm_set_next_pwrst(pwrdm, next_pwrst);
276     + ret = pwrdm_set_next_pwrst(pwrdm, next_pwrst);
277     +
278     +out:
279     + if (!request)
280     + omap_iommu_dra7_emu_swsup_config(pdev, false);
281     +
282     + return ret;
283     }
284     diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c
285     index 247e3f8acffe..ca07e310d9ed 100644
286     --- a/arch/arm/mach-omap2/pdata-quirks.c
287     +++ b/arch/arm/mach-omap2/pdata-quirks.c
288     @@ -44,6 +44,17 @@ struct pdata_init {
289     static struct of_dev_auxdata omap_auxdata_lookup[];
290     static struct twl4030_gpio_platform_data twl_gpio_auxdata;
291    
292     +#if IS_ENABLED(CONFIG_OMAP_IOMMU)
293     +int omap_iommu_set_pwrdm_constraint(struct platform_device *pdev, bool request,
294     + u8 *pwrst);
295     +#else
296     +static inline int omap_iommu_set_pwrdm_constraint(struct platform_device *pdev,
297     + bool request, u8 *pwrst)
298     +{
299     + return 0;
300     +}
301     +#endif
302     +
303     #ifdef CONFIG_MACH_NOKIA_N8X0
304     static void __init omap2420_n8x0_legacy_init(void)
305     {
306     @@ -311,16 +322,6 @@ static void __init omap3_pandora_legacy_init(void)
307     }
308     #endif /* CONFIG_ARCH_OMAP3 */
309    
310     -#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5)
311     -static struct iommu_platform_data omap4_iommu_pdata = {
312     - .reset_name = "mmu_cache",
313     - .assert_reset = omap_device_assert_hardreset,
314     - .deassert_reset = omap_device_deassert_hardreset,
315     - .device_enable = omap_device_enable,
316     - .device_idle = omap_device_idle,
317     -};
318     -#endif
319     -
320     #if defined(CONFIG_SOC_AM33XX) || defined(CONFIG_SOC_AM43XX)
321     static struct wkup_m3_platform_data wkup_m3_data = {
322     .reset_name = "wkup_m3",
323     @@ -336,6 +337,10 @@ static void __init omap5_uevm_legacy_init(void)
324     #endif
325    
326     #ifdef CONFIG_SOC_DRA7XX
327     +static struct iommu_platform_data dra7_ipu1_dsp_iommu_pdata = {
328     + .set_pwrdm_constraint = omap_iommu_set_pwrdm_constraint,
329     +};
330     +
331     static struct omap_hsmmc_platform_data dra7_hsmmc_data_mmc1;
332     static struct omap_hsmmc_platform_data dra7_hsmmc_data_mmc2;
333     static struct omap_hsmmc_platform_data dra7_hsmmc_data_mmc3;
334     @@ -543,10 +548,6 @@ static struct of_dev_auxdata omap_auxdata_lookup[] = {
335     &wkup_m3_data),
336     #endif
337     #if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5)
338     - OF_DEV_AUXDATA("ti,omap4-iommu", 0x4a066000, "4a066000.mmu",
339     - &omap4_iommu_pdata),
340     - OF_DEV_AUXDATA("ti,omap4-iommu", 0x55082000, "55082000.mmu",
341     - &omap4_iommu_pdata),
342     OF_DEV_AUXDATA("ti,omap4-smartreflex-iva", 0x4a0db000,
343     "4a0db000.smartreflex", &omap_sr_pdata[OMAP_SR_IVA]),
344     OF_DEV_AUXDATA("ti,omap4-smartreflex-core", 0x4a0dd000,
345     @@ -561,6 +562,12 @@ static struct of_dev_auxdata omap_auxdata_lookup[] = {
346     &dra7_hsmmc_data_mmc2),
347     OF_DEV_AUXDATA("ti,dra7-hsmmc", 0x480ad000, "480ad000.mmc",
348     &dra7_hsmmc_data_mmc3),
349     + OF_DEV_AUXDATA("ti,dra7-dsp-iommu", 0x40d01000, "40d01000.mmu",
350     + &dra7_ipu1_dsp_iommu_pdata),
351     + OF_DEV_AUXDATA("ti,dra7-dsp-iommu", 0x41501000, "41501000.mmu",
352     + &dra7_ipu1_dsp_iommu_pdata),
353     + OF_DEV_AUXDATA("ti,dra7-iommu", 0x58882000, "58882000.mmu",
354     + &dra7_ipu1_dsp_iommu_pdata),
355     #endif
356     /* Common auxdata */
357     OF_DEV_AUXDATA("ti,sysc", 0, NULL, &ti_sysc_pdata),
358     diff --git a/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi b/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi
359     index d1fc9c2055f4..9498d1de730c 100644
360     --- a/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi
361     +++ b/arch/arm64/boot/dts/altera/socfpga_stratix10.dtsi
362     @@ -77,7 +77,7 @@
363     method = "smc";
364     };
365    
366     - intc: intc@fffc1000 {
367     + intc: interrupt-controller@fffc1000 {
368     compatible = "arm,gic-400", "arm,cortex-a15-gic";
369     #interrupt-cells = <3>;
370     interrupt-controller;
371     @@ -302,7 +302,7 @@
372     status = "disabled";
373     };
374    
375     - nand: nand@ffb90000 {
376     + nand: nand-controller@ffb90000 {
377     #address-cells = <1>;
378     #size-cells = <0>;
379     compatible = "altr,socfpga-denali-nand";
380     @@ -445,7 +445,7 @@
381     clock-names = "timer";
382     };
383    
384     - uart0: serial0@ffc02000 {
385     + uart0: serial@ffc02000 {
386     compatible = "snps,dw-apb-uart";
387     reg = <0xffc02000 0x100>;
388     interrupts = <0 108 4>;
389     @@ -456,7 +456,7 @@
390     status = "disabled";
391     };
392    
393     - uart1: serial1@ffc02100 {
394     + uart1: serial@ffc02100 {
395     compatible = "snps,dw-apb-uart";
396     reg = <0xffc02100 0x100>;
397     interrupts = <0 109 4>;
398     diff --git a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
399     index 2199a54c720c..1234bc797429 100644
400     --- a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
401     +++ b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
402     @@ -2381,6 +2381,7 @@
403     dr_mode = "host";
404     snps,dis_u2_susphy_quirk;
405     snps,quirk-frame-length-adjustment;
406     + snps,parkmode-disable-ss-quirk;
407     };
408     };
409    
410     diff --git a/arch/arm64/boot/dts/amlogic/meson-gxl-s805x-libretech-ac.dts b/arch/arm64/boot/dts/amlogic/meson-gxl-s805x-libretech-ac.dts
411     index 82b1c4851147..e034bbff8e66 100644
412     --- a/arch/arm64/boot/dts/amlogic/meson-gxl-s805x-libretech-ac.dts
413     +++ b/arch/arm64/boot/dts/amlogic/meson-gxl-s805x-libretech-ac.dts
414     @@ -9,7 +9,7 @@
415    
416     #include <dt-bindings/input/input.h>
417    
418     -#include "meson-gxl-s905x.dtsi"
419     +#include "meson-gxl-s805x.dtsi"
420    
421     / {
422     compatible = "libretech,aml-s805x-ac", "amlogic,s805x",
423     diff --git a/arch/arm64/boot/dts/amlogic/meson-gxl-s805x-p241.dts b/arch/arm64/boot/dts/amlogic/meson-gxl-s805x-p241.dts
424     index 3a1484e5b8e1..fbc687c9ff83 100644
425     --- a/arch/arm64/boot/dts/amlogic/meson-gxl-s805x-p241.dts
426     +++ b/arch/arm64/boot/dts/amlogic/meson-gxl-s805x-p241.dts
427     @@ -9,7 +9,7 @@
428    
429     #include <dt-bindings/input/input.h>
430    
431     -#include "meson-gxl-s905x.dtsi"
432     +#include "meson-gxl-s805x.dtsi"
433    
434     / {
435     compatible = "amlogic,p241", "amlogic,s805x", "amlogic,meson-gxl";
436     diff --git a/arch/arm64/boot/dts/amlogic/meson-gxl-s805x.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxl-s805x.dtsi
437     new file mode 100644
438     index 000000000000..f9d705648426
439     --- /dev/null
440     +++ b/arch/arm64/boot/dts/amlogic/meson-gxl-s805x.dtsi
441     @@ -0,0 +1,24 @@
442     +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
443     +/*
444     + * Copyright (c) 2020 BayLibre SAS
445     + * Author: Neil Armstrong <narmstrong@baylibre.com>
446     + */
447     +
448     +#include "meson-gxl-s905x.dtsi"
449     +
450     +/ {
451     + compatible = "amlogic,s805x", "amlogic,meson-gxl";
452     +};
453     +
454     +/* The S805X Package doesn't seem to handle the 744MHz OPP correctly */
455     +&mali {
456     + assigned-clocks = <&clkc CLKID_MALI_0_SEL>,
457     + <&clkc CLKID_MALI_0>,
458     + <&clkc CLKID_MALI>; /* Glitch free mux */
459     + assigned-clock-parents = <&clkc CLKID_FCLK_DIV3>,
460     + <0>, /* Do Nothing */
461     + <&clkc CLKID_MALI_0>;
462     + assigned-clock-rates = <0>, /* Do Nothing */
463     + <666666666>,
464     + <0>; /* Do Nothing */
465     +};
466     diff --git a/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi b/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi
467     index 49ff0a7d0210..e3cfa24dca5a 100644
468     --- a/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi
469     +++ b/arch/arm64/boot/dts/amlogic/meson-gxl.dtsi
470     @@ -288,6 +288,11 @@
471     };
472     };
473    
474     +&hwrng {
475     + clocks = <&clkc CLKID_RNG0>;
476     + clock-names = "core";
477     +};
478     +
479     &i2c_A {
480     clocks = <&clkc CLKID_I2C>;
481     };
482     diff --git a/arch/arm64/include/asm/alternative.h b/arch/arm64/include/asm/alternative.h
483     index 5e5dc05d63a0..12f0eb56a1cc 100644
484     --- a/arch/arm64/include/asm/alternative.h
485     +++ b/arch/arm64/include/asm/alternative.h
486     @@ -73,11 +73,11 @@ static inline void apply_alternatives_module(void *start, size_t length) { }
487     ".pushsection .altinstructions,\"a\"\n" \
488     ALTINSTR_ENTRY(feature) \
489     ".popsection\n" \
490     - ".pushsection .altinstr_replacement, \"a\"\n" \
491     + ".subsection 1\n" \
492     "663:\n\t" \
493     newinstr "\n" \
494     "664:\n\t" \
495     - ".popsection\n\t" \
496     + ".previous\n\t" \
497     ".org . - (664b-663b) + (662b-661b)\n\t" \
498     ".org . - (662b-661b) + (664b-663b)\n" \
499     ".endif\n"
500     @@ -117,9 +117,9 @@ static inline void apply_alternatives_module(void *start, size_t length) { }
501     662: .pushsection .altinstructions, "a"
502     altinstruction_entry 661b, 663f, \cap, 662b-661b, 664f-663f
503     .popsection
504     - .pushsection .altinstr_replacement, "ax"
505     + .subsection 1
506     663: \insn2
507     -664: .popsection
508     +664: .previous
509     .org . - (664b-663b) + (662b-661b)
510     .org . - (662b-661b) + (664b-663b)
511     .endif
512     @@ -160,7 +160,7 @@ static inline void apply_alternatives_module(void *start, size_t length) { }
513     .pushsection .altinstructions, "a"
514     altinstruction_entry 663f, 661f, \cap, 664f-663f, 662f-661f
515     .popsection
516     - .pushsection .altinstr_replacement, "ax"
517     + .subsection 1
518     .align 2 /* So GAS knows label 661 is suitably aligned */
519     661:
520     .endm
521     @@ -179,9 +179,9 @@ static inline void apply_alternatives_module(void *start, size_t length) { }
522     .macro alternative_else
523     662:
524     .if .Lasm_alt_mode==0
525     - .pushsection .altinstr_replacement, "ax"
526     + .subsection 1
527     .else
528     - .popsection
529     + .previous
530     .endif
531     663:
532     .endm
533     @@ -192,7 +192,7 @@ static inline void apply_alternatives_module(void *start, size_t length) { }
534     .macro alternative_endif
535     664:
536     .if .Lasm_alt_mode==0
537     - .popsection
538     + .previous
539     .endif
540     .org . - (664b-663b) + (662b-661b)
541     .org . - (662b-661b) + (664b-663b)
542     diff --git a/arch/arm64/include/asm/arch_timer.h b/arch/arm64/include/asm/arch_timer.h
543     index 7ae54d7d333a..9f0ec21d6327 100644
544     --- a/arch/arm64/include/asm/arch_timer.h
545     +++ b/arch/arm64/include/asm/arch_timer.h
546     @@ -58,6 +58,7 @@ struct arch_timer_erratum_workaround {
547     u64 (*read_cntvct_el0)(void);
548     int (*set_next_event_phys)(unsigned long, struct clock_event_device *);
549     int (*set_next_event_virt)(unsigned long, struct clock_event_device *);
550     + bool disable_compat_vdso;
551     };
552    
553     DECLARE_PER_CPU(const struct arch_timer_erratum_workaround *,
554     diff --git a/arch/arm64/include/asm/clocksource.h b/arch/arm64/include/asm/clocksource.h
555     index 0ece64a26c8c..0c7910447235 100644
556     --- a/arch/arm64/include/asm/clocksource.h
557     +++ b/arch/arm64/include/asm/clocksource.h
558     @@ -2,8 +2,11 @@
559     #ifndef _ASM_CLOCKSOURCE_H
560     #define _ASM_CLOCKSOURCE_H
561    
562     +#include <asm/vdso/clocksource.h>
563     +
564     struct arch_clocksource_data {
565     - bool vdso_direct; /* Usable for direct VDSO access? */
566     + /* Usable for direct VDSO access? */
567     + enum vdso_arch_clockmode clock_mode;
568     };
569    
570     #endif
571     diff --git a/arch/arm64/include/asm/debug-monitors.h b/arch/arm64/include/asm/debug-monitors.h
572     index 7619f473155f..d825e3585e28 100644
573     --- a/arch/arm64/include/asm/debug-monitors.h
574     +++ b/arch/arm64/include/asm/debug-monitors.h
575     @@ -109,6 +109,8 @@ void disable_debug_monitors(enum dbg_active_el el);
576    
577     void user_rewind_single_step(struct task_struct *task);
578     void user_fastforward_single_step(struct task_struct *task);
579     +void user_regs_reset_single_step(struct user_pt_regs *regs,
580     + struct task_struct *task);
581    
582     void kernel_enable_single_step(struct pt_regs *regs);
583     void kernel_disable_single_step(void);
584     diff --git a/arch/arm64/include/asm/syscall.h b/arch/arm64/include/asm/syscall.h
585     index 65299a2dcf9c..cfc0672013f6 100644
586     --- a/arch/arm64/include/asm/syscall.h
587     +++ b/arch/arm64/include/asm/syscall.h
588     @@ -34,6 +34,10 @@ static inline long syscall_get_error(struct task_struct *task,
589     struct pt_regs *regs)
590     {
591     unsigned long error = regs->regs[0];
592     +
593     + if (is_compat_thread(task_thread_info(task)))
594     + error = sign_extend64(error, 31);
595     +
596     return IS_ERR_VALUE(error) ? error : 0;
597     }
598    
599     @@ -47,7 +51,13 @@ static inline void syscall_set_return_value(struct task_struct *task,
600     struct pt_regs *regs,
601     int error, long val)
602     {
603     - regs->regs[0] = (long) error ? error : val;
604     + if (error)
605     + val = error;
606     +
607     + if (is_compat_thread(task_thread_info(task)))
608     + val = lower_32_bits(val);
609     +
610     + regs->regs[0] = val;
611     }
612    
613     #define SYSCALL_MAX_ARGS 6
614     diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h
615     index f0cec4160136..4e3ed702bec7 100644
616     --- a/arch/arm64/include/asm/thread_info.h
617     +++ b/arch/arm64/include/asm/thread_info.h
618     @@ -91,6 +91,7 @@ void arch_release_task_struct(struct task_struct *tsk);
619     #define _TIF_SYSCALL_EMU (1 << TIF_SYSCALL_EMU)
620     #define _TIF_UPROBE (1 << TIF_UPROBE)
621     #define _TIF_FSCHECK (1 << TIF_FSCHECK)
622     +#define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP)
623     #define _TIF_32BIT (1 << TIF_32BIT)
624     #define _TIF_SVE (1 << TIF_SVE)
625    
626     diff --git a/arch/arm64/include/asm/vdso/clocksource.h b/arch/arm64/include/asm/vdso/clocksource.h
627     new file mode 100644
628     index 000000000000..8019f616e1f7
629     --- /dev/null
630     +++ b/arch/arm64/include/asm/vdso/clocksource.h
631     @@ -0,0 +1,14 @@
632     +/* SPDX-License-Identifier: GPL-2.0 */
633     +#ifndef __ASM_VDSOCLOCKSOURCE_H
634     +#define __ASM_VDSOCLOCKSOURCE_H
635     +
636     +enum vdso_arch_clockmode {
637     + /* vdso clocksource not usable */
638     + VDSO_CLOCKMODE_NONE,
639     + /* vdso clocksource for both 32 and 64bit tasks */
640     + VDSO_CLOCKMODE_ARCHTIMER,
641     + /* vdso clocksource for 64bit tasks only */
642     + VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT,
643     +};
644     +
645     +#endif
646     diff --git a/arch/arm64/include/asm/vdso/compat_gettimeofday.h b/arch/arm64/include/asm/vdso/compat_gettimeofday.h
647     index c50ee1b7d5cd..413d42e197c7 100644
648     --- a/arch/arm64/include/asm/vdso/compat_gettimeofday.h
649     +++ b/arch/arm64/include/asm/vdso/compat_gettimeofday.h
650     @@ -10,6 +10,7 @@
651     #include <asm/unistd.h>
652     #include <uapi/linux/time.h>
653    
654     +#include <asm/vdso/clocksource.h>
655     #include <asm/vdso/compat_barrier.h>
656    
657     #define __VDSO_USE_SYSCALL ULLONG_MAX
658     @@ -117,10 +118,10 @@ static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
659     u64 res;
660    
661     /*
662     - * clock_mode == 0 implies that vDSO are enabled otherwise
663     + * clock_mode == ARCHTIMER implies that vDSO are enabled otherwise
664     * fallback on syscall.
665     */
666     - if (clock_mode)
667     + if (clock_mode != VDSO_CLOCKMODE_ARCHTIMER)
668     return __VDSO_USE_SYSCALL;
669    
670     /*
671     diff --git a/arch/arm64/include/asm/vdso/gettimeofday.h b/arch/arm64/include/asm/vdso/gettimeofday.h
672     index b08f476b72b4..ff83b8b574fc 100644
673     --- a/arch/arm64/include/asm/vdso/gettimeofday.h
674     +++ b/arch/arm64/include/asm/vdso/gettimeofday.h
675     @@ -10,6 +10,8 @@
676     #include <asm/unistd.h>
677     #include <uapi/linux/time.h>
678    
679     +#include <asm/vdso/clocksource.h>
680     +
681     #define __VDSO_USE_SYSCALL ULLONG_MAX
682    
683     #define VDSO_HAS_CLOCK_GETRES 1
684     @@ -71,10 +73,10 @@ static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
685     u64 res;
686    
687     /*
688     - * clock_mode == 0 implies that vDSO are enabled otherwise
689     + * clock_mode != NONE implies that vDSO are enabled otherwise
690     * fallback on syscall.
691     */
692     - if (clock_mode)
693     + if (clock_mode == VDSO_CLOCKMODE_NONE)
694     return __VDSO_USE_SYSCALL;
695    
696     /*
697     diff --git a/arch/arm64/include/asm/vdso/vsyscall.h b/arch/arm64/include/asm/vdso/vsyscall.h
698     index 0c20a7c1bee5..e50f26741946 100644
699     --- a/arch/arm64/include/asm/vdso/vsyscall.h
700     +++ b/arch/arm64/include/asm/vdso/vsyscall.h
701     @@ -24,9 +24,7 @@ struct vdso_data *__arm64_get_k_vdso_data(void)
702     static __always_inline
703     int __arm64_get_clock_mode(struct timekeeper *tk)
704     {
705     - u32 use_syscall = !tk->tkr_mono.clock->archdata.vdso_direct;
706     -
707     - return use_syscall;
708     + return tk->tkr_mono.clock->archdata.clock_mode;
709     }
710     #define __arch_get_clock_mode __arm64_get_clock_mode
711    
712     diff --git a/arch/arm64/kernel/alternative.c b/arch/arm64/kernel/alternative.c
713     index d1757ef1b1e7..73039949b5ce 100644
714     --- a/arch/arm64/kernel/alternative.c
715     +++ b/arch/arm64/kernel/alternative.c
716     @@ -43,20 +43,8 @@ bool alternative_is_applied(u16 cpufeature)
717     */
718     static bool branch_insn_requires_update(struct alt_instr *alt, unsigned long pc)
719     {
720     - unsigned long replptr;
721     -
722     - if (kernel_text_address(pc))
723     - return true;
724     -
725     - replptr = (unsigned long)ALT_REPL_PTR(alt);
726     - if (pc >= replptr && pc <= (replptr + alt->alt_len))
727     - return false;
728     -
729     - /*
730     - * Branching into *another* alternate sequence is doomed, and
731     - * we're not even trying to fix it up.
732     - */
733     - BUG();
734     + unsigned long replptr = (unsigned long)ALT_REPL_PTR(alt);
735     + return !(pc >= replptr && pc <= (replptr + alt->alt_len));
736     }
737    
738     #define align_down(x, a) ((unsigned long)(x) & ~(((unsigned long)(a)) - 1))
739     diff --git a/arch/arm64/kernel/debug-monitors.c b/arch/arm64/kernel/debug-monitors.c
740     index 48222a4760c2..7569deb1eac1 100644
741     --- a/arch/arm64/kernel/debug-monitors.c
742     +++ b/arch/arm64/kernel/debug-monitors.c
743     @@ -141,17 +141,20 @@ postcore_initcall(debug_monitors_init);
744     /*
745     * Single step API and exception handling.
746     */
747     -static void set_regs_spsr_ss(struct pt_regs *regs)
748     +static void set_user_regs_spsr_ss(struct user_pt_regs *regs)
749     {
750     regs->pstate |= DBG_SPSR_SS;
751     }
752     -NOKPROBE_SYMBOL(set_regs_spsr_ss);
753     +NOKPROBE_SYMBOL(set_user_regs_spsr_ss);
754    
755     -static void clear_regs_spsr_ss(struct pt_regs *regs)
756     +static void clear_user_regs_spsr_ss(struct user_pt_regs *regs)
757     {
758     regs->pstate &= ~DBG_SPSR_SS;
759     }
760     -NOKPROBE_SYMBOL(clear_regs_spsr_ss);
761     +NOKPROBE_SYMBOL(clear_user_regs_spsr_ss);
762     +
763     +#define set_regs_spsr_ss(r) set_user_regs_spsr_ss(&(r)->user_regs)
764     +#define clear_regs_spsr_ss(r) clear_user_regs_spsr_ss(&(r)->user_regs)
765    
766     static DEFINE_SPINLOCK(debug_hook_lock);
767     static LIST_HEAD(user_step_hook);
768     @@ -404,6 +407,15 @@ void user_fastforward_single_step(struct task_struct *task)
769     clear_regs_spsr_ss(task_pt_regs(task));
770     }
771    
772     +void user_regs_reset_single_step(struct user_pt_regs *regs,
773     + struct task_struct *task)
774     +{
775     + if (test_tsk_thread_flag(task, TIF_SINGLESTEP))
776     + set_user_regs_spsr_ss(regs);
777     + else
778     + clear_user_regs_spsr_ss(regs);
779     +}
780     +
781     /* Kernel API */
782     void kernel_enable_single_step(struct pt_regs *regs)
783     {
784     diff --git a/arch/arm64/kernel/ptrace.c b/arch/arm64/kernel/ptrace.c
785     index 8d2d9d5b418f..30b877f8b85e 100644
786     --- a/arch/arm64/kernel/ptrace.c
787     +++ b/arch/arm64/kernel/ptrace.c
788     @@ -1819,12 +1819,23 @@ static void tracehook_report_syscall(struct pt_regs *regs,
789     saved_reg = regs->regs[regno];
790     regs->regs[regno] = dir;
791    
792     - if (dir == PTRACE_SYSCALL_EXIT)
793     + if (dir == PTRACE_SYSCALL_ENTER) {
794     + if (tracehook_report_syscall_entry(regs))
795     + forget_syscall(regs);
796     + regs->regs[regno] = saved_reg;
797     + } else if (!test_thread_flag(TIF_SINGLESTEP)) {
798     tracehook_report_syscall_exit(regs, 0);
799     - else if (tracehook_report_syscall_entry(regs))
800     - forget_syscall(regs);
801     + regs->regs[regno] = saved_reg;
802     + } else {
803     + regs->regs[regno] = saved_reg;
804    
805     - regs->regs[regno] = saved_reg;
806     + /*
807     + * Signal a pseudo-step exception since we are stepping but
808     + * tracer modifications to the registers may have rewound the
809     + * state machine.
810     + */
811     + tracehook_report_syscall_exit(regs, 1);
812     + }
813     }
814    
815     int syscall_trace_enter(struct pt_regs *regs)
816     @@ -1852,12 +1863,14 @@ int syscall_trace_enter(struct pt_regs *regs)
817    
818     void syscall_trace_exit(struct pt_regs *regs)
819     {
820     + unsigned long flags = READ_ONCE(current_thread_info()->flags);
821     +
822     audit_syscall_exit(regs);
823    
824     - if (test_thread_flag(TIF_SYSCALL_TRACEPOINT))
825     + if (flags & _TIF_SYSCALL_TRACEPOINT)
826     trace_sys_exit(regs, regs_return_value(regs));
827    
828     - if (test_thread_flag(TIF_SYSCALL_TRACE))
829     + if (flags & (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP))
830     tracehook_report_syscall(regs, PTRACE_SYSCALL_EXIT);
831    
832     rseq_syscall(regs);
833     @@ -1935,8 +1948,8 @@ static int valid_native_regs(struct user_pt_regs *regs)
834     */
835     int valid_user_regs(struct user_pt_regs *regs, struct task_struct *task)
836     {
837     - if (!test_tsk_thread_flag(task, TIF_SINGLESTEP))
838     - regs->pstate &= ~DBG_SPSR_SS;
839     + /* https://lore.kernel.org/lkml/20191118131525.GA4180@willie-the-truck */
840     + user_regs_reset_single_step(regs, task);
841    
842     if (is_compat_thread(task_thread_info(task)))
843     return valid_compat_regs(regs);
844     diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c
845     index dd2cdc0d5be2..ddb757b2c3e5 100644
846     --- a/arch/arm64/kernel/signal.c
847     +++ b/arch/arm64/kernel/signal.c
848     @@ -782,7 +782,6 @@ static void setup_restart_syscall(struct pt_regs *regs)
849     */
850     static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)
851     {
852     - struct task_struct *tsk = current;
853     sigset_t *oldset = sigmask_to_save();
854     int usig = ksig->sig;
855     int ret;
856     @@ -806,14 +805,8 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs)
857     */
858     ret |= !valid_user_regs(&regs->user_regs, current);
859    
860     - /*
861     - * Fast forward the stepping logic so we step into the signal
862     - * handler.
863     - */
864     - if (!ret)
865     - user_fastforward_single_step(tsk);
866     -
867     - signal_setup_done(ret, ksig, 0);
868     + /* Step into the signal handler if we are stepping */
869     + signal_setup_done(ret, ksig, test_thread_flag(TIF_SINGLESTEP));
870     }
871    
872     /*
873     diff --git a/arch/arm64/kernel/syscall.c b/arch/arm64/kernel/syscall.c
874     index 871c739f060a..1457a0ba83db 100644
875     --- a/arch/arm64/kernel/syscall.c
876     +++ b/arch/arm64/kernel/syscall.c
877     @@ -50,6 +50,9 @@ static void invoke_syscall(struct pt_regs *regs, unsigned int scno,
878     ret = do_ni_syscall(regs, scno);
879     }
880    
881     + if (is_compat_task())
882     + ret = lower_32_bits(ret);
883     +
884     regs->regs[0] = ret;
885     }
886    
887     @@ -121,7 +124,7 @@ static void el0_svc_common(struct pt_regs *regs, int scno, int sc_nr,
888     if (!has_syscall_work(flags) && !IS_ENABLED(CONFIG_DEBUG_RSEQ)) {
889     local_daif_mask();
890     flags = current_thread_info()->flags;
891     - if (!has_syscall_work(flags)) {
892     + if (!has_syscall_work(flags) && !(flags & _TIF_SINGLESTEP)) {
893     /*
894     * We're off to userspace, where interrupts are
895     * always enabled after we restore the flags from
896     diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
897     index e1af25dbc57e..8d0374ffdd2d 100644
898     --- a/arch/arm64/kernel/vmlinux.lds.S
899     +++ b/arch/arm64/kernel/vmlinux.lds.S
900     @@ -172,9 +172,6 @@ SECTIONS
901     *(.altinstructions)
902     __alt_instructions_end = .;
903     }
904     - .altinstr_replacement : {
905     - *(.altinstr_replacement)
906     - }
907    
908     . = ALIGN(PAGE_SIZE);
909     __inittext_end = .;
910     diff --git a/arch/ia64/configs/zx1_defconfig b/arch/ia64/configs/zx1_defconfig
911     index 8c92e095f8bb..d42f79a33e91 100644
912     --- a/arch/ia64/configs/zx1_defconfig
913     +++ b/arch/ia64/configs/zx1_defconfig
914     @@ -35,7 +35,6 @@ CONFIG_BLK_DEV_SD=y
915     CONFIG_CHR_DEV_ST=y
916     CONFIG_CHR_DEV_OSST=y
917     CONFIG_BLK_DEV_SR=y
918     -CONFIG_BLK_DEV_SR_VENDOR=y
919     CONFIG_CHR_DEV_SG=y
920     CONFIG_SCSI_CONSTANTS=y
921     CONFIG_SCSI_LOGGING=y
922     diff --git a/arch/m68k/configs/amiga_defconfig b/arch/m68k/configs/amiga_defconfig
923     index 9a33c1c006a1..cf8103fa2f34 100644
924     --- a/arch/m68k/configs/amiga_defconfig
925     +++ b/arch/m68k/configs/amiga_defconfig
926     @@ -334,7 +334,6 @@ CONFIG_SCSI=y
927     CONFIG_BLK_DEV_SD=y
928     CONFIG_CHR_DEV_ST=m
929     CONFIG_BLK_DEV_SR=y
930     -CONFIG_BLK_DEV_SR_VENDOR=y
931     CONFIG_CHR_DEV_SG=m
932     CONFIG_SCSI_CONSTANTS=y
933     CONFIG_SCSI_SAS_ATTRS=m
934     diff --git a/arch/m68k/configs/apollo_defconfig b/arch/m68k/configs/apollo_defconfig
935     index 7fdbc797a05d..5636288a4b45 100644
936     --- a/arch/m68k/configs/apollo_defconfig
937     +++ b/arch/m68k/configs/apollo_defconfig
938     @@ -319,7 +319,6 @@ CONFIG_SCSI=y
939     CONFIG_BLK_DEV_SD=y
940     CONFIG_CHR_DEV_ST=m
941     CONFIG_BLK_DEV_SR=y
942     -CONFIG_BLK_DEV_SR_VENDOR=y
943     CONFIG_CHR_DEV_SG=m
944     CONFIG_SCSI_CONSTANTS=y
945     CONFIG_SCSI_SAS_ATTRS=m
946     diff --git a/arch/m68k/configs/atari_defconfig b/arch/m68k/configs/atari_defconfig
947     index f1763405a539..015a7f401ffd 100644
948     --- a/arch/m68k/configs/atari_defconfig
949     +++ b/arch/m68k/configs/atari_defconfig
950     @@ -334,7 +334,6 @@ CONFIG_SCSI=y
951     CONFIG_BLK_DEV_SD=y
952     CONFIG_CHR_DEV_ST=m
953     CONFIG_BLK_DEV_SR=y
954     -CONFIG_BLK_DEV_SR_VENDOR=y
955     CONFIG_CHR_DEV_SG=m
956     CONFIG_SCSI_CONSTANTS=y
957     CONFIG_SCSI_SAS_ATTRS=m
958     diff --git a/arch/m68k/configs/bvme6000_defconfig b/arch/m68k/configs/bvme6000_defconfig
959     index 91154d6acb31..1209430e61e1 100644
960     --- a/arch/m68k/configs/bvme6000_defconfig
961     +++ b/arch/m68k/configs/bvme6000_defconfig
962     @@ -316,7 +316,6 @@ CONFIG_SCSI=y
963     CONFIG_BLK_DEV_SD=y
964     CONFIG_CHR_DEV_ST=m
965     CONFIG_BLK_DEV_SR=y
966     -CONFIG_BLK_DEV_SR_VENDOR=y
967     CONFIG_CHR_DEV_SG=m
968     CONFIG_SCSI_CONSTANTS=y
969     CONFIG_SCSI_SAS_ATTRS=m
970     diff --git a/arch/m68k/configs/hp300_defconfig b/arch/m68k/configs/hp300_defconfig
971     index c398c4a94d95..a41b16067f5c 100644
972     --- a/arch/m68k/configs/hp300_defconfig
973     +++ b/arch/m68k/configs/hp300_defconfig
974     @@ -318,7 +318,6 @@ CONFIG_SCSI=y
975     CONFIG_BLK_DEV_SD=y
976     CONFIG_CHR_DEV_ST=m
977     CONFIG_BLK_DEV_SR=y
978     -CONFIG_BLK_DEV_SR_VENDOR=y
979     CONFIG_CHR_DEV_SG=m
980     CONFIG_SCSI_CONSTANTS=y
981     CONFIG_SCSI_SAS_ATTRS=m
982     diff --git a/arch/m68k/configs/mac_defconfig b/arch/m68k/configs/mac_defconfig
983     index 350d004559be..8af104a8c000 100644
984     --- a/arch/m68k/configs/mac_defconfig
985     +++ b/arch/m68k/configs/mac_defconfig
986     @@ -325,7 +325,6 @@ CONFIG_SCSI=y
987     CONFIG_BLK_DEV_SD=y
988     CONFIG_CHR_DEV_ST=m
989     CONFIG_BLK_DEV_SR=y
990     -CONFIG_BLK_DEV_SR_VENDOR=y
991     CONFIG_CHR_DEV_SG=m
992     CONFIG_SCSI_CONSTANTS=y
993     CONFIG_SCSI_SAS_ATTRS=m
994     diff --git a/arch/m68k/configs/multi_defconfig b/arch/m68k/configs/multi_defconfig
995     index b838dd820348..354ff30e22c9 100644
996     --- a/arch/m68k/configs/multi_defconfig
997     +++ b/arch/m68k/configs/multi_defconfig
998     @@ -358,7 +358,6 @@ CONFIG_SCSI=y
999     CONFIG_BLK_DEV_SD=y
1000     CONFIG_CHR_DEV_ST=m
1001     CONFIG_BLK_DEV_SR=y
1002     -CONFIG_BLK_DEV_SR_VENDOR=y
1003     CONFIG_CHR_DEV_SG=m
1004     CONFIG_SCSI_CONSTANTS=y
1005     CONFIG_SCSI_SAS_ATTRS=m
1006     diff --git a/arch/m68k/configs/mvme147_defconfig b/arch/m68k/configs/mvme147_defconfig
1007     index 3f8dd61559cf..eac7685cea42 100644
1008     --- a/arch/m68k/configs/mvme147_defconfig
1009     +++ b/arch/m68k/configs/mvme147_defconfig
1010     @@ -315,7 +315,6 @@ CONFIG_SCSI=y
1011     CONFIG_BLK_DEV_SD=y
1012     CONFIG_CHR_DEV_ST=m
1013     CONFIG_BLK_DEV_SR=y
1014     -CONFIG_BLK_DEV_SR_VENDOR=y
1015     CONFIG_CHR_DEV_SG=m
1016     CONFIG_SCSI_CONSTANTS=y
1017     CONFIG_SCSI_SAS_ATTRS=m
1018     diff --git a/arch/m68k/configs/mvme16x_defconfig b/arch/m68k/configs/mvme16x_defconfig
1019     index ae3b2d4f636c..0f38c4a3c87a 100644
1020     --- a/arch/m68k/configs/mvme16x_defconfig
1021     +++ b/arch/m68k/configs/mvme16x_defconfig
1022     @@ -316,7 +316,6 @@ CONFIG_SCSI=y
1023     CONFIG_BLK_DEV_SD=y
1024     CONFIG_CHR_DEV_ST=m
1025     CONFIG_BLK_DEV_SR=y
1026     -CONFIG_BLK_DEV_SR_VENDOR=y
1027     CONFIG_CHR_DEV_SG=m
1028     CONFIG_SCSI_CONSTANTS=y
1029     CONFIG_SCSI_SAS_ATTRS=m
1030     diff --git a/arch/m68k/configs/q40_defconfig b/arch/m68k/configs/q40_defconfig
1031     index cd61ef14b582..6ede6869db1c 100644
1032     --- a/arch/m68k/configs/q40_defconfig
1033     +++ b/arch/m68k/configs/q40_defconfig
1034     @@ -324,7 +324,6 @@ CONFIG_SCSI=y
1035     CONFIG_BLK_DEV_SD=y
1036     CONFIG_CHR_DEV_ST=m
1037     CONFIG_BLK_DEV_SR=y
1038     -CONFIG_BLK_DEV_SR_VENDOR=y
1039     CONFIG_CHR_DEV_SG=m
1040     CONFIG_SCSI_CONSTANTS=y
1041     CONFIG_SCSI_SAS_ATTRS=m
1042     diff --git a/arch/m68k/configs/sun3_defconfig b/arch/m68k/configs/sun3_defconfig
1043     index 151f5371cd3d..8644c4789938 100644
1044     --- a/arch/m68k/configs/sun3_defconfig
1045     +++ b/arch/m68k/configs/sun3_defconfig
1046     @@ -313,7 +313,6 @@ CONFIG_SCSI=y
1047     CONFIG_BLK_DEV_SD=y
1048     CONFIG_CHR_DEV_ST=m
1049     CONFIG_BLK_DEV_SR=y
1050     -CONFIG_BLK_DEV_SR_VENDOR=y
1051     CONFIG_CHR_DEV_SG=m
1052     CONFIG_SCSI_CONSTANTS=y
1053     CONFIG_SCSI_SAS_ATTRS=m
1054     diff --git a/arch/m68k/configs/sun3x_defconfig b/arch/m68k/configs/sun3x_defconfig
1055     index 1dcb0ee1fe98..f2fd0da2346e 100644
1056     --- a/arch/m68k/configs/sun3x_defconfig
1057     +++ b/arch/m68k/configs/sun3x_defconfig
1058     @@ -313,7 +313,6 @@ CONFIG_SCSI=y
1059     CONFIG_BLK_DEV_SD=y
1060     CONFIG_CHR_DEV_ST=m
1061     CONFIG_BLK_DEV_SR=y
1062     -CONFIG_BLK_DEV_SR_VENDOR=y
1063     CONFIG_CHR_DEV_SG=m
1064     CONFIG_SCSI_CONSTANTS=y
1065     CONFIG_SCSI_SAS_ATTRS=m
1066     diff --git a/arch/m68k/kernel/setup_no.c b/arch/m68k/kernel/setup_no.c
1067     index 3c5def10d486..caa260f877f2 100644
1068     --- a/arch/m68k/kernel/setup_no.c
1069     +++ b/arch/m68k/kernel/setup_no.c
1070     @@ -139,7 +139,8 @@ void __init setup_arch(char **cmdline_p)
1071     pr_debug("MEMORY -> ROMFS=0x%p-0x%06lx MEM=0x%06lx-0x%06lx\n ",
1072     __bss_stop, memory_start, memory_start, memory_end);
1073    
1074     - memblock_add(memory_start, memory_end - memory_start);
1075     + memblock_add(_rambase, memory_end - _rambase);
1076     + memblock_reserve(_rambase, memory_start - _rambase);
1077    
1078     /* Keep a copy of command line */
1079     *cmdline_p = &command_line[0];
1080     diff --git a/arch/m68k/mm/mcfmmu.c b/arch/m68k/mm/mcfmmu.c
1081     index 6cb1e41d58d0..70a5f55ea664 100644
1082     --- a/arch/m68k/mm/mcfmmu.c
1083     +++ b/arch/m68k/mm/mcfmmu.c
1084     @@ -164,7 +164,7 @@ void __init cf_bootmem_alloc(void)
1085     m68k_memory[0].addr = _rambase;
1086     m68k_memory[0].size = _ramend - _rambase;
1087    
1088     - memblock_add(m68k_memory[0].addr, m68k_memory[0].size);
1089     + memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0);
1090    
1091     /* compute total pages in system */
1092     num_pages = PFN_DOWN(_ramend - _rambase);
1093     diff --git a/arch/mips/configs/bigsur_defconfig b/arch/mips/configs/bigsur_defconfig
1094     index f14ad0538f4e..eea9b613bb74 100644
1095     --- a/arch/mips/configs/bigsur_defconfig
1096     +++ b/arch/mips/configs/bigsur_defconfig
1097     @@ -112,7 +112,6 @@ CONFIG_BLK_DEV_TC86C001=m
1098     CONFIG_BLK_DEV_SD=y
1099     CONFIG_CHR_DEV_ST=y
1100     CONFIG_BLK_DEV_SR=y
1101     -CONFIG_BLK_DEV_SR_VENDOR=y
1102     CONFIG_CHR_DEV_SG=m
1103     CONFIG_CHR_DEV_SCH=m
1104     CONFIG_ATA=y
1105     diff --git a/arch/mips/configs/fuloong2e_defconfig b/arch/mips/configs/fuloong2e_defconfig
1106     index 7a7af706e898..c5f66b7f2b22 100644
1107     --- a/arch/mips/configs/fuloong2e_defconfig
1108     +++ b/arch/mips/configs/fuloong2e_defconfig
1109     @@ -99,7 +99,6 @@ CONFIG_CDROM_PKTCDVD=m
1110     CONFIG_ATA_OVER_ETH=m
1111     CONFIG_BLK_DEV_SD=y
1112     CONFIG_BLK_DEV_SR=y
1113     -CONFIG_BLK_DEV_SR_VENDOR=y
1114     CONFIG_CHR_DEV_SG=y
1115     CONFIG_SCSI_CONSTANTS=y
1116     # CONFIG_SCSI_LOWLEVEL is not set
1117     diff --git a/arch/mips/configs/ip27_defconfig b/arch/mips/configs/ip27_defconfig
1118     index 82d942a6026e..638d7cf5ef01 100644
1119     --- a/arch/mips/configs/ip27_defconfig
1120     +++ b/arch/mips/configs/ip27_defconfig
1121     @@ -99,7 +99,6 @@ CONFIG_SCSI=y
1122     CONFIG_BLK_DEV_SD=y
1123     CONFIG_CHR_DEV_ST=y
1124     CONFIG_BLK_DEV_SR=m
1125     -CONFIG_BLK_DEV_SR_VENDOR=y
1126     CONFIG_CHR_DEV_SG=m
1127     CONFIG_CHR_DEV_SCH=m
1128     CONFIG_SCSI_CONSTANTS=y
1129     diff --git a/arch/mips/configs/ip32_defconfig b/arch/mips/configs/ip32_defconfig
1130     index 370884018aad..7b1fab518317 100644
1131     --- a/arch/mips/configs/ip32_defconfig
1132     +++ b/arch/mips/configs/ip32_defconfig
1133     @@ -50,7 +50,6 @@ CONFIG_RAID_ATTRS=y
1134     CONFIG_SCSI=y
1135     CONFIG_BLK_DEV_SD=y
1136     CONFIG_BLK_DEV_SR=y
1137     -CONFIG_BLK_DEV_SR_VENDOR=y
1138     CONFIG_CHR_DEV_SG=m
1139     CONFIG_SCSI_CONSTANTS=y
1140     CONFIG_SCSI_LOGGING=y
1141     diff --git a/arch/mips/configs/jazz_defconfig b/arch/mips/configs/jazz_defconfig
1142     index 328d4dfeb4cb..982b990469af 100644
1143     --- a/arch/mips/configs/jazz_defconfig
1144     +++ b/arch/mips/configs/jazz_defconfig
1145     @@ -191,7 +191,6 @@ CONFIG_SCSI=y
1146     CONFIG_BLK_DEV_SD=y
1147     CONFIG_CHR_DEV_ST=m
1148     CONFIG_BLK_DEV_SR=m
1149     -CONFIG_BLK_DEV_SR_VENDOR=y
1150     CONFIG_SCSI_CONSTANTS=y
1151     CONFIG_SCSI_SCAN_ASYNC=y
1152     CONFIG_SCSI_FC_ATTRS=y
1153     diff --git a/arch/mips/configs/malta_defconfig b/arch/mips/configs/malta_defconfig
1154     index 59eedf55419d..211bd3d6e6cb 100644
1155     --- a/arch/mips/configs/malta_defconfig
1156     +++ b/arch/mips/configs/malta_defconfig
1157     @@ -239,7 +239,6 @@ CONFIG_BLK_DEV_SD=y
1158     CONFIG_CHR_DEV_ST=m
1159     CONFIG_CHR_DEV_OSST=m
1160     CONFIG_BLK_DEV_SR=y
1161     -CONFIG_BLK_DEV_SR_VENDOR=y
1162     CONFIG_CHR_DEV_SG=m
1163     CONFIG_SCSI_CONSTANTS=y
1164     CONFIG_SCSI_LOGGING=y
1165     diff --git a/arch/mips/configs/malta_kvm_defconfig b/arch/mips/configs/malta_kvm_defconfig
1166     index 8ef612552a19..62b1969b4f55 100644
1167     --- a/arch/mips/configs/malta_kvm_defconfig
1168     +++ b/arch/mips/configs/malta_kvm_defconfig
1169     @@ -247,7 +247,6 @@ CONFIG_BLK_DEV_SD=y
1170     CONFIG_CHR_DEV_ST=m
1171     CONFIG_CHR_DEV_OSST=m
1172     CONFIG_BLK_DEV_SR=y
1173     -CONFIG_BLK_DEV_SR_VENDOR=y
1174     CONFIG_CHR_DEV_SG=m
1175     CONFIG_SCSI_CONSTANTS=y
1176     CONFIG_SCSI_LOGGING=y
1177     diff --git a/arch/mips/configs/malta_kvm_guest_defconfig b/arch/mips/configs/malta_kvm_guest_defconfig
1178     index d2a008c9907c..9185e0a0aa45 100644
1179     --- a/arch/mips/configs/malta_kvm_guest_defconfig
1180     +++ b/arch/mips/configs/malta_kvm_guest_defconfig
1181     @@ -245,7 +245,6 @@ CONFIG_BLK_DEV_SD=y
1182     CONFIG_CHR_DEV_ST=m
1183     CONFIG_CHR_DEV_OSST=m
1184     CONFIG_BLK_DEV_SR=y
1185     -CONFIG_BLK_DEV_SR_VENDOR=y
1186     CONFIG_CHR_DEV_SG=m
1187     CONFIG_SCSI_CONSTANTS=y
1188     CONFIG_SCSI_LOGGING=y
1189     diff --git a/arch/mips/configs/maltaup_xpa_defconfig b/arch/mips/configs/maltaup_xpa_defconfig
1190     index 970df6d42728..636311d67a53 100644
1191     --- a/arch/mips/configs/maltaup_xpa_defconfig
1192     +++ b/arch/mips/configs/maltaup_xpa_defconfig
1193     @@ -245,7 +245,6 @@ CONFIG_BLK_DEV_SD=y
1194     CONFIG_CHR_DEV_ST=m
1195     CONFIG_CHR_DEV_OSST=m
1196     CONFIG_BLK_DEV_SR=y
1197     -CONFIG_BLK_DEV_SR_VENDOR=y
1198     CONFIG_CHR_DEV_SG=m
1199     CONFIG_SCSI_CONSTANTS=y
1200     CONFIG_SCSI_LOGGING=y
1201     diff --git a/arch/mips/configs/rm200_defconfig b/arch/mips/configs/rm200_defconfig
1202     index 2c7adea7638f..30d7c3db884e 100644
1203     --- a/arch/mips/configs/rm200_defconfig
1204     +++ b/arch/mips/configs/rm200_defconfig
1205     @@ -203,7 +203,6 @@ CONFIG_SCSI=y
1206     CONFIG_BLK_DEV_SD=y
1207     CONFIG_CHR_DEV_ST=m
1208     CONFIG_BLK_DEV_SR=m
1209     -CONFIG_BLK_DEV_SR_VENDOR=y
1210     CONFIG_SCSI_CONSTANTS=y
1211     CONFIG_SCSI_SCAN_ASYNC=y
1212     CONFIG_SCSI_FC_ATTRS=y
1213     diff --git a/arch/powerpc/configs/85xx-hw.config b/arch/powerpc/configs/85xx-hw.config
1214     index 9575a38c9155..b507df6ac69f 100644
1215     --- a/arch/powerpc/configs/85xx-hw.config
1216     +++ b/arch/powerpc/configs/85xx-hw.config
1217     @@ -2,7 +2,6 @@ CONFIG_AQUANTIA_PHY=y
1218     CONFIG_AT803X_PHY=y
1219     CONFIG_ATA=y
1220     CONFIG_BLK_DEV_SD=y
1221     -CONFIG_BLK_DEV_SR_VENDOR=y
1222     CONFIG_BLK_DEV_SR=y
1223     CONFIG_BROADCOM_PHY=y
1224     CONFIG_C293_PCIE=y
1225     diff --git a/arch/powerpc/configs/amigaone_defconfig b/arch/powerpc/configs/amigaone_defconfig
1226     index cf94d28d0e31..340140160c7b 100644
1227     --- a/arch/powerpc/configs/amigaone_defconfig
1228     +++ b/arch/powerpc/configs/amigaone_defconfig
1229     @@ -47,7 +47,6 @@ CONFIG_BLK_DEV_RAM=y
1230     CONFIG_BLK_DEV_SD=y
1231     CONFIG_CHR_DEV_ST=y
1232     CONFIG_BLK_DEV_SR=y
1233     -CONFIG_BLK_DEV_SR_VENDOR=y
1234     CONFIG_CHR_DEV_SG=y
1235     CONFIG_SCSI_CONSTANTS=y
1236     CONFIG_SCSI_SYM53C8XX_2=y
1237     diff --git a/arch/powerpc/configs/chrp32_defconfig b/arch/powerpc/configs/chrp32_defconfig
1238     index 9ff493dd8439..6c5a4414e9ee 100644
1239     --- a/arch/powerpc/configs/chrp32_defconfig
1240     +++ b/arch/powerpc/configs/chrp32_defconfig
1241     @@ -45,7 +45,6 @@ CONFIG_BLK_DEV_RAM=y
1242     CONFIG_BLK_DEV_SD=y
1243     CONFIG_CHR_DEV_ST=y
1244     CONFIG_BLK_DEV_SR=y
1245     -CONFIG_BLK_DEV_SR_VENDOR=y
1246     CONFIG_CHR_DEV_SG=y
1247     CONFIG_SCSI_CONSTANTS=y
1248     CONFIG_SCSI_SYM53C8XX_2=y
1249     diff --git a/arch/powerpc/configs/g5_defconfig b/arch/powerpc/configs/g5_defconfig
1250     index fbfcc85e4dc0..a68c7f3af10e 100644
1251     --- a/arch/powerpc/configs/g5_defconfig
1252     +++ b/arch/powerpc/configs/g5_defconfig
1253     @@ -62,7 +62,6 @@ CONFIG_CDROM_PKTCDVD=m
1254     CONFIG_BLK_DEV_SD=y
1255     CONFIG_CHR_DEV_ST=y
1256     CONFIG_BLK_DEV_SR=y
1257     -CONFIG_BLK_DEV_SR_VENDOR=y
1258     CONFIG_CHR_DEV_SG=y
1259     CONFIG_SCSI_CONSTANTS=y
1260     CONFIG_SCSI_SPI_ATTRS=y
1261     diff --git a/arch/powerpc/configs/maple_defconfig b/arch/powerpc/configs/maple_defconfig
1262     index 2975e64629aa..161351a18517 100644
1263     --- a/arch/powerpc/configs/maple_defconfig
1264     +++ b/arch/powerpc/configs/maple_defconfig
1265     @@ -41,7 +41,6 @@ CONFIG_BLK_DEV_RAM_SIZE=8192
1266     # CONFIG_SCSI_PROC_FS is not set
1267     CONFIG_BLK_DEV_SD=y
1268     CONFIG_BLK_DEV_SR=y
1269     -CONFIG_BLK_DEV_SR_VENDOR=y
1270     CONFIG_CHR_DEV_SG=y
1271     CONFIG_SCSI_IPR=y
1272     CONFIG_ATA=y
1273     diff --git a/arch/powerpc/configs/pasemi_defconfig b/arch/powerpc/configs/pasemi_defconfig
1274     index 4b6d31d4474e..08b7f4cef243 100644
1275     --- a/arch/powerpc/configs/pasemi_defconfig
1276     +++ b/arch/powerpc/configs/pasemi_defconfig
1277     @@ -60,7 +60,6 @@ CONFIG_BLK_DEV_SD=y
1278     CONFIG_CHR_DEV_ST=y
1279     CONFIG_CHR_DEV_OSST=y
1280     CONFIG_BLK_DEV_SR=y
1281     -CONFIG_BLK_DEV_SR_VENDOR=y
1282     CONFIG_CHR_DEV_SG=y
1283     CONFIG_CHR_DEV_SCH=y
1284     CONFIG_SCSI_CONSTANTS=y
1285     diff --git a/arch/powerpc/configs/pmac32_defconfig b/arch/powerpc/configs/pmac32_defconfig
1286     index 4e6e95f92646..5cad09f93562 100644
1287     --- a/arch/powerpc/configs/pmac32_defconfig
1288     +++ b/arch/powerpc/configs/pmac32_defconfig
1289     @@ -119,7 +119,6 @@ CONFIG_BLK_DEV_RAM=y
1290     CONFIG_BLK_DEV_SD=y
1291     CONFIG_CHR_DEV_ST=y
1292     CONFIG_BLK_DEV_SR=y
1293     -CONFIG_BLK_DEV_SR_VENDOR=y
1294     CONFIG_CHR_DEV_SG=y
1295     CONFIG_SCSI_CONSTANTS=y
1296     CONFIG_SCSI_FC_ATTRS=y
1297     diff --git a/arch/powerpc/configs/powernv_defconfig b/arch/powerpc/configs/powernv_defconfig
1298     index 6658cceb928c..2a7c53cc2f83 100644
1299     --- a/arch/powerpc/configs/powernv_defconfig
1300     +++ b/arch/powerpc/configs/powernv_defconfig
1301     @@ -111,7 +111,6 @@ CONFIG_BLK_DEV_NVME=y
1302     CONFIG_BLK_DEV_SD=y
1303     CONFIG_CHR_DEV_ST=m
1304     CONFIG_BLK_DEV_SR=m
1305     -CONFIG_BLK_DEV_SR_VENDOR=y
1306     CONFIG_CHR_DEV_SG=m
1307     CONFIG_SCSI_CONSTANTS=y
1308     CONFIG_SCSI_SCAN_ASYNC=y
1309     diff --git a/arch/powerpc/configs/ppc64_defconfig b/arch/powerpc/configs/ppc64_defconfig
1310     index b250e6f5a7ca..5569d36066dc 100644
1311     --- a/arch/powerpc/configs/ppc64_defconfig
1312     +++ b/arch/powerpc/configs/ppc64_defconfig
1313     @@ -110,7 +110,6 @@ CONFIG_VIRTIO_BLK=m
1314     CONFIG_BLK_DEV_SD=y
1315     CONFIG_CHR_DEV_ST=m
1316     CONFIG_BLK_DEV_SR=y
1317     -CONFIG_BLK_DEV_SR_VENDOR=y
1318     CONFIG_CHR_DEV_SG=y
1319     CONFIG_SCSI_CONSTANTS=y
1320     CONFIG_SCSI_FC_ATTRS=y
1321     diff --git a/arch/powerpc/configs/ppc64e_defconfig b/arch/powerpc/configs/ppc64e_defconfig
1322     index 0d746774c2bd..33a01a9e86be 100644
1323     --- a/arch/powerpc/configs/ppc64e_defconfig
1324     +++ b/arch/powerpc/configs/ppc64e_defconfig
1325     @@ -60,7 +60,6 @@ CONFIG_BLK_DEV_RAM_SIZE=65536
1326     CONFIG_BLK_DEV_SD=y
1327     CONFIG_CHR_DEV_ST=y
1328     CONFIG_BLK_DEV_SR=y
1329     -CONFIG_BLK_DEV_SR_VENDOR=y
1330     CONFIG_CHR_DEV_SG=y
1331     CONFIG_SCSI_CONSTANTS=y
1332     CONFIG_SCSI_FC_ATTRS=y
1333     diff --git a/arch/powerpc/configs/ppc6xx_defconfig b/arch/powerpc/configs/ppc6xx_defconfig
1334     index 9dca4cffa623..1372a1a7517a 100644
1335     --- a/arch/powerpc/configs/ppc6xx_defconfig
1336     +++ b/arch/powerpc/configs/ppc6xx_defconfig
1337     @@ -372,7 +372,6 @@ CONFIG_BLK_DEV_SD=y
1338     CONFIG_CHR_DEV_ST=m
1339     CONFIG_CHR_DEV_OSST=m
1340     CONFIG_BLK_DEV_SR=m
1341     -CONFIG_BLK_DEV_SR_VENDOR=y
1342     CONFIG_CHR_DEV_SG=y
1343     CONFIG_CHR_DEV_SCH=m
1344     CONFIG_SCSI_ENCLOSURE=m
1345     diff --git a/arch/powerpc/configs/pseries_defconfig b/arch/powerpc/configs/pseries_defconfig
1346     index 26126b4d4de3..d58686a66388 100644
1347     --- a/arch/powerpc/configs/pseries_defconfig
1348     +++ b/arch/powerpc/configs/pseries_defconfig
1349     @@ -97,7 +97,6 @@ CONFIG_VIRTIO_BLK=m
1350     CONFIG_BLK_DEV_SD=y
1351     CONFIG_CHR_DEV_ST=m
1352     CONFIG_BLK_DEV_SR=y
1353     -CONFIG_BLK_DEV_SR_VENDOR=y
1354     CONFIG_CHR_DEV_SG=y
1355     CONFIG_SCSI_CONSTANTS=y
1356     CONFIG_SCSI_FC_ATTRS=y
1357     diff --git a/arch/powerpc/configs/skiroot_defconfig b/arch/powerpc/configs/skiroot_defconfig
1358     index 1253482a67c0..2e25b264f70f 100644
1359     --- a/arch/powerpc/configs/skiroot_defconfig
1360     +++ b/arch/powerpc/configs/skiroot_defconfig
1361     @@ -83,7 +83,6 @@ CONFIG_EEPROM_AT24=m
1362     # CONFIG_OCXL is not set
1363     CONFIG_BLK_DEV_SD=m
1364     CONFIG_BLK_DEV_SR=m
1365     -CONFIG_BLK_DEV_SR_VENDOR=y
1366     CONFIG_CHR_DEV_SG=m
1367     CONFIG_SCSI_CONSTANTS=y
1368     CONFIG_SCSI_SCAN_ASYNC=y
1369     diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c
1370     index 3f91ccaa9c74..4ea0cca52e16 100644
1371     --- a/arch/powerpc/kernel/paca.c
1372     +++ b/arch/powerpc/kernel/paca.c
1373     @@ -86,7 +86,7 @@ static void *__init alloc_shared_lppaca(unsigned long size, unsigned long align,
1374     * This is very early in boot, so no harm done if the kernel crashes at
1375     * this point.
1376     */
1377     - BUG_ON(shared_lppaca_size >= shared_lppaca_total_size);
1378     + BUG_ON(shared_lppaca_size > shared_lppaca_total_size);
1379    
1380     return ptr;
1381     }
1382     diff --git a/arch/powerpc/mm/book3s64/pkeys.c b/arch/powerpc/mm/book3s64/pkeys.c
1383     index ae7fca40e5b3..66f307e873dc 100644
1384     --- a/arch/powerpc/mm/book3s64/pkeys.c
1385     +++ b/arch/powerpc/mm/book3s64/pkeys.c
1386     @@ -367,12 +367,14 @@ static bool pkey_access_permitted(int pkey, bool write, bool execute)
1387     return true;
1388    
1389     pkey_shift = pkeyshift(pkey);
1390     - if (execute && !(read_iamr() & (IAMR_EX_BIT << pkey_shift)))
1391     - return true;
1392     + if (execute)
1393     + return !(read_iamr() & (IAMR_EX_BIT << pkey_shift));
1394     +
1395     + amr = read_amr();
1396     + if (write)
1397     + return !(amr & (AMR_WR_BIT << pkey_shift));
1398    
1399     - amr = read_amr(); /* Delay reading amr until absolutely needed */
1400     - return ((!write && !(amr & (AMR_RD_BIT << pkey_shift))) ||
1401     - (write && !(amr & (AMR_WR_BIT << pkey_shift))));
1402     + return !(amr & (AMR_RD_BIT << pkey_shift));
1403     }
1404    
1405     bool arch_pte_access_permitted(u64 pte, bool write, bool execute)
1406     diff --git a/arch/riscv/include/asm/thread_info.h b/arch/riscv/include/asm/thread_info.h
1407     index 905372d7eeb8..3df9a82bdbfd 100644
1408     --- a/arch/riscv/include/asm/thread_info.h
1409     +++ b/arch/riscv/include/asm/thread_info.h
1410     @@ -12,7 +12,11 @@
1411     #include <linux/const.h>
1412    
1413     /* thread information allocation */
1414     +#ifdef CONFIG_64BIT
1415     +#define THREAD_SIZE_ORDER (2)
1416     +#else
1417     #define THREAD_SIZE_ORDER (1)
1418     +#endif
1419     #define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)
1420    
1421     #ifndef __ASSEMBLY__
1422     diff --git a/arch/sh/configs/sh03_defconfig b/arch/sh/configs/sh03_defconfig
1423     index e5beb625ab88..87db9a84b5ec 100644
1424     --- a/arch/sh/configs/sh03_defconfig
1425     +++ b/arch/sh/configs/sh03_defconfig
1426     @@ -46,7 +46,6 @@ CONFIG_BLK_DEV_IDETAPE=m
1427     CONFIG_SCSI=m
1428     CONFIG_BLK_DEV_SD=m
1429     CONFIG_BLK_DEV_SR=m
1430     -CONFIG_BLK_DEV_SR_VENDOR=y
1431     CONFIG_CHR_DEV_SG=m
1432     CONFIG_NETDEVICES=y
1433     CONFIG_NET_ETHERNET=y
1434     diff --git a/arch/sparc/configs/sparc64_defconfig b/arch/sparc/configs/sparc64_defconfig
1435     index 6c325d53a20a..bde4d21a8ac8 100644
1436     --- a/arch/sparc/configs/sparc64_defconfig
1437     +++ b/arch/sparc/configs/sparc64_defconfig
1438     @@ -73,7 +73,6 @@ CONFIG_RAID_ATTRS=m
1439     CONFIG_SCSI=y
1440     CONFIG_BLK_DEV_SD=y
1441     CONFIG_BLK_DEV_SR=m
1442     -CONFIG_BLK_DEV_SR_VENDOR=y
1443     CONFIG_CHR_DEV_SG=m
1444     CONFIG_SCSI_MULTI_LUN=y
1445     CONFIG_SCSI_CONSTANTS=y
1446     diff --git a/arch/x86/configs/i386_defconfig b/arch/x86/configs/i386_defconfig
1447     index 59ce9ed58430..18806b4fb26a 100644
1448     --- a/arch/x86/configs/i386_defconfig
1449     +++ b/arch/x86/configs/i386_defconfig
1450     @@ -137,7 +137,6 @@ CONFIG_CONNECTOR=y
1451     CONFIG_BLK_DEV_LOOP=y
1452     CONFIG_BLK_DEV_SD=y
1453     CONFIG_BLK_DEV_SR=y
1454     -CONFIG_BLK_DEV_SR_VENDOR=y
1455     CONFIG_CHR_DEV_SG=y
1456     CONFIG_SCSI_CONSTANTS=y
1457     CONFIG_SCSI_SPI_ATTRS=y
1458     diff --git a/arch/x86/configs/x86_64_defconfig b/arch/x86/configs/x86_64_defconfig
1459     index d0a5ffeae8df..3087c5e351e7 100644
1460     --- a/arch/x86/configs/x86_64_defconfig
1461     +++ b/arch/x86/configs/x86_64_defconfig
1462     @@ -136,7 +136,6 @@ CONFIG_CONNECTOR=y
1463     CONFIG_BLK_DEV_LOOP=y
1464     CONFIG_BLK_DEV_SD=y
1465     CONFIG_BLK_DEV_SR=y
1466     -CONFIG_BLK_DEV_SR_VENDOR=y
1467     CONFIG_CHR_DEV_SG=y
1468     CONFIG_SCSI_CONSTANTS=y
1469     CONFIG_SCSI_SPI_ATTRS=y
1470     diff --git a/arch/x86/include/asm/fpu/internal.h b/arch/x86/include/asm/fpu/internal.h
1471     index 44c48e34d799..00eac7f1529b 100644
1472     --- a/arch/x86/include/asm/fpu/internal.h
1473     +++ b/arch/x86/include/asm/fpu/internal.h
1474     @@ -619,6 +619,11 @@ static inline void switch_fpu_finish(struct fpu *new_fpu)
1475     * MXCSR and XCR definitions:
1476     */
1477    
1478     +static inline void ldmxcsr(u32 mxcsr)
1479     +{
1480     + asm volatile("ldmxcsr %0" :: "m" (mxcsr));
1481     +}
1482     +
1483     extern unsigned int mxcsr_feature_mask;
1484    
1485     #define XCR_XFEATURE_ENABLED_MASK 0x00000000
1486     diff --git a/arch/x86/kernel/apic/vector.c b/arch/x86/kernel/apic/vector.c
1487     index 2c5676b0a6e7..18c0dca08163 100644
1488     --- a/arch/x86/kernel/apic/vector.c
1489     +++ b/arch/x86/kernel/apic/vector.c
1490     @@ -446,12 +446,10 @@ static int x86_vector_activate(struct irq_domain *dom, struct irq_data *irqd,
1491     trace_vector_activate(irqd->irq, apicd->is_managed,
1492     apicd->can_reserve, reserve);
1493    
1494     - /* Nothing to do for fixed assigned vectors */
1495     - if (!apicd->can_reserve && !apicd->is_managed)
1496     - return 0;
1497     -
1498     raw_spin_lock_irqsave(&vector_lock, flags);
1499     - if (reserve || irqd_is_managed_and_shutdown(irqd))
1500     + if (!apicd->can_reserve && !apicd->is_managed)
1501     + assign_irq_vector_any_locked(irqd);
1502     + else if (reserve || irqd_is_managed_and_shutdown(irqd))
1503     vector_assign_managed_shutdown(irqd);
1504     else if (apicd->is_managed)
1505     ret = activate_managed(irqd);
1506     @@ -769,20 +767,10 @@ void lapic_offline(void)
1507     static int apic_set_affinity(struct irq_data *irqd,
1508     const struct cpumask *dest, bool force)
1509     {
1510     - struct apic_chip_data *apicd = apic_chip_data(irqd);
1511     int err;
1512    
1513     - /*
1514     - * Core code can call here for inactive interrupts. For inactive
1515     - * interrupts which use managed or reservation mode there is no
1516     - * point in going through the vector assignment right now as the
1517     - * activation will assign a vector which fits the destination
1518     - * cpumask. Let the core code store the destination mask and be
1519     - * done with it.
1520     - */
1521     - if (!irqd_is_activated(irqd) &&
1522     - (apicd->is_managed || apicd->can_reserve))
1523     - return IRQ_SET_MASK_OK;
1524     + if (WARN_ON_ONCE(!irqd_is_activated(irqd)))
1525     + return -EIO;
1526    
1527     raw_spin_lock(&vector_lock);
1528     cpumask_and(vector_searchmask, dest, cpu_online_mask);
1529     diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c
1530     index 12c70840980e..cd8839027f66 100644
1531     --- a/arch/x86/kernel/fpu/core.c
1532     +++ b/arch/x86/kernel/fpu/core.c
1533     @@ -101,6 +101,12 @@ void kernel_fpu_begin(void)
1534     copy_fpregs_to_fpstate(&current->thread.fpu);
1535     }
1536     __cpu_invalidate_fpregs_state();
1537     +
1538     + if (boot_cpu_has(X86_FEATURE_XMM))
1539     + ldmxcsr(MXCSR_DEFAULT);
1540     +
1541     + if (boot_cpu_has(X86_FEATURE_FPU))
1542     + asm volatile ("fninit");
1543     }
1544     EXPORT_SYMBOL_GPL(kernel_fpu_begin);
1545    
1546     diff --git a/arch/x86/kernel/fpu/xstate.c b/arch/x86/kernel/fpu/xstate.c
1547     index c94fec268ef2..755eb26cbec0 100644
1548     --- a/arch/x86/kernel/fpu/xstate.c
1549     +++ b/arch/x86/kernel/fpu/xstate.c
1550     @@ -1017,7 +1017,7 @@ int copy_xstate_to_kernel(void *kbuf, struct xregs_state *xsave, unsigned int of
1551     copy_part(offsetof(struct fxregs_state, st_space), 128,
1552     &xsave->i387.st_space, &kbuf, &offset_start, &count);
1553     if (header.xfeatures & XFEATURE_MASK_SSE)
1554     - copy_part(xstate_offsets[XFEATURE_MASK_SSE], 256,
1555     + copy_part(xstate_offsets[XFEATURE_SSE], 256,
1556     &xsave->i387.xmm_space, &kbuf, &offset_start, &count);
1557     /*
1558     * Fill xsave->i387.sw_reserved value for ptrace frame:
1559     diff --git a/block/blk-merge.c b/block/blk-merge.c
1560     index 48e6725b32ee..93cff719b066 100644
1561     --- a/block/blk-merge.c
1562     +++ b/block/blk-merge.c
1563     @@ -157,17 +157,20 @@ static inline unsigned get_max_io_size(struct request_queue *q,
1564     return sectors & (lbs - 1);
1565     }
1566    
1567     -static unsigned get_max_segment_size(const struct request_queue *q,
1568     - unsigned offset)
1569     +static inline unsigned get_max_segment_size(const struct request_queue *q,
1570     + struct page *start_page,
1571     + unsigned long offset)
1572     {
1573     unsigned long mask = queue_segment_boundary(q);
1574    
1575     - /* default segment boundary mask means no boundary limit */
1576     - if (mask == BLK_SEG_BOUNDARY_MASK)
1577     - return queue_max_segment_size(q);
1578     + offset = mask & (page_to_phys(start_page) + offset);
1579    
1580     - return min_t(unsigned long, mask - (mask & offset) + 1,
1581     - queue_max_segment_size(q));
1582     + /*
1583     + * overflow may be triggered in case of zero page physical address
1584     + * on 32bit arch, use queue's max segment size when that happens.
1585     + */
1586     + return min_not_zero(mask - offset + 1,
1587     + (unsigned long)queue_max_segment_size(q));
1588     }
1589    
1590     /**
1591     @@ -201,7 +204,8 @@ static bool bvec_split_segs(const struct request_queue *q,
1592     unsigned seg_size = 0;
1593    
1594     while (len && *nsegs < max_segs) {
1595     - seg_size = get_max_segment_size(q, bv->bv_offset + total_len);
1596     + seg_size = get_max_segment_size(q, bv->bv_page,
1597     + bv->bv_offset + total_len);
1598     seg_size = min(seg_size, len);
1599    
1600     (*nsegs)++;
1601     @@ -404,7 +408,8 @@ static unsigned blk_bvec_map_sg(struct request_queue *q,
1602    
1603     while (nbytes > 0) {
1604     unsigned offset = bvec->bv_offset + total;
1605     - unsigned len = min(get_max_segment_size(q, offset), nbytes);
1606     + unsigned len = min(get_max_segment_size(q, bvec->bv_page,
1607     + offset), nbytes);
1608     struct page *page = bvec->bv_page;
1609    
1610     /*
1611     diff --git a/block/blk-mq-debugfs.c b/block/blk-mq-debugfs.c
1612     index b3f2ba483992..121f4c1e0697 100644
1613     --- a/block/blk-mq-debugfs.c
1614     +++ b/block/blk-mq-debugfs.c
1615     @@ -125,6 +125,9 @@ static const char *const blk_queue_flag_name[] = {
1616     QUEUE_FLAG_NAME(REGISTERED),
1617     QUEUE_FLAG_NAME(SCSI_PASSTHROUGH),
1618     QUEUE_FLAG_NAME(QUIESCED),
1619     + QUEUE_FLAG_NAME(PCI_P2PDMA),
1620     + QUEUE_FLAG_NAME(ZONE_RESETALL),
1621     + QUEUE_FLAG_NAME(RQ_ALLOC_TIME),
1622     };
1623     #undef QUEUE_FLAG_NAME
1624    
1625     diff --git a/crypto/asymmetric_keys/public_key.c b/crypto/asymmetric_keys/public_key.c
1626     index d7f43d4ea925..e5fae4e838c0 100644
1627     --- a/crypto/asymmetric_keys/public_key.c
1628     +++ b/crypto/asymmetric_keys/public_key.c
1629     @@ -119,6 +119,7 @@ static int software_key_query(const struct kernel_pkey_params *params,
1630     if (IS_ERR(tfm))
1631     return PTR_ERR(tfm);
1632    
1633     + ret = -ENOMEM;
1634     key = kmalloc(pkey->keylen + sizeof(u32) * 2 + pkey->paramlen,
1635     GFP_KERNEL);
1636     if (!key)
1637     diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
1638     index e63fd7bfd3a5..5bcb4c01ec5f 100644
1639     --- a/drivers/acpi/video_detect.c
1640     +++ b/drivers/acpi/video_detect.c
1641     @@ -336,6 +336,25 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
1642     DMI_MATCH(DMI_PRODUCT_NAME, "Precision 7510"),
1643     },
1644     },
1645     + {
1646     + .callback = video_detect_force_native,
1647     + .ident = "Acer Aspire 5738z",
1648     + .matches = {
1649     + DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
1650     + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5738"),
1651     + DMI_MATCH(DMI_BOARD_NAME, "JV50"),
1652     + },
1653     + },
1654     + {
1655     + /* https://bugzilla.kernel.org/show_bug.cgi?id=207835 */
1656     + .callback = video_detect_force_native,
1657     + .ident = "Acer TravelMate 5735Z",
1658     + .matches = {
1659     + DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
1660     + DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 5735Z"),
1661     + DMI_MATCH(DMI_BOARD_NAME, "BA51_MV"),
1662     + },
1663     + },
1664    
1665     /*
1666     * Desktops which falsely report a backlight and which our heuristics
1667     diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c
1668     index e72843fe41df..e16afa27700d 100644
1669     --- a/drivers/base/regmap/regmap-debugfs.c
1670     +++ b/drivers/base/regmap/regmap-debugfs.c
1671     @@ -457,29 +457,31 @@ static ssize_t regmap_cache_only_write_file(struct file *file,
1672     {
1673     struct regmap *map = container_of(file->private_data,
1674     struct regmap, cache_only);
1675     - ssize_t result;
1676     - bool was_enabled, require_sync = false;
1677     + bool new_val, require_sync = false;
1678     int err;
1679    
1680     - map->lock(map->lock_arg);
1681     + err = kstrtobool_from_user(user_buf, count, &new_val);
1682     + /* Ignore malforned data like debugfs_write_file_bool() */
1683     + if (err)
1684     + return count;
1685    
1686     - was_enabled = map->cache_only;
1687     + err = debugfs_file_get(file->f_path.dentry);
1688     + if (err)
1689     + return err;
1690    
1691     - result = debugfs_write_file_bool(file, user_buf, count, ppos);
1692     - if (result < 0) {
1693     - map->unlock(map->lock_arg);
1694     - return result;
1695     - }
1696     + map->lock(map->lock_arg);
1697    
1698     - if (map->cache_only && !was_enabled) {
1699     + if (new_val && !map->cache_only) {
1700     dev_warn(map->dev, "debugfs cache_only=Y forced\n");
1701     add_taint(TAINT_USER, LOCKDEP_STILL_OK);
1702     - } else if (!map->cache_only && was_enabled) {
1703     + } else if (!new_val && map->cache_only) {
1704     dev_warn(map->dev, "debugfs cache_only=N forced: syncing cache\n");
1705     require_sync = true;
1706     }
1707     + map->cache_only = new_val;
1708    
1709     map->unlock(map->lock_arg);
1710     + debugfs_file_put(file->f_path.dentry);
1711    
1712     if (require_sync) {
1713     err = regcache_sync(map);
1714     @@ -487,7 +489,7 @@ static ssize_t regmap_cache_only_write_file(struct file *file,
1715     dev_err(map->dev, "Failed to sync cache %d\n", err);
1716     }
1717    
1718     - return result;
1719     + return count;
1720     }
1721    
1722     static const struct file_operations regmap_cache_only_fops = {
1723     @@ -502,28 +504,32 @@ static ssize_t regmap_cache_bypass_write_file(struct file *file,
1724     {
1725     struct regmap *map = container_of(file->private_data,
1726     struct regmap, cache_bypass);
1727     - ssize_t result;
1728     - bool was_enabled;
1729     + bool new_val;
1730     + int err;
1731    
1732     - map->lock(map->lock_arg);
1733     + err = kstrtobool_from_user(user_buf, count, &new_val);
1734     + /* Ignore malforned data like debugfs_write_file_bool() */
1735     + if (err)
1736     + return count;
1737    
1738     - was_enabled = map->cache_bypass;
1739     + err = debugfs_file_get(file->f_path.dentry);
1740     + if (err)
1741     + return err;
1742    
1743     - result = debugfs_write_file_bool(file, user_buf, count, ppos);
1744     - if (result < 0)
1745     - goto out;
1746     + map->lock(map->lock_arg);
1747    
1748     - if (map->cache_bypass && !was_enabled) {
1749     + if (new_val && !map->cache_bypass) {
1750     dev_warn(map->dev, "debugfs cache_bypass=Y forced\n");
1751     add_taint(TAINT_USER, LOCKDEP_STILL_OK);
1752     - } else if (!map->cache_bypass && was_enabled) {
1753     + } else if (!new_val && map->cache_bypass) {
1754     dev_warn(map->dev, "debugfs cache_bypass=N forced\n");
1755     }
1756     + map->cache_bypass = new_val;
1757    
1758     -out:
1759     map->unlock(map->lock_arg);
1760     + debugfs_file_put(file->f_path.dentry);
1761    
1762     - return result;
1763     + return count;
1764     }
1765    
1766     static const struct file_operations regmap_cache_bypass_fops = {
1767     diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
1768     index 1bf4a908a0bd..36d49159140f 100644
1769     --- a/drivers/block/zram/zram_drv.c
1770     +++ b/drivers/block/zram/zram_drv.c
1771     @@ -2023,7 +2023,8 @@ static ssize_t hot_add_show(struct class *class,
1772     return ret;
1773     return scnprintf(buf, PAGE_SIZE, "%d\n", ret);
1774     }
1775     -static CLASS_ATTR_RO(hot_add);
1776     +static struct class_attribute class_attr_hot_add =
1777     + __ATTR(hot_add, 0400, hot_add_show, NULL);
1778    
1779     static ssize_t hot_remove_store(struct class *class,
1780     struct class_attribute *attr,
1781     diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
1782     index 553c0e279621..f8bc052cd853 100644
1783     --- a/drivers/bus/ti-sysc.c
1784     +++ b/drivers/bus/ti-sysc.c
1785     @@ -70,11 +70,13 @@ static const char * const clock_names[SYSC_MAX_CLOCKS] = {
1786     * @child_needs_resume: runtime resume needed for child on resume from suspend
1787     * @disable_on_idle: status flag used for disabling modules with resets
1788     * @idle_work: work structure used to perform delayed idle on a module
1789     - * @clk_enable_quirk: module specific clock enable quirk
1790     - * @clk_disable_quirk: module specific clock disable quirk
1791     + * @pre_reset_quirk: module specific pre-reset quirk
1792     + * @post_reset_quirk: module specific post-reset quirk
1793     * @reset_done_quirk: module specific reset done quirk
1794     * @module_enable_quirk: module specific enable quirk
1795     * @module_disable_quirk: module specific disable quirk
1796     + * @module_unlock_quirk: module specific sysconfig unlock quirk
1797     + * @module_lock_quirk: module specific sysconfig lock quirk
1798     */
1799     struct sysc {
1800     struct device *dev;
1801     @@ -97,11 +99,13 @@ struct sysc {
1802     unsigned int needs_resume:1;
1803     unsigned int child_needs_resume:1;
1804     struct delayed_work idle_work;
1805     - void (*clk_enable_quirk)(struct sysc *sysc);
1806     - void (*clk_disable_quirk)(struct sysc *sysc);
1807     + void (*pre_reset_quirk)(struct sysc *sysc);
1808     + void (*post_reset_quirk)(struct sysc *sysc);
1809     void (*reset_done_quirk)(struct sysc *sysc);
1810     void (*module_enable_quirk)(struct sysc *sysc);
1811     void (*module_disable_quirk)(struct sysc *sysc);
1812     + void (*module_unlock_quirk)(struct sysc *sysc);
1813     + void (*module_lock_quirk)(struct sysc *sysc);
1814     };
1815    
1816     static void sysc_parse_dts_quirks(struct sysc *ddata, struct device_node *np,
1817     @@ -182,6 +186,34 @@ static u32 sysc_read_sysstatus(struct sysc *ddata)
1818     return sysc_read(ddata, offset);
1819     }
1820    
1821     +/* Poll on reset status */
1822     +static int sysc_wait_softreset(struct sysc *ddata)
1823     +{
1824     + u32 sysc_mask, syss_done, rstval;
1825     + int syss_offset, error = 0;
1826     +
1827     + syss_offset = ddata->offsets[SYSC_SYSSTATUS];
1828     + sysc_mask = BIT(ddata->cap->regbits->srst_shift);
1829     +
1830     + if (ddata->cfg.quirks & SYSS_QUIRK_RESETDONE_INVERTED)
1831     + syss_done = 0;
1832     + else
1833     + syss_done = ddata->cfg.syss_mask;
1834     +
1835     + if (syss_offset >= 0) {
1836     + error = readx_poll_timeout_atomic(sysc_read_sysstatus, ddata,
1837     + rstval, (rstval & ddata->cfg.syss_mask) ==
1838     + syss_done, 100, MAX_MODULE_SOFTRESET_WAIT);
1839     +
1840     + } else if (ddata->cfg.quirks & SYSC_QUIRK_RESET_STATUS) {
1841     + error = readx_poll_timeout_atomic(sysc_read_sysconfig, ddata,
1842     + rstval, !(rstval & sysc_mask),
1843     + 100, MAX_MODULE_SOFTRESET_WAIT);
1844     + }
1845     +
1846     + return error;
1847     +}
1848     +
1849     static int sysc_add_named_clock_from_child(struct sysc *ddata,
1850     const char *name,
1851     const char *optfck_name)
1852     @@ -863,6 +895,22 @@ static void sysc_show_registers(struct sysc *ddata)
1853     buf);
1854     }
1855    
1856     +/**
1857     + * sysc_write_sysconfig - handle sysconfig quirks for register write
1858     + * @ddata: device driver data
1859     + * @value: register value
1860     + */
1861     +static void sysc_write_sysconfig(struct sysc *ddata, u32 value)
1862     +{
1863     + if (ddata->module_unlock_quirk)
1864     + ddata->module_unlock_quirk(ddata);
1865     +
1866     + sysc_write(ddata, ddata->offsets[SYSC_SYSCONFIG], value);
1867     +
1868     + if (ddata->module_lock_quirk)
1869     + ddata->module_lock_quirk(ddata);
1870     +}
1871     +
1872     #define SYSC_IDLE_MASK (SYSC_NR_IDLEMODES - 1)
1873     #define SYSC_CLOCACT_ICK 2
1874    
1875     @@ -872,8 +920,34 @@ static int sysc_enable_module(struct device *dev)
1876     struct sysc *ddata;
1877     const struct sysc_regbits *regbits;
1878     u32 reg, idlemodes, best_mode;
1879     + int error;
1880    
1881     ddata = dev_get_drvdata(dev);
1882     +
1883     + /*
1884     + * Some modules like DSS reset automatically on idle. Enable optional
1885     + * reset clocks and wait for OCP softreset to complete.
1886     + */
1887     + if (ddata->cfg.quirks & SYSC_QUIRK_OPT_CLKS_IN_RESET) {
1888     + error = sysc_enable_opt_clocks(ddata);
1889     + if (error) {
1890     + dev_err(ddata->dev,
1891     + "Optional clocks failed for enable: %i\n",
1892     + error);
1893     + return error;
1894     + }
1895     + }
1896     + error = sysc_wait_softreset(ddata);
1897     + if (error)
1898     + dev_warn(ddata->dev, "OCP softreset timed out\n");
1899     + if (ddata->cfg.quirks & SYSC_QUIRK_OPT_CLKS_IN_RESET)
1900     + sysc_disable_opt_clocks(ddata);
1901     +
1902     + /*
1903     + * Some subsystem private interconnects, like DSS top level module,
1904     + * need only the automatic OCP softreset handling with no sysconfig
1905     + * register bits to configure.
1906     + */
1907     if (ddata->offsets[SYSC_SYSCONFIG] == -ENODEV)
1908     return 0;
1909    
1910     @@ -912,7 +986,7 @@ static int sysc_enable_module(struct device *dev)
1911    
1912     reg &= ~(SYSC_IDLE_MASK << regbits->sidle_shift);
1913     reg |= best_mode << regbits->sidle_shift;
1914     - sysc_write(ddata, ddata->offsets[SYSC_SYSCONFIG], reg);
1915     + sysc_write_sysconfig(ddata, reg);
1916    
1917     set_midle:
1918     /* Set MIDLE mode */
1919     @@ -931,14 +1005,14 @@ set_midle:
1920    
1921     reg &= ~(SYSC_IDLE_MASK << regbits->midle_shift);
1922     reg |= best_mode << regbits->midle_shift;
1923     - sysc_write(ddata, ddata->offsets[SYSC_SYSCONFIG], reg);
1924     + sysc_write_sysconfig(ddata, reg);
1925    
1926     set_autoidle:
1927     /* Autoidle bit must enabled separately if available */
1928     if (regbits->autoidle_shift >= 0 &&
1929     ddata->cfg.sysc_val & BIT(regbits->autoidle_shift)) {
1930     reg |= 1 << regbits->autoidle_shift;
1931     - sysc_write(ddata, ddata->offsets[SYSC_SYSCONFIG], reg);
1932     + sysc_write_sysconfig(ddata, reg);
1933     }
1934    
1935     /* Flush posted write */
1936     @@ -999,7 +1073,7 @@ static int sysc_disable_module(struct device *dev)
1937    
1938     reg &= ~(SYSC_IDLE_MASK << regbits->midle_shift);
1939     reg |= best_mode << regbits->midle_shift;
1940     - sysc_write(ddata, ddata->offsets[SYSC_SYSCONFIG], reg);
1941     + sysc_write_sysconfig(ddata, reg);
1942    
1943     set_sidle:
1944     /* Set SIDLE mode */
1945     @@ -1022,7 +1096,7 @@ set_sidle:
1946     if (regbits->autoidle_shift >= 0 &&
1947     ddata->cfg.sysc_val & BIT(regbits->autoidle_shift))
1948     reg |= 1 << regbits->autoidle_shift;
1949     - sysc_write(ddata, ddata->offsets[SYSC_SYSCONFIG], reg);
1950     + sysc_write_sysconfig(ddata, reg);
1951    
1952     /* Flush posted write */
1953     sysc_read(ddata, ddata->offsets[SYSC_SYSCONFIG]);
1954     @@ -1171,7 +1245,8 @@ static int __maybe_unused sysc_noirq_suspend(struct device *dev)
1955    
1956     ddata = dev_get_drvdata(dev);
1957    
1958     - if (ddata->cfg.quirks & SYSC_QUIRK_LEGACY_IDLE)
1959     + if (ddata->cfg.quirks &
1960     + (SYSC_QUIRK_LEGACY_IDLE | SYSC_QUIRK_NO_IDLE))
1961     return 0;
1962    
1963     return pm_runtime_force_suspend(dev);
1964     @@ -1183,7 +1258,8 @@ static int __maybe_unused sysc_noirq_resume(struct device *dev)
1965    
1966     ddata = dev_get_drvdata(dev);
1967    
1968     - if (ddata->cfg.quirks & SYSC_QUIRK_LEGACY_IDLE)
1969     + if (ddata->cfg.quirks &
1970     + (SYSC_QUIRK_LEGACY_IDLE | SYSC_QUIRK_NO_IDLE))
1971     return 0;
1972    
1973     return pm_runtime_force_resume(dev);
1974     @@ -1231,16 +1307,16 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {
1975     SYSC_QUIRK_LEGACY_IDLE),
1976     SYSC_QUIRK("sham", 0, 0x100, 0x110, 0x114, 0x40000c03, 0xffffffff,
1977     SYSC_QUIRK_LEGACY_IDLE),
1978     - SYSC_QUIRK("smartreflex", 0, -1, 0x24, -1, 0x00000000, 0xffffffff,
1979     + SYSC_QUIRK("smartreflex", 0, -ENODEV, 0x24, -ENODEV, 0x00000000, 0xffffffff,
1980     SYSC_QUIRK_LEGACY_IDLE),
1981     - SYSC_QUIRK("smartreflex", 0, -1, 0x38, -1, 0x00000000, 0xffffffff,
1982     + SYSC_QUIRK("smartreflex", 0, -ENODEV, 0x38, -ENODEV, 0x00000000, 0xffffffff,
1983     SYSC_QUIRK_LEGACY_IDLE),
1984     SYSC_QUIRK("timer", 0, 0, 0x10, 0x14, 0x00000015, 0xffffffff,
1985     0),
1986     /* Some timers on omap4 and later */
1987     - SYSC_QUIRK("timer", 0, 0, 0x10, -1, 0x50002100, 0xffffffff,
1988     + SYSC_QUIRK("timer", 0, 0, 0x10, -ENODEV, 0x50002100, 0xffffffff,
1989     0),
1990     - SYSC_QUIRK("timer", 0, 0, 0x10, -1, 0x4fff1301, 0xffff00ff,
1991     + SYSC_QUIRK("timer", 0, 0, 0x10, -ENODEV, 0x4fff1301, 0xffff00ff,
1992     0),
1993     SYSC_QUIRK("uart", 0, 0x50, 0x54, 0x58, 0x00000046, 0xffffffff,
1994     SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_LEGACY_IDLE),
1995     @@ -1253,19 +1329,27 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {
1996     SYSC_QUIRK_SWSUP_SIDLE_ACT | SYSC_QUIRK_LEGACY_IDLE),
1997    
1998     /* Quirks that need to be set based on the module address */
1999     - SYSC_QUIRK("mcpdm", 0x40132000, 0, 0x10, -1, 0x50000800, 0xffffffff,
2000     + SYSC_QUIRK("mcpdm", 0x40132000, 0, 0x10, -ENODEV, 0x50000800, 0xffffffff,
2001     SYSC_QUIRK_EXT_OPT_CLOCK | SYSC_QUIRK_NO_RESET_ON_INIT |
2002     SYSC_QUIRK_SWSUP_SIDLE),
2003    
2004     /* Quirks that need to be set based on detected module */
2005     - SYSC_QUIRK("aess", 0, 0, 0x10, -1, 0x40000000, 0xffffffff,
2006     + SYSC_QUIRK("aess", 0, 0, 0x10, -ENODEV, 0x40000000, 0xffffffff,
2007     SYSC_MODULE_QUIRK_AESS),
2008     - SYSC_QUIRK("dcan", 0x48480000, 0x20, -1, -1, 0xa3170504, 0xffffffff,
2009     + SYSC_QUIRK("dcan", 0x48480000, 0x20, -ENODEV, -ENODEV, 0xa3170504, 0xffffffff,
2010     SYSC_QUIRK_CLKDM_NOAUTO),
2011     - SYSC_QUIRK("dwc3", 0x48880000, 0, 0x10, -1, 0x500a0200, 0xffffffff,
2012     + SYSC_QUIRK("dss", 0x4832a000, 0, 0x10, 0x14, 0x00000020, 0xffffffff,
2013     + SYSC_QUIRK_OPT_CLKS_IN_RESET),
2014     + SYSC_QUIRK("dss", 0x58000000, 0, -ENODEV, 0x14, 0x00000040, 0xffffffff,
2015     + SYSC_QUIRK_OPT_CLKS_IN_RESET),
2016     + SYSC_QUIRK("dss", 0x58000000, 0, -ENODEV, 0x14, 0x00000061, 0xffffffff,
2017     + SYSC_QUIRK_OPT_CLKS_IN_RESET),
2018     + SYSC_QUIRK("dwc3", 0x48880000, 0, 0x10, -ENODEV, 0x500a0200, 0xffffffff,
2019     SYSC_QUIRK_CLKDM_NOAUTO),
2020     - SYSC_QUIRK("dwc3", 0x488c0000, 0, 0x10, -1, 0x500a0200, 0xffffffff,
2021     + SYSC_QUIRK("dwc3", 0x488c0000, 0, 0x10, -ENODEV, 0x500a0200, 0xffffffff,
2022     SYSC_QUIRK_CLKDM_NOAUTO),
2023     + SYSC_QUIRK("hdmi", 0, 0, 0x10, -ENODEV, 0x50030200, 0xffffffff,
2024     + SYSC_QUIRK_OPT_CLKS_NEEDED),
2025     SYSC_QUIRK("hdq1w", 0, 0, 0x14, 0x18, 0x00000006, 0xffffffff,
2026     SYSC_MODULE_QUIRK_HDQ1W),
2027     SYSC_QUIRK("hdq1w", 0, 0, 0x14, 0x18, 0x0000000a, 0xffffffff,
2028     @@ -1278,12 +1362,18 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {
2029     SYSC_MODULE_QUIRK_I2C),
2030     SYSC_QUIRK("i2c", 0, 0, 0x10, 0x90, 0x5040000a, 0xfffff0f0,
2031     SYSC_MODULE_QUIRK_I2C),
2032     - SYSC_QUIRK("gpu", 0x50000000, 0x14, -1, -1, 0x00010201, 0xffffffff, 0),
2033     - SYSC_QUIRK("gpu", 0x50000000, 0xfe00, 0xfe10, -1, 0x40000000 , 0xffffffff,
2034     + SYSC_QUIRK("gpu", 0x50000000, 0x14, -ENODEV, -ENODEV, 0x00010201, 0xffffffff, 0),
2035     + SYSC_QUIRK("gpu", 0x50000000, 0xfe00, 0xfe10, -ENODEV, 0x40000000 , 0xffffffff,
2036     SYSC_MODULE_QUIRK_SGX),
2037     + SYSC_QUIRK("rtc", 0, 0x74, 0x78, -ENODEV, 0x4eb01908, 0xffff00f0,
2038     + SYSC_MODULE_QUIRK_RTC_UNLOCK),
2039     + SYSC_QUIRK("tptc", 0, 0, 0x10, -ENODEV, 0x40006c00, 0xffffefff,
2040     + SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY),
2041     + SYSC_QUIRK("tptc", 0, 0, -ENODEV, -ENODEV, 0x40007c00, 0xffffffff,
2042     + SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY),
2043     SYSC_QUIRK("usb_otg_hs", 0, 0x400, 0x404, 0x408, 0x00000050,
2044     0xffffffff, SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY),
2045     - SYSC_QUIRK("usb_otg_hs", 0, 0, 0x10, -1, 0x4ea2080d, 0xffffffff,
2046     + SYSC_QUIRK("usb_otg_hs", 0, 0, 0x10, -ENODEV, 0x4ea2080d, 0xffffffff,
2047     SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY),
2048     SYSC_QUIRK("wdt", 0, 0, 0x10, 0x14, 0x502a0500, 0xfffff0f0,
2049     SYSC_MODULE_QUIRK_WDT),
2050     @@ -1292,57 +1382,68 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {
2051     SYSC_MODULE_QUIRK_WDT | SYSC_QUIRK_SWSUP_SIDLE),
2052    
2053     #ifdef DEBUG
2054     - SYSC_QUIRK("adc", 0, 0, 0x10, -1, 0x47300001, 0xffffffff, 0),
2055     - SYSC_QUIRK("atl", 0, 0, -1, -1, 0x0a070100, 0xffffffff, 0),
2056     - SYSC_QUIRK("cm", 0, 0, -1, -1, 0x40000301, 0xffffffff, 0),
2057     - SYSC_QUIRK("control", 0, 0, 0x10, -1, 0x40000900, 0xffffffff, 0),
2058     + SYSC_QUIRK("adc", 0, 0, 0x10, -ENODEV, 0x47300001, 0xffffffff, 0),
2059     + SYSC_QUIRK("atl", 0, 0, -ENODEV, -ENODEV, 0x0a070100, 0xffffffff, 0),
2060     + SYSC_QUIRK("cm", 0, 0, -ENODEV, -ENODEV, 0x40000301, 0xffffffff, 0),
2061     + SYSC_QUIRK("control", 0, 0, 0x10, -ENODEV, 0x40000900, 0xffffffff, 0),
2062     SYSC_QUIRK("cpgmac", 0, 0x1200, 0x1208, 0x1204, 0x4edb1902,
2063     0xffff00f0, 0),
2064     - SYSC_QUIRK("dcan", 0, 0x20, -1, -1, 0xa3170504, 0xffffffff, 0),
2065     - SYSC_QUIRK("dcan", 0, 0x20, -1, -1, 0x4edb1902, 0xffffffff, 0),
2066     - SYSC_QUIRK("dmic", 0, 0, 0x10, -1, 0x50010000, 0xffffffff, 0),
2067     - SYSC_QUIRK("dwc3", 0, 0, 0x10, -1, 0x500a0200, 0xffffffff, 0),
2068     + SYSC_QUIRK("dcan", 0, 0x20, -ENODEV, -ENODEV, 0xa3170504, 0xffffffff, 0),
2069     + SYSC_QUIRK("dcan", 0, 0x20, -ENODEV, -ENODEV, 0x4edb1902, 0xffffffff, 0),
2070     + SYSC_QUIRK("dispc", 0x4832a400, 0, 0x10, 0x14, 0x00000030, 0xffffffff, 0),
2071     + SYSC_QUIRK("dispc", 0x58001000, 0, 0x10, 0x14, 0x00000040, 0xffffffff, 0),
2072     + SYSC_QUIRK("dispc", 0x58001000, 0, 0x10, 0x14, 0x00000051, 0xffffffff, 0),
2073     + SYSC_QUIRK("dmic", 0, 0, 0x10, -ENODEV, 0x50010000, 0xffffffff, 0),
2074     + SYSC_QUIRK("dsi", 0x58004000, 0, 0x10, 0x14, 0x00000030, 0xffffffff, 0),
2075     + SYSC_QUIRK("dsi", 0x58005000, 0, 0x10, 0x14, 0x00000030, 0xffffffff, 0),
2076     + SYSC_QUIRK("dsi", 0x58005000, 0, 0x10, 0x14, 0x00000040, 0xffffffff, 0),
2077     + SYSC_QUIRK("dsi", 0x58009000, 0, 0x10, 0x14, 0x00000040, 0xffffffff, 0),
2078     + SYSC_QUIRK("dwc3", 0, 0, 0x10, -ENODEV, 0x500a0200, 0xffffffff, 0),
2079     SYSC_QUIRK("d2d", 0x4a0b6000, 0, 0x10, 0x14, 0x00000010, 0xffffffff, 0),
2080     SYSC_QUIRK("d2d", 0x4a0cd000, 0, 0x10, 0x14, 0x00000010, 0xffffffff, 0),
2081     - SYSC_QUIRK("epwmss", 0, 0, 0x4, -1, 0x47400001, 0xffffffff, 0),
2082     - SYSC_QUIRK("gpu", 0, 0x1fc00, 0x1fc10, -1, 0, 0, 0),
2083     - SYSC_QUIRK("gpu", 0, 0xfe00, 0xfe10, -1, 0x40000000 , 0xffffffff, 0),
2084     + SYSC_QUIRK("epwmss", 0, 0, 0x4, -ENODEV, 0x47400001, 0xffffffff, 0),
2085     + SYSC_QUIRK("gpu", 0, 0x1fc00, 0x1fc10, -ENODEV, 0, 0, 0),
2086     + SYSC_QUIRK("gpu", 0, 0xfe00, 0xfe10, -ENODEV, 0x40000000 , 0xffffffff, 0),
2087     + SYSC_QUIRK("hdmi", 0, 0, 0x10, -ENODEV, 0x50031d00, 0xffffffff, 0),
2088     SYSC_QUIRK("hsi", 0, 0, 0x10, 0x14, 0x50043101, 0xffffffff, 0),
2089     - SYSC_QUIRK("iss", 0, 0, 0x10, -1, 0x40000101, 0xffffffff, 0),
2090     - SYSC_QUIRK("lcdc", 0, 0, 0x54, -1, 0x4f201000, 0xffffffff, 0),
2091     - SYSC_QUIRK("mcasp", 0, 0, 0x4, -1, 0x44306302, 0xffffffff, 0),
2092     - SYSC_QUIRK("mcasp", 0, 0, 0x4, -1, 0x44307b02, 0xffffffff, 0),
2093     - SYSC_QUIRK("mcbsp", 0, -1, 0x8c, -1, 0, 0, 0),
2094     - SYSC_QUIRK("mcspi", 0, 0, 0x10, -1, 0x40300a0b, 0xffff00ff, 0),
2095     + SYSC_QUIRK("iss", 0, 0, 0x10, -ENODEV, 0x40000101, 0xffffffff, 0),
2096     + SYSC_QUIRK("lcdc", 0, 0, 0x54, -ENODEV, 0x4f201000, 0xffffffff, 0),
2097     + SYSC_QUIRK("mcasp", 0, 0, 0x4, -ENODEV, 0x44306302, 0xffffffff, 0),
2098     + SYSC_QUIRK("mcasp", 0, 0, 0x4, -ENODEV, 0x44307b02, 0xffffffff, 0),
2099     + SYSC_QUIRK("mcbsp", 0, -ENODEV, 0x8c, -ENODEV, 0, 0, 0),
2100     + SYSC_QUIRK("mcspi", 0, 0, 0x10, -ENODEV, 0x40300a0b, 0xffff00ff, 0),
2101     SYSC_QUIRK("mcspi", 0, 0, 0x110, 0x114, 0x40300a0b, 0xffffffff, 0),
2102     - SYSC_QUIRK("mailbox", 0, 0, 0x10, -1, 0x00000400, 0xffffffff, 0),
2103     - SYSC_QUIRK("m3", 0, 0, -1, -1, 0x5f580105, 0x0fff0f00, 0),
2104     + SYSC_QUIRK("mailbox", 0, 0, 0x10, -ENODEV, 0x00000400, 0xffffffff, 0),
2105     + SYSC_QUIRK("m3", 0, 0, -ENODEV, -ENODEV, 0x5f580105, 0x0fff0f00, 0),
2106     SYSC_QUIRK("ocp2scp", 0, 0, 0x10, 0x14, 0x50060005, 0xfffffff0, 0),
2107     - SYSC_QUIRK("ocp2scp", 0, 0, -1, -1, 0x50060007, 0xffffffff, 0),
2108     - SYSC_QUIRK("padconf", 0, 0, 0x10, -1, 0x4fff0800, 0xffffffff, 0),
2109     - SYSC_QUIRK("padconf", 0, 0, -1, -1, 0x40001100, 0xffffffff, 0),
2110     - SYSC_QUIRK("prcm", 0, 0, -1, -1, 0x40000100, 0xffffffff, 0),
2111     - SYSC_QUIRK("prcm", 0, 0, -1, -1, 0x00004102, 0xffffffff, 0),
2112     - SYSC_QUIRK("prcm", 0, 0, -1, -1, 0x40000400, 0xffffffff, 0),
2113     - SYSC_QUIRK("scm", 0, 0, 0x10, -1, 0x40000900, 0xffffffff, 0),
2114     - SYSC_QUIRK("scm", 0, 0, -1, -1, 0x4e8b0100, 0xffffffff, 0),
2115     - SYSC_QUIRK("scm", 0, 0, -1, -1, 0x4f000100, 0xffffffff, 0),
2116     - SYSC_QUIRK("scm", 0, 0, -1, -1, 0x40000900, 0xffffffff, 0),
2117     - SYSC_QUIRK("scrm", 0, 0, -1, -1, 0x00000010, 0xffffffff, 0),
2118     - SYSC_QUIRK("sdio", 0, 0, 0x10, -1, 0x40202301, 0xffff0ff0, 0),
2119     + SYSC_QUIRK("ocp2scp", 0, 0, -ENODEV, -ENODEV, 0x50060007, 0xffffffff, 0),
2120     + SYSC_QUIRK("padconf", 0, 0, 0x10, -ENODEV, 0x4fff0800, 0xffffffff, 0),
2121     + SYSC_QUIRK("padconf", 0, 0, -ENODEV, -ENODEV, 0x40001100, 0xffffffff, 0),
2122     + SYSC_QUIRK("prcm", 0, 0, -ENODEV, -ENODEV, 0x40000100, 0xffffffff, 0),
2123     + SYSC_QUIRK("prcm", 0, 0, -ENODEV, -ENODEV, 0x00004102, 0xffffffff, 0),
2124     + SYSC_QUIRK("prcm", 0, 0, -ENODEV, -ENODEV, 0x40000400, 0xffffffff, 0),
2125     + SYSC_QUIRK("rfbi", 0x4832a800, 0, 0x10, 0x14, 0x00000010, 0xffffffff, 0),
2126     + SYSC_QUIRK("rfbi", 0x58002000, 0, 0x10, 0x14, 0x00000010, 0xffffffff, 0),
2127     + SYSC_QUIRK("scm", 0, 0, 0x10, -ENODEV, 0x40000900, 0xffffffff, 0),
2128     + SYSC_QUIRK("scm", 0, 0, -ENODEV, -ENODEV, 0x4e8b0100, 0xffffffff, 0),
2129     + SYSC_QUIRK("scm", 0, 0, -ENODEV, -ENODEV, 0x4f000100, 0xffffffff, 0),
2130     + SYSC_QUIRK("scm", 0, 0, -ENODEV, -ENODEV, 0x40000900, 0xffffffff, 0),
2131     + SYSC_QUIRK("scrm", 0, 0, -ENODEV, -ENODEV, 0x00000010, 0xffffffff, 0),
2132     + SYSC_QUIRK("sdio", 0, 0, 0x10, -ENODEV, 0x40202301, 0xffff0ff0, 0),
2133     SYSC_QUIRK("sdio", 0, 0x2fc, 0x110, 0x114, 0x31010000, 0xffffffff, 0),
2134     SYSC_QUIRK("sdma", 0, 0, 0x2c, 0x28, 0x00010900, 0xffffffff, 0),
2135     - SYSC_QUIRK("slimbus", 0, 0, 0x10, -1, 0x40000902, 0xffffffff, 0),
2136     - SYSC_QUIRK("slimbus", 0, 0, 0x10, -1, 0x40002903, 0xffffffff, 0),
2137     - SYSC_QUIRK("spinlock", 0, 0, 0x10, -1, 0x50020000, 0xffffffff, 0),
2138     - SYSC_QUIRK("rng", 0, 0x1fe0, 0x1fe4, -1, 0x00000020, 0xffffffff, 0),
2139     - SYSC_QUIRK("rtc", 0, 0x74, 0x78, -1, 0x4eb01908, 0xffff00f0, 0),
2140     - SYSC_QUIRK("timer32k", 0, 0, 0x4, -1, 0x00000060, 0xffffffff, 0),
2141     + SYSC_QUIRK("slimbus", 0, 0, 0x10, -ENODEV, 0x40000902, 0xffffffff, 0),
2142     + SYSC_QUIRK("slimbus", 0, 0, 0x10, -ENODEV, 0x40002903, 0xffffffff, 0),
2143     + SYSC_QUIRK("spinlock", 0, 0, 0x10, -ENODEV, 0x50020000, 0xffffffff, 0),
2144     + SYSC_QUIRK("rng", 0, 0x1fe0, 0x1fe4, -ENODEV, 0x00000020, 0xffffffff, 0),
2145     + SYSC_QUIRK("timer32k", 0, 0, 0x4, -ENODEV, 0x00000060, 0xffffffff, 0),
2146     + SYSC_QUIRK("tpcc", 0, 0, -ENODEV, -ENODEV, 0x40014c00, 0xffffffff, 0),
2147     SYSC_QUIRK("usbhstll", 0, 0, 0x10, 0x14, 0x00000004, 0xffffffff, 0),
2148     SYSC_QUIRK("usbhstll", 0, 0, 0x10, 0x14, 0x00000008, 0xffffffff, 0),
2149     SYSC_QUIRK("usb_host_hs", 0, 0, 0x10, 0x14, 0x50700100, 0xffffffff, 0),
2150     - SYSC_QUIRK("usb_host_hs", 0, 0, 0x10, -1, 0x50700101, 0xffffffff, 0),
2151     - SYSC_QUIRK("vfpe", 0, 0, 0x104, -1, 0x4d001200, 0xffffffff, 0),
2152     + SYSC_QUIRK("usb_host_hs", 0, 0, 0x10, -ENODEV, 0x50700101, 0xffffffff, 0),
2153     + SYSC_QUIRK("venc", 0x58003000, 0, -ENODEV, -ENODEV, 0x00000002, 0xffffffff, 0),
2154     + SYSC_QUIRK("vfpe", 0, 0, 0x104, -ENODEV, 0x4d001200, 0xffffffff, 0),
2155     #endif
2156     };
2157    
2158     @@ -1364,16 +1465,13 @@ static void sysc_init_early_quirks(struct sysc *ddata)
2159     if (q->base != ddata->module_pa)
2160     continue;
2161    
2162     - if (q->rev_offset >= 0 &&
2163     - q->rev_offset != ddata->offsets[SYSC_REVISION])
2164     + if (q->rev_offset != ddata->offsets[SYSC_REVISION])
2165     continue;
2166    
2167     - if (q->sysc_offset >= 0 &&
2168     - q->sysc_offset != ddata->offsets[SYSC_SYSCONFIG])
2169     + if (q->sysc_offset != ddata->offsets[SYSC_SYSCONFIG])
2170     continue;
2171    
2172     - if (q->syss_offset >= 0 &&
2173     - q->syss_offset != ddata->offsets[SYSC_SYSSTATUS])
2174     + if (q->syss_offset != ddata->offsets[SYSC_SYSSTATUS])
2175     continue;
2176    
2177     ddata->name = q->name;
2178     @@ -1393,16 +1491,13 @@ static void sysc_init_revision_quirks(struct sysc *ddata)
2179     if (q->base && q->base != ddata->module_pa)
2180     continue;
2181    
2182     - if (q->rev_offset >= 0 &&
2183     - q->rev_offset != ddata->offsets[SYSC_REVISION])
2184     + if (q->rev_offset != ddata->offsets[SYSC_REVISION])
2185     continue;
2186    
2187     - if (q->sysc_offset >= 0 &&
2188     - q->sysc_offset != ddata->offsets[SYSC_SYSCONFIG])
2189     + if (q->sysc_offset != ddata->offsets[SYSC_SYSCONFIG])
2190     continue;
2191    
2192     - if (q->syss_offset >= 0 &&
2193     - q->syss_offset != ddata->offsets[SYSC_SYSSTATUS])
2194     + if (q->syss_offset != ddata->offsets[SYSC_SYSSTATUS])
2195     continue;
2196    
2197     if (q->revision == ddata->revision ||
2198     @@ -1433,7 +1528,7 @@ static void sysc_module_enable_quirk_aess(struct sysc *ddata)
2199     sysc_write(ddata, offset, 1);
2200     }
2201    
2202     -/* I2C needs extra enable bit toggling for reset */
2203     +/* I2C needs to be disabled for reset */
2204     static void sysc_clk_quirk_i2c(struct sysc *ddata, bool enable)
2205     {
2206     int offset;
2207     @@ -1454,14 +1549,48 @@ static void sysc_clk_quirk_i2c(struct sysc *ddata, bool enable)
2208     sysc_write(ddata, offset, val);
2209     }
2210    
2211     -static void sysc_clk_enable_quirk_i2c(struct sysc *ddata)
2212     +static void sysc_pre_reset_quirk_i2c(struct sysc *ddata)
2213     +{
2214     + sysc_clk_quirk_i2c(ddata, false);
2215     +}
2216     +
2217     +static void sysc_post_reset_quirk_i2c(struct sysc *ddata)
2218     {
2219     sysc_clk_quirk_i2c(ddata, true);
2220     }
2221    
2222     -static void sysc_clk_disable_quirk_i2c(struct sysc *ddata)
2223     +/* RTC on am3 and 4 needs to be unlocked and locked for sysconfig */
2224     +static void sysc_quirk_rtc(struct sysc *ddata, bool lock)
2225     {
2226     - sysc_clk_quirk_i2c(ddata, false);
2227     + u32 val, kick0_val = 0, kick1_val = 0;
2228     + unsigned long flags;
2229     + int error;
2230     +
2231     + if (!lock) {
2232     + kick0_val = 0x83e70b13;
2233     + kick1_val = 0x95a4f1e0;
2234     + }
2235     +
2236     + local_irq_save(flags);
2237     + /* RTC_STATUS BUSY bit may stay active for 1/32768 seconds (~30 usec) */
2238     + error = readl_poll_timeout_atomic(ddata->module_va + 0x44, val,
2239     + !(val & BIT(0)), 100, 50);
2240     + if (error)
2241     + dev_warn(ddata->dev, "rtc busy timeout\n");
2242     + /* Now we have ~15 microseconds to read/write various registers */
2243     + sysc_write(ddata, 0x6c, kick0_val);
2244     + sysc_write(ddata, 0x70, kick1_val);
2245     + local_irq_restore(flags);
2246     +}
2247     +
2248     +static void sysc_module_unlock_quirk_rtc(struct sysc *ddata)
2249     +{
2250     + sysc_quirk_rtc(ddata, false);
2251     +}
2252     +
2253     +static void sysc_module_lock_quirk_rtc(struct sysc *ddata)
2254     +{
2255     + sysc_quirk_rtc(ddata, true);
2256     }
2257    
2258     /* 36xx SGX needs a quirk for to bypass OCP IPG interrupt logic */
2259     @@ -1503,14 +1632,14 @@ static void sysc_init_module_quirks(struct sysc *ddata)
2260     return;
2261    
2262     if (ddata->cfg.quirks & SYSC_MODULE_QUIRK_HDQ1W) {
2263     - ddata->clk_disable_quirk = sysc_pre_reset_quirk_hdq1w;
2264     + ddata->pre_reset_quirk = sysc_pre_reset_quirk_hdq1w;
2265    
2266     return;
2267     }
2268    
2269     if (ddata->cfg.quirks & SYSC_MODULE_QUIRK_I2C) {
2270     - ddata->clk_enable_quirk = sysc_clk_enable_quirk_i2c;
2271     - ddata->clk_disable_quirk = sysc_clk_disable_quirk_i2c;
2272     + ddata->pre_reset_quirk = sysc_pre_reset_quirk_i2c;
2273     + ddata->post_reset_quirk = sysc_post_reset_quirk_i2c;
2274    
2275     return;
2276     }
2277     @@ -1518,6 +1647,13 @@ static void sysc_init_module_quirks(struct sysc *ddata)
2278     if (ddata->cfg.quirks & SYSC_MODULE_QUIRK_AESS)
2279     ddata->module_enable_quirk = sysc_module_enable_quirk_aess;
2280    
2281     + if (ddata->cfg.quirks & SYSC_MODULE_QUIRK_RTC_UNLOCK) {
2282     + ddata->module_unlock_quirk = sysc_module_unlock_quirk_rtc;
2283     + ddata->module_lock_quirk = sysc_module_lock_quirk_rtc;
2284     +
2285     + return;
2286     + }
2287     +
2288     if (ddata->cfg.quirks & SYSC_MODULE_QUIRK_SGX)
2289     ddata->module_enable_quirk = sysc_module_enable_quirk_sgx;
2290    
2291     @@ -1611,11 +1747,10 @@ static int sysc_rstctrl_reset_deassert(struct sysc *ddata, bool reset)
2292     */
2293     static int sysc_reset(struct sysc *ddata)
2294     {
2295     - int sysc_offset, syss_offset, sysc_val, rstval, error = 0;
2296     - u32 sysc_mask, syss_done;
2297     + int sysc_offset, sysc_val, error;
2298     + u32 sysc_mask;
2299    
2300     sysc_offset = ddata->offsets[SYSC_SYSCONFIG];
2301     - syss_offset = ddata->offsets[SYSC_SYSSTATUS];
2302    
2303     if (ddata->legacy_mode || sysc_offset < 0 ||
2304     ddata->cap->regbits->srst_shift < 0 ||
2305     @@ -1624,13 +1759,8 @@ static int sysc_reset(struct sysc *ddata)
2306    
2307     sysc_mask = BIT(ddata->cap->regbits->srst_shift);
2308    
2309     - if (ddata->cfg.quirks & SYSS_QUIRK_RESETDONE_INVERTED)
2310     - syss_done = 0;
2311     - else
2312     - syss_done = ddata->cfg.syss_mask;
2313     -
2314     - if (ddata->clk_disable_quirk)
2315     - ddata->clk_disable_quirk(ddata);
2316     + if (ddata->pre_reset_quirk)
2317     + ddata->pre_reset_quirk(ddata);
2318    
2319     sysc_val = sysc_read_sysconfig(ddata);
2320     sysc_val |= sysc_mask;
2321     @@ -1640,21 +1770,12 @@ static int sysc_reset(struct sysc *ddata)
2322     usleep_range(ddata->cfg.srst_udelay,
2323     ddata->cfg.srst_udelay * 2);
2324    
2325     - if (ddata->clk_enable_quirk)
2326     - ddata->clk_enable_quirk(ddata);
2327     + if (ddata->post_reset_quirk)
2328     + ddata->post_reset_quirk(ddata);
2329    
2330     - /* Poll on reset status */
2331     - if (syss_offset >= 0) {
2332     - error = readx_poll_timeout(sysc_read_sysstatus, ddata, rstval,
2333     - (rstval & ddata->cfg.syss_mask) ==
2334     - syss_done,
2335     - 100, MAX_MODULE_SOFTRESET_WAIT);
2336     -
2337     - } else if (ddata->cfg.quirks & SYSC_QUIRK_RESET_STATUS) {
2338     - error = readx_poll_timeout(sysc_read_sysconfig, ddata, rstval,
2339     - !(rstval & sysc_mask),
2340     - 100, MAX_MODULE_SOFTRESET_WAIT);
2341     - }
2342     + error = sysc_wait_softreset(ddata);
2343     + if (error)
2344     + dev_warn(ddata->dev, "OCP softreset timed out\n");
2345    
2346     if (ddata->reset_done_quirk)
2347     ddata->reset_done_quirk(ddata);
2348     diff --git a/drivers/char/tpm/tpm_tis_core.c b/drivers/char/tpm/tpm_tis_core.c
2349     index bdcf8f25cd0d..63f6bed78d89 100644
2350     --- a/drivers/char/tpm/tpm_tis_core.c
2351     +++ b/drivers/char/tpm/tpm_tis_core.c
2352     @@ -1006,7 +1006,7 @@ int tpm_tis_core_init(struct device *dev, struct tpm_tis_data *priv, int irq,
2353    
2354     return 0;
2355     out_err:
2356     - if ((chip->ops != NULL) && (chip->ops->clk_enable != NULL))
2357     + if (chip->ops->clk_enable != NULL)
2358     chip->ops->clk_enable(chip, false);
2359    
2360     tpm_tis_remove(chip);
2361     diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
2362     index 3259426f01dc..9ebce2c12c43 100644
2363     --- a/drivers/char/virtio_console.c
2364     +++ b/drivers/char/virtio_console.c
2365     @@ -2118,6 +2118,7 @@ static struct virtio_device_id id_table[] = {
2366     { VIRTIO_ID_CONSOLE, VIRTIO_DEV_ANY_ID },
2367     { 0 },
2368     };
2369     +MODULE_DEVICE_TABLE(virtio, id_table);
2370    
2371     static unsigned int features[] = {
2372     VIRTIO_CONSOLE_F_SIZE,
2373     @@ -2130,6 +2131,7 @@ static struct virtio_device_id rproc_serial_id_table[] = {
2374     #endif
2375     { 0 },
2376     };
2377     +MODULE_DEVICE_TABLE(virtio, rproc_serial_id_table);
2378    
2379     static unsigned int rproc_serial_features[] = {
2380     };
2381     @@ -2282,6 +2284,5 @@ static void __exit fini(void)
2382     module_init(init);
2383     module_exit(fini);
2384    
2385     -MODULE_DEVICE_TABLE(virtio, id_table);
2386     MODULE_DESCRIPTION("Virtio console driver");
2387     MODULE_LICENSE("GPL");
2388     diff --git a/drivers/clk/clk-ast2600.c b/drivers/clk/clk-ast2600.c
2389     index 675cab6fa781..7015974f24b4 100644
2390     --- a/drivers/clk/clk-ast2600.c
2391     +++ b/drivers/clk/clk-ast2600.c
2392     @@ -130,6 +130,18 @@ static const struct clk_div_table ast2600_eclk_div_table[] = {
2393     { 0 }
2394     };
2395    
2396     +static const struct clk_div_table ast2600_emmc_extclk_div_table[] = {
2397     + { 0x0, 2 },
2398     + { 0x1, 4 },
2399     + { 0x2, 6 },
2400     + { 0x3, 8 },
2401     + { 0x4, 10 },
2402     + { 0x5, 12 },
2403     + { 0x6, 14 },
2404     + { 0x7, 16 },
2405     + { 0 }
2406     +};
2407     +
2408     static const struct clk_div_table ast2600_mac_div_table[] = {
2409     { 0x0, 4 },
2410     { 0x1, 4 },
2411     @@ -389,6 +401,11 @@ static struct clk_hw *aspeed_g6_clk_hw_register_gate(struct device *dev,
2412     return hw;
2413     }
2414    
2415     +static const char *const emmc_extclk_parent_names[] = {
2416     + "emmc_extclk_hpll_in",
2417     + "mpll",
2418     +};
2419     +
2420     static const char * const vclk_parent_names[] = {
2421     "dpll",
2422     "d1pll",
2423     @@ -458,16 +475,32 @@ static int aspeed_g6_clk_probe(struct platform_device *pdev)
2424     return PTR_ERR(hw);
2425     aspeed_g6_clk_data->hws[ASPEED_CLK_UARTX] = hw;
2426    
2427     - /* EMMC ext clock divider */
2428     - hw = clk_hw_register_gate(dev, "emmc_extclk_gate", "hpll", 0,
2429     - scu_g6_base + ASPEED_G6_CLK_SELECTION1, 15, 0,
2430     - &aspeed_g6_clk_lock);
2431     + /* EMMC ext clock */
2432     + hw = clk_hw_register_fixed_factor(dev, "emmc_extclk_hpll_in", "hpll",
2433     + 0, 1, 2);
2434     if (IS_ERR(hw))
2435     return PTR_ERR(hw);
2436     - hw = clk_hw_register_divider_table(dev, "emmc_extclk", "emmc_extclk_gate", 0,
2437     - scu_g6_base + ASPEED_G6_CLK_SELECTION1, 12, 3, 0,
2438     - ast2600_div_table,
2439     - &aspeed_g6_clk_lock);
2440     +
2441     + hw = clk_hw_register_mux(dev, "emmc_extclk_mux",
2442     + emmc_extclk_parent_names,
2443     + ARRAY_SIZE(emmc_extclk_parent_names), 0,
2444     + scu_g6_base + ASPEED_G6_CLK_SELECTION1, 11, 1,
2445     + 0, &aspeed_g6_clk_lock);
2446     + if (IS_ERR(hw))
2447     + return PTR_ERR(hw);
2448     +
2449     + hw = clk_hw_register_gate(dev, "emmc_extclk_gate", "emmc_extclk_mux",
2450     + 0, scu_g6_base + ASPEED_G6_CLK_SELECTION1,
2451     + 15, 0, &aspeed_g6_clk_lock);
2452     + if (IS_ERR(hw))
2453     + return PTR_ERR(hw);
2454     +
2455     + hw = clk_hw_register_divider_table(dev, "emmc_extclk",
2456     + "emmc_extclk_gate", 0,
2457     + scu_g6_base +
2458     + ASPEED_G6_CLK_SELECTION1, 12,
2459     + 3, 0, ast2600_emmc_extclk_div_table,
2460     + &aspeed_g6_clk_lock);
2461     if (IS_ERR(hw))
2462     return PTR_ERR(hw);
2463     aspeed_g6_clk_data->hws[ASPEED_CLK_EMMC] = hw;
2464     diff --git a/drivers/clk/mvebu/Kconfig b/drivers/clk/mvebu/Kconfig
2465     index 415e6906a113..76cd06f4ed62 100644
2466     --- a/drivers/clk/mvebu/Kconfig
2467     +++ b/drivers/clk/mvebu/Kconfig
2468     @@ -42,6 +42,7 @@ config ARMADA_AP806_SYSCON
2469    
2470     config ARMADA_AP_CPU_CLK
2471     bool
2472     + select ARMADA_AP_CP_HELPER
2473    
2474     config ARMADA_CP110_SYSCON
2475     bool
2476     diff --git a/drivers/clk/qcom/gcc-sm8150.c b/drivers/clk/qcom/gcc-sm8150.c
2477     index e3959ff5cb55..fad42897a7a7 100644
2478     --- a/drivers/clk/qcom/gcc-sm8150.c
2479     +++ b/drivers/clk/qcom/gcc-sm8150.c
2480     @@ -1615,6 +1615,36 @@ static struct clk_branch gcc_gpu_cfg_ahb_clk = {
2481     },
2482     };
2483    
2484     +static struct clk_branch gcc_gpu_gpll0_clk_src = {
2485     + .clkr = {
2486     + .enable_reg = 0x52004,
2487     + .enable_mask = BIT(15),
2488     + .hw.init = &(struct clk_init_data){
2489     + .name = "gcc_gpu_gpll0_clk_src",
2490     + .parent_hws = (const struct clk_hw *[]){
2491     + &gpll0.clkr.hw },
2492     + .num_parents = 1,
2493     + .flags = CLK_SET_RATE_PARENT,
2494     + .ops = &clk_branch2_ops,
2495     + },
2496     + },
2497     +};
2498     +
2499     +static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
2500     + .clkr = {
2501     + .enable_reg = 0x52004,
2502     + .enable_mask = BIT(16),
2503     + .hw.init = &(struct clk_init_data){
2504     + .name = "gcc_gpu_gpll0_div_clk_src",
2505     + .parent_hws = (const struct clk_hw *[]){
2506     + &gcc_gpu_gpll0_clk_src.clkr.hw },
2507     + .num_parents = 1,
2508     + .flags = CLK_SET_RATE_PARENT,
2509     + .ops = &clk_branch2_ops,
2510     + },
2511     + },
2512     +};
2513     +
2514     static struct clk_branch gcc_gpu_iref_clk = {
2515     .halt_reg = 0x8c010,
2516     .halt_check = BRANCH_HALT,
2517     @@ -1697,6 +1727,36 @@ static struct clk_branch gcc_npu_cfg_ahb_clk = {
2518     },
2519     };
2520    
2521     +static struct clk_branch gcc_npu_gpll0_clk_src = {
2522     + .clkr = {
2523     + .enable_reg = 0x52004,
2524     + .enable_mask = BIT(18),
2525     + .hw.init = &(struct clk_init_data){
2526     + .name = "gcc_npu_gpll0_clk_src",
2527     + .parent_hws = (const struct clk_hw *[]){
2528     + &gpll0.clkr.hw },
2529     + .num_parents = 1,
2530     + .flags = CLK_SET_RATE_PARENT,
2531     + .ops = &clk_branch2_ops,
2532     + },
2533     + },
2534     +};
2535     +
2536     +static struct clk_branch gcc_npu_gpll0_div_clk_src = {
2537     + .clkr = {
2538     + .enable_reg = 0x52004,
2539     + .enable_mask = BIT(19),
2540     + .hw.init = &(struct clk_init_data){
2541     + .name = "gcc_npu_gpll0_div_clk_src",
2542     + .parent_hws = (const struct clk_hw *[]){
2543     + &gcc_npu_gpll0_clk_src.clkr.hw },
2544     + .num_parents = 1,
2545     + .flags = CLK_SET_RATE_PARENT,
2546     + .ops = &clk_branch2_ops,
2547     + },
2548     + },
2549     +};
2550     +
2551     static struct clk_branch gcc_npu_trig_clk = {
2552     .halt_reg = 0x4d00c,
2553     .halt_check = BRANCH_VOTED,
2554     @@ -2811,6 +2871,45 @@ static struct clk_branch gcc_ufs_card_phy_aux_hw_ctl_clk = {
2555     },
2556     };
2557    
2558     +/* external clocks so add BRANCH_HALT_SKIP */
2559     +static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = {
2560     + .halt_check = BRANCH_HALT_SKIP,
2561     + .clkr = {
2562     + .enable_reg = 0x7501c,
2563     + .enable_mask = BIT(0),
2564     + .hw.init = &(struct clk_init_data){
2565     + .name = "gcc_ufs_card_rx_symbol_0_clk",
2566     + .ops = &clk_branch2_ops,
2567     + },
2568     + },
2569     +};
2570     +
2571     +/* external clocks so add BRANCH_HALT_SKIP */
2572     +static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = {
2573     + .halt_check = BRANCH_HALT_SKIP,
2574     + .clkr = {
2575     + .enable_reg = 0x750ac,
2576     + .enable_mask = BIT(0),
2577     + .hw.init = &(struct clk_init_data){
2578     + .name = "gcc_ufs_card_rx_symbol_1_clk",
2579     + .ops = &clk_branch2_ops,
2580     + },
2581     + },
2582     +};
2583     +
2584     +/* external clocks so add BRANCH_HALT_SKIP */
2585     +static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = {
2586     + .halt_check = BRANCH_HALT_SKIP,
2587     + .clkr = {
2588     + .enable_reg = 0x75018,
2589     + .enable_mask = BIT(0),
2590     + .hw.init = &(struct clk_init_data){
2591     + .name = "gcc_ufs_card_tx_symbol_0_clk",
2592     + .ops = &clk_branch2_ops,
2593     + },
2594     + },
2595     +};
2596     +
2597     static struct clk_branch gcc_ufs_card_unipro_core_clk = {
2598     .halt_reg = 0x75058,
2599     .halt_check = BRANCH_HALT,
2600     @@ -2991,6 +3090,45 @@ static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2601     },
2602     };
2603    
2604     +/* external clocks so add BRANCH_HALT_SKIP */
2605     +static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2606     + .halt_check = BRANCH_HALT_SKIP,
2607     + .clkr = {
2608     + .enable_reg = 0x7701c,
2609     + .enable_mask = BIT(0),
2610     + .hw.init = &(struct clk_init_data){
2611     + .name = "gcc_ufs_phy_rx_symbol_0_clk",
2612     + .ops = &clk_branch2_ops,
2613     + },
2614     + },
2615     +};
2616     +
2617     +/* external clocks so add BRANCH_HALT_SKIP */
2618     +static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2619     + .halt_check = BRANCH_HALT_SKIP,
2620     + .clkr = {
2621     + .enable_reg = 0x770ac,
2622     + .enable_mask = BIT(0),
2623     + .hw.init = &(struct clk_init_data){
2624     + .name = "gcc_ufs_phy_rx_symbol_1_clk",
2625     + .ops = &clk_branch2_ops,
2626     + },
2627     + },
2628     +};
2629     +
2630     +/* external clocks so add BRANCH_HALT_SKIP */
2631     +static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2632     + .halt_check = BRANCH_HALT_SKIP,
2633     + .clkr = {
2634     + .enable_reg = 0x77018,
2635     + .enable_mask = BIT(0),
2636     + .hw.init = &(struct clk_init_data){
2637     + .name = "gcc_ufs_phy_tx_symbol_0_clk",
2638     + .ops = &clk_branch2_ops,
2639     + },
2640     + },
2641     +};
2642     +
2643     static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2644     .halt_reg = 0x77058,
2645     .halt_check = BRANCH_HALT,
2646     @@ -3331,12 +3469,16 @@ static struct clk_regmap *gcc_sm8150_clocks[] = {
2647     [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2648     [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2649     [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
2650     + [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
2651     + [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
2652     [GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,
2653     [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
2654     [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
2655     [GCC_NPU_AT_CLK] = &gcc_npu_at_clk.clkr,
2656     [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
2657     [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr,
2658     + [GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr,
2659     + [GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr,
2660     [GCC_NPU_TRIG_CLK] = &gcc_npu_trig_clk.clkr,
2661     [GCC_PCIE0_PHY_REFGEN_CLK] = &gcc_pcie0_phy_refgen_clk.clkr,
2662     [GCC_PCIE1_PHY_REFGEN_CLK] = &gcc_pcie1_phy_refgen_clk.clkr,
2663     @@ -3441,6 +3583,9 @@ static struct clk_regmap *gcc_sm8150_clocks[] = {
2664     [GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr,
2665     [GCC_UFS_CARD_PHY_AUX_HW_CTL_CLK] =
2666     &gcc_ufs_card_phy_aux_hw_ctl_clk.clkr,
2667     + [GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr,
2668     + [GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr,
2669     + [GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr,
2670     [GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr,
2671     [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] =
2672     &gcc_ufs_card_unipro_core_clk_src.clkr,
2673     @@ -3458,6 +3603,9 @@ static struct clk_regmap *gcc_sm8150_clocks[] = {
2674     [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
2675     [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
2676     [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
2677     + [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
2678     + [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
2679     + [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
2680     [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
2681     [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
2682     &gcc_ufs_phy_unipro_core_clk_src.clkr,
2683     diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
2684     index 9a5464c625b4..4be83b4de2a0 100644
2685     --- a/drivers/clocksource/arm_arch_timer.c
2686     +++ b/drivers/clocksource/arm_arch_timer.c
2687     @@ -69,7 +69,7 @@ static enum arch_timer_ppi_nr arch_timer_uses_ppi = ARCH_TIMER_VIRT_PPI;
2688     static bool arch_timer_c3stop;
2689     static bool arch_timer_mem_use_virtual;
2690     static bool arch_counter_suspend_stop;
2691     -static bool vdso_default = true;
2692     +static enum vdso_arch_clockmode vdso_default = VDSO_CLOCKMODE_ARCHTIMER;
2693    
2694     static cpumask_t evtstrm_available = CPU_MASK_NONE;
2695     static bool evtstrm_enable = IS_ENABLED(CONFIG_ARM_ARCH_TIMER_EVTSTREAM);
2696     @@ -476,6 +476,14 @@ static const struct arch_timer_erratum_workaround ool_workarounds[] = {
2697     .set_next_event_virt = erratum_set_next_event_tval_virt,
2698     },
2699     #endif
2700     +#ifdef CONFIG_ARM64_ERRATUM_1418040
2701     + {
2702     + .match_type = ate_match_local_cap_id,
2703     + .id = (void *)ARM64_WORKAROUND_1418040,
2704     + .desc = "ARM erratum 1418040",
2705     + .disable_compat_vdso = true,
2706     + },
2707     +#endif
2708     };
2709    
2710     typedef bool (*ate_match_fn_t)(const struct arch_timer_erratum_workaround *,
2711     @@ -560,8 +568,11 @@ void arch_timer_enable_workaround(const struct arch_timer_erratum_workaround *wa
2712     * change both the default value and the vdso itself.
2713     */
2714     if (wa->read_cntvct_el0) {
2715     - clocksource_counter.archdata.vdso_direct = false;
2716     - vdso_default = false;
2717     + clocksource_counter.archdata.clock_mode = VDSO_CLOCKMODE_NONE;
2718     + vdso_default = VDSO_CLOCKMODE_NONE;
2719     + } else if (wa->disable_compat_vdso && vdso_default != VDSO_CLOCKMODE_NONE) {
2720     + vdso_default = VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT;
2721     + clocksource_counter.archdata.clock_mode = vdso_default;
2722     }
2723     }
2724    
2725     @@ -979,7 +990,7 @@ static void __init arch_counter_register(unsigned type)
2726     }
2727    
2728     arch_timer_read_counter = rd;
2729     - clocksource_counter.archdata.vdso_direct = vdso_default;
2730     + clocksource_counter.archdata.clock_mode = vdso_default;
2731     } else {
2732     arch_timer_read_counter = arch_counter_get_cntvct_mem;
2733     }
2734     diff --git a/drivers/crypto/Kconfig b/drivers/crypto/Kconfig
2735     index 06b2b3fa5206..0952f059d967 100644
2736     --- a/drivers/crypto/Kconfig
2737     +++ b/drivers/crypto/Kconfig
2738     @@ -491,11 +491,9 @@ if CRYPTO_DEV_UX500
2739     endif # if CRYPTO_DEV_UX500
2740    
2741     config CRYPTO_DEV_ATMEL_AUTHENC
2742     - tristate "Support for Atmel IPSEC/SSL hw accelerator"
2743     + bool "Support for Atmel IPSEC/SSL hw accelerator"
2744     depends on ARCH_AT91 || COMPILE_TEST
2745     - select CRYPTO_AUTHENC
2746     - select CRYPTO_DEV_ATMEL_AES
2747     - select CRYPTO_DEV_ATMEL_SHA
2748     + depends on CRYPTO_DEV_ATMEL_AES
2749     help
2750     Some Atmel processors can combine the AES and SHA hw accelerators
2751     to enhance support of IPSEC/SSL.
2752     @@ -508,6 +506,8 @@ config CRYPTO_DEV_ATMEL_AES
2753     select CRYPTO_AES
2754     select CRYPTO_AEAD
2755     select CRYPTO_BLKCIPHER
2756     + select CRYPTO_AUTHENC if CRYPTO_DEV_ATMEL_AUTHENC
2757     + select CRYPTO_DEV_ATMEL_SHA if CRYPTO_DEV_ATMEL_AUTHENC
2758     help
2759     Some Atmel processors have AES hw accelerator.
2760     Select this if you want to use the Atmel module for
2761     diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
2762     index 0425984db118..62d9825a49e9 100644
2763     --- a/drivers/dma/dmatest.c
2764     +++ b/drivers/dma/dmatest.c
2765     @@ -1168,6 +1168,8 @@ static int dmatest_run_set(const char *val, const struct kernel_param *kp)
2766     } else if (dmatest_run) {
2767     if (!is_threaded_test_pending(info)) {
2768     pr_info("No channels configured, continue with any\n");
2769     + if (!is_threaded_test_run(info))
2770     + stop_threaded_test(info);
2771     add_threaded_test(info);
2772     }
2773     start_threaded_tests(info);
2774     diff --git a/drivers/dma/dw/core.c b/drivers/dma/dw/core.c
2775     index 21cb2a58dbd2..a1b56f52db2f 100644
2776     --- a/drivers/dma/dw/core.c
2777     +++ b/drivers/dma/dw/core.c
2778     @@ -118,16 +118,11 @@ static void dwc_initialize(struct dw_dma_chan *dwc)
2779     {
2780     struct dw_dma *dw = to_dw_dma(dwc->chan.device);
2781    
2782     - if (test_bit(DW_DMA_IS_INITIALIZED, &dwc->flags))
2783     - return;
2784     -
2785     dw->initialize_chan(dwc);
2786    
2787     /* Enable interrupts */
2788     channel_set_bit(dw, MASK.XFER, dwc->mask);
2789     channel_set_bit(dw, MASK.ERROR, dwc->mask);
2790     -
2791     - set_bit(DW_DMA_IS_INITIALIZED, &dwc->flags);
2792     }
2793    
2794     /*----------------------------------------------------------------------*/
2795     @@ -954,8 +949,6 @@ static void dwc_issue_pending(struct dma_chan *chan)
2796    
2797     void do_dw_dma_off(struct dw_dma *dw)
2798     {
2799     - unsigned int i;
2800     -
2801     dma_writel(dw, CFG, 0);
2802    
2803     channel_clear_bit(dw, MASK.XFER, dw->all_chan_mask);
2804     @@ -966,9 +959,6 @@ void do_dw_dma_off(struct dw_dma *dw)
2805    
2806     while (dma_readl(dw, CFG) & DW_CFG_DMA_EN)
2807     cpu_relax();
2808     -
2809     - for (i = 0; i < dw->dma.chancnt; i++)
2810     - clear_bit(DW_DMA_IS_INITIALIZED, &dw->chan[i].flags);
2811     }
2812    
2813     void do_dw_dma_on(struct dw_dma *dw)
2814     @@ -1032,8 +1022,6 @@ static void dwc_free_chan_resources(struct dma_chan *chan)
2815     /* Clear custom channel configuration */
2816     memset(&dwc->dws, 0, sizeof(struct dw_dma_slave));
2817    
2818     - clear_bit(DW_DMA_IS_INITIALIZED, &dwc->flags);
2819     -
2820     /* Disable interrupts */
2821     channel_clear_bit(dw, MASK.XFER, dwc->mask);
2822     channel_clear_bit(dw, MASK.BLOCK, dwc->mask);
2823     diff --git a/drivers/dma/fsl-edma-common.h b/drivers/dma/fsl-edma-common.h
2824     index 5eaa2902ed39..6ff7063a8a2f 100644
2825     --- a/drivers/dma/fsl-edma-common.h
2826     +++ b/drivers/dma/fsl-edma-common.h
2827     @@ -33,7 +33,7 @@
2828     #define EDMA_TCD_ATTR_DSIZE_16BIT BIT(0)
2829     #define EDMA_TCD_ATTR_DSIZE_32BIT BIT(1)
2830     #define EDMA_TCD_ATTR_DSIZE_64BIT (BIT(0) | BIT(1))
2831     -#define EDMA_TCD_ATTR_DSIZE_32BYTE (BIT(3) | BIT(0))
2832     +#define EDMA_TCD_ATTR_DSIZE_32BYTE (BIT(2) | BIT(0))
2833     #define EDMA_TCD_ATTR_SSIZE_8BIT 0
2834     #define EDMA_TCD_ATTR_SSIZE_16BIT (EDMA_TCD_ATTR_DSIZE_16BIT << 8)
2835     #define EDMA_TCD_ATTR_SSIZE_32BIT (EDMA_TCD_ATTR_DSIZE_32BIT << 8)
2836     diff --git a/drivers/dma/fsl-edma.c b/drivers/dma/fsl-edma.c
2837     index b626c06ac2e0..6760ae4b2956 100644
2838     --- a/drivers/dma/fsl-edma.c
2839     +++ b/drivers/dma/fsl-edma.c
2840     @@ -45,6 +45,13 @@ static irqreturn_t fsl_edma_tx_handler(int irq, void *dev_id)
2841     fsl_chan = &fsl_edma->chans[ch];
2842    
2843     spin_lock(&fsl_chan->vchan.lock);
2844     +
2845     + if (!fsl_chan->edesc) {
2846     + /* terminate_all called before */
2847     + spin_unlock(&fsl_chan->vchan.lock);
2848     + continue;
2849     + }
2850     +
2851     if (!fsl_chan->edesc->iscyclic) {
2852     list_del(&fsl_chan->edesc->vdesc.node);
2853     vchan_cookie_complete(&fsl_chan->edesc->vdesc);
2854     diff --git a/drivers/dma/mcf-edma.c b/drivers/dma/mcf-edma.c
2855     index e15bd15a9ef6..e12b754e6398 100644
2856     --- a/drivers/dma/mcf-edma.c
2857     +++ b/drivers/dma/mcf-edma.c
2858     @@ -35,6 +35,13 @@ static irqreturn_t mcf_edma_tx_handler(int irq, void *dev_id)
2859     mcf_chan = &mcf_edma->chans[ch];
2860    
2861     spin_lock(&mcf_chan->vchan.lock);
2862     +
2863     + if (!mcf_chan->edesc) {
2864     + /* terminate_all called before */
2865     + spin_unlock(&mcf_chan->vchan.lock);
2866     + continue;
2867     + }
2868     +
2869     if (!mcf_chan->edesc->iscyclic) {
2870     list_del(&mcf_chan->edesc->vdesc.node);
2871     vchan_cookie_complete(&mcf_chan->edesc->vdesc);
2872     diff --git a/drivers/dma/sh/usb-dmac.c b/drivers/dma/sh/usb-dmac.c
2873     index b218a013c260..8f7ceb698226 100644
2874     --- a/drivers/dma/sh/usb-dmac.c
2875     +++ b/drivers/dma/sh/usb-dmac.c
2876     @@ -586,6 +586,8 @@ static void usb_dmac_isr_transfer_end(struct usb_dmac_chan *chan)
2877     desc->residue = usb_dmac_get_current_residue(chan, desc,
2878     desc->sg_index - 1);
2879     desc->done_cookie = desc->vd.tx.cookie;
2880     + desc->vd.tx_result.result = DMA_TRANS_NOERROR;
2881     + desc->vd.tx_result.residue = desc->residue;
2882     vchan_cookie_complete(&desc->vd);
2883    
2884     /* Restart the next transfer if this driver has a next desc */
2885     diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
2886     index 81f5103dccb6..9a24dce3c262 100644
2887     --- a/drivers/gpio/gpio-pca953x.c
2888     +++ b/drivers/gpio/gpio-pca953x.c
2889     @@ -398,6 +398,7 @@ static const struct regmap_config pca953x_ai_i2c_regmap = {
2890     .writeable_reg = pca953x_writeable_register,
2891     .volatile_reg = pca953x_volatile_register,
2892    
2893     + .disable_locking = true,
2894     .cache_type = REGCACHE_RBTREE,
2895     .max_register = 0x7f,
2896     };
2897     diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
2898     index 23fc16dc92b4..465351184bc3 100644
2899     --- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
2900     +++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
2901     @@ -286,30 +286,20 @@ static uint64_t sdma_v5_0_ring_get_rptr(struct amdgpu_ring *ring)
2902     static uint64_t sdma_v5_0_ring_get_wptr(struct amdgpu_ring *ring)
2903     {
2904     struct amdgpu_device *adev = ring->adev;
2905     - u64 *wptr = NULL;
2906     - uint64_t local_wptr = 0;
2907     + u64 wptr;
2908    
2909     if (ring->use_doorbell) {
2910     /* XXX check if swapping is necessary on BE */
2911     - wptr = ((u64 *)&adev->wb.wb[ring->wptr_offs]);
2912     - DRM_DEBUG("wptr/doorbell before shift == 0x%016llx\n", *wptr);
2913     - *wptr = (*wptr) >> 2;
2914     - DRM_DEBUG("wptr/doorbell after shift == 0x%016llx\n", *wptr);
2915     + wptr = READ_ONCE(*((u64 *)&adev->wb.wb[ring->wptr_offs]));
2916     + DRM_DEBUG("wptr/doorbell before shift == 0x%016llx\n", wptr);
2917     } else {
2918     - u32 lowbit, highbit;
2919     -
2920     - wptr = &local_wptr;
2921     - lowbit = RREG32(sdma_v5_0_get_reg_offset(adev, ring->me, mmSDMA0_GFX_RB_WPTR)) >> 2;
2922     - highbit = RREG32(sdma_v5_0_get_reg_offset(adev, ring->me, mmSDMA0_GFX_RB_WPTR_HI)) >> 2;
2923     -
2924     - DRM_DEBUG("wptr [%i]high== 0x%08x low==0x%08x\n",
2925     - ring->me, highbit, lowbit);
2926     - *wptr = highbit;
2927     - *wptr = (*wptr) << 32;
2928     - *wptr |= lowbit;
2929     + wptr = RREG32(sdma_v5_0_get_reg_offset(adev, ring->me, mmSDMA0_GFX_RB_WPTR_HI));
2930     + wptr = wptr << 32;
2931     + wptr |= RREG32(sdma_v5_0_get_reg_offset(adev, ring->me, mmSDMA0_GFX_RB_WPTR));
2932     + DRM_DEBUG("wptr before shift [%i] wptr == 0x%016llx\n", ring->me, wptr);
2933     }
2934    
2935     - return *wptr;
2936     + return wptr >> 2;
2937     }
2938    
2939     /**
2940     diff --git a/drivers/gpu/drm/exynos/exynos_drm_dma.c b/drivers/gpu/drm/exynos/exynos_drm_dma.c
2941     index 619f81435c1b..58b89ec11b0e 100644
2942     --- a/drivers/gpu/drm/exynos/exynos_drm_dma.c
2943     +++ b/drivers/gpu/drm/exynos/exynos_drm_dma.c
2944     @@ -61,7 +61,7 @@ static int drm_iommu_attach_device(struct drm_device *drm_dev,
2945     struct device *subdrv_dev, void **dma_priv)
2946     {
2947     struct exynos_drm_private *priv = drm_dev->dev_private;
2948     - int ret;
2949     + int ret = 0;
2950    
2951     if (get_dma_ops(priv->dma_dev) != get_dma_ops(subdrv_dev)) {
2952     DRM_DEV_ERROR(subdrv_dev, "Device %s lacks support for IOMMU\n",
2953     @@ -92,7 +92,7 @@ static int drm_iommu_attach_device(struct drm_device *drm_dev,
2954     if (ret)
2955     clear_dma_max_seg_size(subdrv_dev);
2956    
2957     - return 0;
2958     + return ret;
2959     }
2960    
2961     /*
2962     diff --git a/drivers/gpu/drm/exynos/exynos_drm_mic.c b/drivers/gpu/drm/exynos/exynos_drm_mic.c
2963     index b78e8c5ba553..2aff986add89 100644
2964     --- a/drivers/gpu/drm/exynos/exynos_drm_mic.c
2965     +++ b/drivers/gpu/drm/exynos/exynos_drm_mic.c
2966     @@ -268,8 +268,10 @@ static void mic_pre_enable(struct drm_bridge *bridge)
2967     goto unlock;
2968    
2969     ret = pm_runtime_get_sync(mic->dev);
2970     - if (ret < 0)
2971     + if (ret < 0) {
2972     + pm_runtime_put_noidle(mic->dev);
2973     goto unlock;
2974     + }
2975    
2976     mic_set_path(mic, 1);
2977    
2978     diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c
2979     index 66f6d1a897f2..c169f0f70f3a 100644
2980     --- a/drivers/gpu/drm/i915/gt/intel_lrc.c
2981     +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
2982     @@ -3751,6 +3751,7 @@ intel_execlists_create_virtual(struct i915_gem_context *ctx,
2983     intel_engine_init_active(&ve->base, ENGINE_VIRTUAL);
2984    
2985     intel_engine_init_execlists(&ve->base);
2986     + ve->base.breadcrumbs.irq_armed = true; /* fake HW, used for irq_work */
2987    
2988     ve->base.cops = &virtual_context_ops;
2989     ve->base.request_alloc = execlists_request_alloc;
2990     diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
2991     index 25f78196b964..689b07bc91c4 100644
2992     --- a/drivers/gpu/drm/i915/gvt/handlers.c
2993     +++ b/drivers/gpu/drm/i915/gvt/handlers.c
2994     @@ -3103,8 +3103,8 @@ static int init_skl_mmio_info(struct intel_gvt *gvt)
2995     MMIO_DFH(GEN9_WM_CHICKEN3, D_SKL_PLUS, F_MODE_MASK | F_CMD_ACCESS,
2996     NULL, NULL);
2997    
2998     - MMIO_D(GAMT_CHKN_BIT_REG, D_KBL);
2999     - MMIO_D(GEN9_CTX_PREEMPT_REG, D_KBL | D_SKL);
3000     + MMIO_D(GAMT_CHKN_BIT_REG, D_KBL | D_CFL);
3001     + MMIO_D(GEN9_CTX_PREEMPT_REG, D_SKL_PLUS);
3002    
3003     return 0;
3004     }
3005     diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
3006     index edf7989d7a8e..99d449ce4a07 100644
3007     --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
3008     +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
3009     @@ -2185,7 +2185,6 @@ int dpu_encoder_setup(struct drm_device *dev, struct drm_encoder *enc,
3010    
3011     dpu_enc = to_dpu_encoder_virt(enc);
3012    
3013     - mutex_init(&dpu_enc->enc_lock);
3014     ret = dpu_encoder_setup_display(dpu_enc, dpu_kms, disp_info);
3015     if (ret)
3016     goto fail;
3017     @@ -2200,7 +2199,6 @@ int dpu_encoder_setup(struct drm_device *dev, struct drm_encoder *enc,
3018     0);
3019    
3020    
3021     - mutex_init(&dpu_enc->rc_lock);
3022     INIT_DELAYED_WORK(&dpu_enc->delayed_off_work,
3023     dpu_encoder_off_work);
3024     dpu_enc->idle_timeout = IDLE_TIMEOUT;
3025     @@ -2245,6 +2243,8 @@ struct drm_encoder *dpu_encoder_init(struct drm_device *dev,
3026    
3027     spin_lock_init(&dpu_enc->enc_spinlock);
3028     dpu_enc->enabled = false;
3029     + mutex_init(&dpu_enc->enc_lock);
3030     + mutex_init(&dpu_enc->rc_lock);
3031    
3032     return &dpu_enc->base;
3033     }
3034     diff --git a/drivers/gpu/drm/msm/msm_submitqueue.c b/drivers/gpu/drm/msm/msm_submitqueue.c
3035     index 001fbf537440..a1d94be7883a 100644
3036     --- a/drivers/gpu/drm/msm/msm_submitqueue.c
3037     +++ b/drivers/gpu/drm/msm/msm_submitqueue.c
3038     @@ -71,8 +71,10 @@ int msm_submitqueue_create(struct drm_device *drm, struct msm_file_private *ctx,
3039     queue->flags = flags;
3040    
3041     if (priv->gpu) {
3042     - if (prio >= priv->gpu->nr_rings)
3043     + if (prio >= priv->gpu->nr_rings) {
3044     + kfree(queue);
3045     return -EINVAL;
3046     + }
3047    
3048     queue->prio = prio;
3049     }
3050     diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c
3051     index 27c80c9e2b83..0f7eafedfe8f 100644
3052     --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c
3053     +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c
3054     @@ -1504,6 +1504,8 @@ const struct of_device_id sun4i_tcon_of_table[] = {
3055     { .compatible = "allwinner,sun6i-a31-tcon", .data = &sun6i_a31_quirks },
3056     { .compatible = "allwinner,sun6i-a31s-tcon", .data = &sun6i_a31s_quirks },
3057     { .compatible = "allwinner,sun7i-a20-tcon", .data = &sun7i_a20_quirks },
3058     + { .compatible = "allwinner,sun7i-a20-tcon0", .data = &sun7i_a20_quirks },
3059     + { .compatible = "allwinner,sun7i-a20-tcon1", .data = &sun7i_a20_quirks },
3060     { .compatible = "allwinner,sun8i-a23-tcon", .data = &sun8i_a33_quirks },
3061     { .compatible = "allwinner,sun8i-a33-tcon", .data = &sun8i_a33_quirks },
3062     { .compatible = "allwinner,sun8i-a83t-tcon-lcd", .data = &sun8i_a83t_lcd_quirks },
3063     diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
3064     index c552a6bc627e..73e4590ea9c9 100644
3065     --- a/drivers/hid/hid-ids.h
3066     +++ b/drivers/hid/hid-ids.h
3067     @@ -620,6 +620,7 @@
3068     #define USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081 0xa081
3069     #define USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A0C2 0xa0c2
3070     #define USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD_A096 0xa096
3071     +#define USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD_A293 0xa293
3072    
3073     #define USB_VENDOR_ID_IMATION 0x0718
3074     #define USB_DEVICE_ID_DISC_STAKKA 0xd000
3075     @@ -995,6 +996,8 @@
3076     #define USB_DEVICE_ID_ROCCAT_RYOS_MK_PRO 0x3232
3077     #define USB_DEVICE_ID_ROCCAT_SAVU 0x2d5a
3078    
3079     +#define USB_VENDOR_ID_SAI 0x17dd
3080     +
3081     #define USB_VENDOR_ID_SAITEK 0x06a3
3082     #define USB_DEVICE_ID_SAITEK_RUMBLEPAD 0xff17
3083     #define USB_DEVICE_ID_SAITEK_PS1000 0x0621
3084     diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c
3085     index cd9193078525..60cf80606282 100644
3086     --- a/drivers/hid/hid-logitech-hidpp.c
3087     +++ b/drivers/hid/hid-logitech-hidpp.c
3088     @@ -2964,7 +2964,7 @@ static int hi_res_scroll_enable(struct hidpp_device *hidpp)
3089     multiplier = 1;
3090    
3091     hidpp->vertical_wheel_counter.wheel_multiplier = multiplier;
3092     - hid_info(hidpp->hid_dev, "multiplier = %d\n", multiplier);
3093     + hid_dbg(hidpp->hid_dev, "wheel multiplier = %d\n", multiplier);
3094     return 0;
3095     }
3096    
3097     diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c
3098     index 34138667f8af..abd86903875f 100644
3099     --- a/drivers/hid/hid-magicmouse.c
3100     +++ b/drivers/hid/hid-magicmouse.c
3101     @@ -535,6 +535,12 @@ static int magicmouse_setup_input(struct input_dev *input, struct hid_device *hd
3102     __set_bit(MSC_RAW, input->mscbit);
3103     }
3104    
3105     + /*
3106     + * hid-input may mark device as using autorepeat, but neither
3107     + * the trackpad, nor the mouse actually want it.
3108     + */
3109     + __clear_bit(EV_REP, input->evbit);
3110     +
3111     return 0;
3112     }
3113    
3114     diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
3115     index 168fdaa1999f..a49fa2b047cb 100644
3116     --- a/drivers/hid/hid-quirks.c
3117     +++ b/drivers/hid/hid-quirks.c
3118     @@ -88,6 +88,7 @@ static const struct hid_device_id hid_quirks[] = {
3119     { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FIGHTING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
3120     { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FLYING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
3121     { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD_A096), HID_QUIRK_NO_INIT_REPORTS },
3122     + { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD_A293), HID_QUIRK_ALWAYS_POLL },
3123     { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0A4A), HID_QUIRK_ALWAYS_POLL },
3124     { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A), HID_QUIRK_ALWAYS_POLL },
3125     { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL },
3126     @@ -400,9 +401,6 @@ static const struct hid_device_id hid_have_special_driver[] = {
3127     { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081) },
3128     { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A0C2) },
3129     #endif
3130     -#if IS_ENABLED(CONFIG_HID_ITE)
3131     - { HID_USB_DEVICE(USB_VENDOR_ID_ITE, USB_DEVICE_ID_ITE8595) },
3132     -#endif
3133     #if IS_ENABLED(CONFIG_HID_ICADE)
3134     { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ION, USB_DEVICE_ID_ICADE) },
3135     #endif
3136     @@ -842,6 +840,7 @@ static const struct hid_device_id hid_ignore_list[] = {
3137     { HID_USB_DEVICE(USB_VENDOR_ID_PETZL, USB_DEVICE_ID_PETZL_HEADLAMP) },
3138     { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE) },
3139     { HID_USB_DEVICE(USB_VENDOR_ID_POWERCOM, USB_DEVICE_ID_POWERCOM_UPS) },
3140     + { HID_USB_DEVICE(USB_VENDOR_ID_SAI, USB_DEVICE_ID_CYPRESS_HIDCOM) },
3141     #if IS_ENABLED(CONFIG_MOUSE_SYNAPTICS_USB)
3142     { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP) },
3143     { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_INT_TP) },
3144     diff --git a/drivers/hwmon/emc2103.c b/drivers/hwmon/emc2103.c
3145     index 491a570e8e50..924c02c1631d 100644
3146     --- a/drivers/hwmon/emc2103.c
3147     +++ b/drivers/hwmon/emc2103.c
3148     @@ -443,7 +443,7 @@ static ssize_t pwm1_enable_store(struct device *dev,
3149     }
3150    
3151     result = read_u8_from_i2c(client, REG_FAN_CONF1, &conf_reg);
3152     - if (result) {
3153     + if (result < 0) {
3154     count = result;
3155     goto err;
3156     }
3157     diff --git a/drivers/hwtracing/intel_th/core.c b/drivers/hwtracing/intel_th/core.c
3158     index ca232ec565e8..c9ac3dc65113 100644
3159     --- a/drivers/hwtracing/intel_th/core.c
3160     +++ b/drivers/hwtracing/intel_th/core.c
3161     @@ -1021,15 +1021,30 @@ int intel_th_set_output(struct intel_th_device *thdev,
3162     {
3163     struct intel_th_device *hub = to_intel_th_hub(thdev);
3164     struct intel_th_driver *hubdrv = to_intel_th_driver(hub->dev.driver);
3165     + int ret;
3166    
3167     /* In host mode, this is up to the external debugger, do nothing. */
3168     if (hub->host_mode)
3169     return 0;
3170    
3171     - if (!hubdrv->set_output)
3172     - return -ENOTSUPP;
3173     + /*
3174     + * hub is instantiated together with the source device that
3175     + * calls here, so guaranteed to be present.
3176     + */
3177     + hubdrv = to_intel_th_driver(hub->dev.driver);
3178     + if (!hubdrv || !try_module_get(hubdrv->driver.owner))
3179     + return -EINVAL;
3180     +
3181     + if (!hubdrv->set_output) {
3182     + ret = -ENOTSUPP;
3183     + goto out;
3184     + }
3185     +
3186     + ret = hubdrv->set_output(hub, master);
3187    
3188     - return hubdrv->set_output(hub, master);
3189     +out:
3190     + module_put(hubdrv->driver.owner);
3191     + return ret;
3192     }
3193     EXPORT_SYMBOL_GPL(intel_th_set_output);
3194    
3195     diff --git a/drivers/hwtracing/intel_th/pci.c b/drivers/hwtracing/intel_th/pci.c
3196     index 86aa6a46bcba..0d26484d6795 100644
3197     --- a/drivers/hwtracing/intel_th/pci.c
3198     +++ b/drivers/hwtracing/intel_th/pci.c
3199     @@ -229,11 +229,21 @@ static const struct pci_device_id intel_th_pci_id_table[] = {
3200     PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa0a6),
3201     .driver_data = (kernel_ulong_t)&intel_th_2x,
3202     },
3203     + {
3204     + /* Tiger Lake PCH-H */
3205     + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x43a6),
3206     + .driver_data = (kernel_ulong_t)&intel_th_2x,
3207     + },
3208     {
3209     /* Jasper Lake PCH */
3210     PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4da6),
3211     .driver_data = (kernel_ulong_t)&intel_th_2x,
3212     },
3213     + {
3214     + /* Jasper Lake CPU */
3215     + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4e29),
3216     + .driver_data = (kernel_ulong_t)&intel_th_2x,
3217     + },
3218     {
3219     /* Elkhart Lake CPU */
3220     PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4529),
3221     @@ -244,6 +254,11 @@ static const struct pci_device_id intel_th_pci_id_table[] = {
3222     PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4b26),
3223     .driver_data = (kernel_ulong_t)&intel_th_2x,
3224     },
3225     + {
3226     + /* Emmitsburg PCH */
3227     + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x1bcc),
3228     + .driver_data = (kernel_ulong_t)&intel_th_2x,
3229     + },
3230     { 0 },
3231     };
3232    
3233     diff --git a/drivers/hwtracing/intel_th/sth.c b/drivers/hwtracing/intel_th/sth.c
3234     index 3a1f4e650378..a1529f571491 100644
3235     --- a/drivers/hwtracing/intel_th/sth.c
3236     +++ b/drivers/hwtracing/intel_th/sth.c
3237     @@ -161,9 +161,7 @@ static int sth_stm_link(struct stm_data *stm_data, unsigned int master,
3238     {
3239     struct sth_device *sth = container_of(stm_data, struct sth_device, stm);
3240    
3241     - intel_th_set_output(to_intel_th_device(sth->dev), master);
3242     -
3243     - return 0;
3244     + return intel_th_set_output(to_intel_th_device(sth->dev), master);
3245     }
3246    
3247     static int intel_th_sw_init(struct sth_device *sth)
3248     diff --git a/drivers/i2c/busses/i2c-eg20t.c b/drivers/i2c/busses/i2c-eg20t.c
3249     index bb810dee8fb5..73f139690e4e 100644
3250     --- a/drivers/i2c/busses/i2c-eg20t.c
3251     +++ b/drivers/i2c/busses/i2c-eg20t.c
3252     @@ -180,6 +180,7 @@ static const struct pci_device_id pch_pcidev_id[] = {
3253     { PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ML7831_I2C), 1, },
3254     {0,}
3255     };
3256     +MODULE_DEVICE_TABLE(pci, pch_pcidev_id);
3257    
3258     static irqreturn_t pch_i2c_handler(int irq, void *pData);
3259    
3260     diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c
3261     index 00e100fc845a..813bca7cfc3e 100644
3262     --- a/drivers/iio/accel/mma8452.c
3263     +++ b/drivers/iio/accel/mma8452.c
3264     @@ -1685,10 +1685,13 @@ static int mma8452_probe(struct i2c_client *client,
3265    
3266     ret = mma8452_set_freefall_mode(data, false);
3267     if (ret < 0)
3268     - goto buffer_cleanup;
3269     + goto unregister_device;
3270    
3271     return 0;
3272    
3273     +unregister_device:
3274     + iio_device_unregister(indio_dev);
3275     +
3276     buffer_cleanup:
3277     iio_triggered_buffer_cleanup(indio_dev);
3278    
3279     diff --git a/drivers/iio/adc/ad7780.c b/drivers/iio/adc/ad7780.c
3280     index 217a5a5c3c6d..7e741294de7b 100644
3281     --- a/drivers/iio/adc/ad7780.c
3282     +++ b/drivers/iio/adc/ad7780.c
3283     @@ -309,7 +309,7 @@ static int ad7780_probe(struct spi_device *spi)
3284    
3285     ret = ad7780_init_gpios(&spi->dev, st);
3286     if (ret)
3287     - goto error_cleanup_buffer_and_trigger;
3288     + return ret;
3289    
3290     st->reg = devm_regulator_get(&spi->dev, "avdd");
3291     if (IS_ERR(st->reg))
3292     diff --git a/drivers/iio/health/afe4403.c b/drivers/iio/health/afe4403.c
3293     index dc22dc363a99..29104656a537 100644
3294     --- a/drivers/iio/health/afe4403.c
3295     +++ b/drivers/iio/health/afe4403.c
3296     @@ -63,6 +63,7 @@ static const struct reg_field afe4403_reg_fields[] = {
3297     * @regulator: Pointer to the regulator for the IC
3298     * @trig: IIO trigger for this device
3299     * @irq: ADC_RDY line interrupt number
3300     + * @buffer: Used to construct data layout to push into IIO buffer.
3301     */
3302     struct afe4403_data {
3303     struct device *dev;
3304     @@ -72,6 +73,8 @@ struct afe4403_data {
3305     struct regulator *regulator;
3306     struct iio_trigger *trig;
3307     int irq;
3308     + /* Ensure suitable alignment for timestamp */
3309     + s32 buffer[8] __aligned(8);
3310     };
3311    
3312     enum afe4403_chan_id {
3313     @@ -309,7 +312,6 @@ static irqreturn_t afe4403_trigger_handler(int irq, void *private)
3314     struct iio_dev *indio_dev = pf->indio_dev;
3315     struct afe4403_data *afe = iio_priv(indio_dev);
3316     int ret, bit, i = 0;
3317     - s32 buffer[8];
3318     u8 tx[4] = {AFE440X_CONTROL0, 0x0, 0x0, AFE440X_CONTROL0_READ};
3319     u8 rx[3];
3320    
3321     @@ -326,9 +328,9 @@ static irqreturn_t afe4403_trigger_handler(int irq, void *private)
3322     if (ret)
3323     goto err;
3324    
3325     - buffer[i++] = (rx[0] << 16) |
3326     - (rx[1] << 8) |
3327     - (rx[2]);
3328     + afe->buffer[i++] = (rx[0] << 16) |
3329     + (rx[1] << 8) |
3330     + (rx[2]);
3331     }
3332    
3333     /* Disable reading from the device */
3334     @@ -337,7 +339,8 @@ static irqreturn_t afe4403_trigger_handler(int irq, void *private)
3335     if (ret)
3336     goto err;
3337    
3338     - iio_push_to_buffers_with_timestamp(indio_dev, buffer, pf->timestamp);
3339     + iio_push_to_buffers_with_timestamp(indio_dev, afe->buffer,
3340     + pf->timestamp);
3341     err:
3342     iio_trigger_notify_done(indio_dev->trig);
3343    
3344     diff --git a/drivers/iio/health/afe4404.c b/drivers/iio/health/afe4404.c
3345     index e728bbb21ca8..cebb1fd4d0b1 100644
3346     --- a/drivers/iio/health/afe4404.c
3347     +++ b/drivers/iio/health/afe4404.c
3348     @@ -83,6 +83,7 @@ static const struct reg_field afe4404_reg_fields[] = {
3349     * @regulator: Pointer to the regulator for the IC
3350     * @trig: IIO trigger for this device
3351     * @irq: ADC_RDY line interrupt number
3352     + * @buffer: Used to construct a scan to push to the iio buffer.
3353     */
3354     struct afe4404_data {
3355     struct device *dev;
3356     @@ -91,6 +92,7 @@ struct afe4404_data {
3357     struct regulator *regulator;
3358     struct iio_trigger *trig;
3359     int irq;
3360     + s32 buffer[10] __aligned(8);
3361     };
3362    
3363     enum afe4404_chan_id {
3364     @@ -328,17 +330,17 @@ static irqreturn_t afe4404_trigger_handler(int irq, void *private)
3365     struct iio_dev *indio_dev = pf->indio_dev;
3366     struct afe4404_data *afe = iio_priv(indio_dev);
3367     int ret, bit, i = 0;
3368     - s32 buffer[10];
3369    
3370     for_each_set_bit(bit, indio_dev->active_scan_mask,
3371     indio_dev->masklength) {
3372     ret = regmap_read(afe->regmap, afe4404_channel_values[bit],
3373     - &buffer[i++]);
3374     + &afe->buffer[i++]);
3375     if (ret)
3376     goto err;
3377     }
3378    
3379     - iio_push_to_buffers_with_timestamp(indio_dev, buffer, pf->timestamp);
3380     + iio_push_to_buffers_with_timestamp(indio_dev, afe->buffer,
3381     + pf->timestamp);
3382     err:
3383     iio_trigger_notify_done(indio_dev->trig);
3384    
3385     diff --git a/drivers/iio/humidity/hdc100x.c b/drivers/iio/humidity/hdc100x.c
3386     index dcf5a5bdfaa8..7618cdf59efd 100644
3387     --- a/drivers/iio/humidity/hdc100x.c
3388     +++ b/drivers/iio/humidity/hdc100x.c
3389     @@ -38,6 +38,11 @@ struct hdc100x_data {
3390    
3391     /* integration time of the sensor */
3392     int adc_int_us[2];
3393     + /* Ensure natural alignment of timestamp */
3394     + struct {
3395     + __be16 channels[2];
3396     + s64 ts __aligned(8);
3397     + } scan;
3398     };
3399    
3400     /* integration time in us */
3401     @@ -319,7 +324,6 @@ static irqreturn_t hdc100x_trigger_handler(int irq, void *p)
3402     struct i2c_client *client = data->client;
3403     int delay = data->adc_int_us[0] + data->adc_int_us[1];
3404     int ret;
3405     - s16 buf[8]; /* 2x s16 + padding + 8 byte timestamp */
3406    
3407     /* dual read starts at temp register */
3408     mutex_lock(&data->lock);
3409     @@ -330,13 +334,13 @@ static irqreturn_t hdc100x_trigger_handler(int irq, void *p)
3410     }
3411     usleep_range(delay, delay + 1000);
3412    
3413     - ret = i2c_master_recv(client, (u8 *)buf, 4);
3414     + ret = i2c_master_recv(client, (u8 *)data->scan.channels, 4);
3415     if (ret < 0) {
3416     dev_err(&client->dev, "cannot read sensor data\n");
3417     goto err;
3418     }
3419    
3420     - iio_push_to_buffers_with_timestamp(indio_dev, buf,
3421     + iio_push_to_buffers_with_timestamp(indio_dev, &data->scan,
3422     iio_get_time_ns(indio_dev));
3423     err:
3424     mutex_unlock(&data->lock);
3425     diff --git a/drivers/iio/humidity/hts221.h b/drivers/iio/humidity/hts221.h
3426     index 7d6771f7cf47..b2eb5abeaccd 100644
3427     --- a/drivers/iio/humidity/hts221.h
3428     +++ b/drivers/iio/humidity/hts221.h
3429     @@ -14,8 +14,6 @@
3430    
3431     #include <linux/iio/iio.h>
3432    
3433     -#define HTS221_DATA_SIZE 2
3434     -
3435     enum hts221_sensor_type {
3436     HTS221_SENSOR_H,
3437     HTS221_SENSOR_T,
3438     @@ -39,6 +37,11 @@ struct hts221_hw {
3439    
3440     bool enabled;
3441     u8 odr;
3442     + /* Ensure natural alignment of timestamp */
3443     + struct {
3444     + __le16 channels[2];
3445     + s64 ts __aligned(8);
3446     + } scan;
3447     };
3448    
3449     extern const struct dev_pm_ops hts221_pm_ops;
3450     diff --git a/drivers/iio/humidity/hts221_buffer.c b/drivers/iio/humidity/hts221_buffer.c
3451     index 81d50a861c22..49dcd36d8838 100644
3452     --- a/drivers/iio/humidity/hts221_buffer.c
3453     +++ b/drivers/iio/humidity/hts221_buffer.c
3454     @@ -162,7 +162,6 @@ static const struct iio_buffer_setup_ops hts221_buffer_ops = {
3455    
3456     static irqreturn_t hts221_buffer_handler_thread(int irq, void *p)
3457     {
3458     - u8 buffer[ALIGN(2 * HTS221_DATA_SIZE, sizeof(s64)) + sizeof(s64)];
3459     struct iio_poll_func *pf = p;
3460     struct iio_dev *iio_dev = pf->indio_dev;
3461     struct hts221_hw *hw = iio_priv(iio_dev);
3462     @@ -172,18 +171,20 @@ static irqreturn_t hts221_buffer_handler_thread(int irq, void *p)
3463     /* humidity data */
3464     ch = &iio_dev->channels[HTS221_SENSOR_H];
3465     err = regmap_bulk_read(hw->regmap, ch->address,
3466     - buffer, HTS221_DATA_SIZE);
3467     + &hw->scan.channels[0],
3468     + sizeof(hw->scan.channels[0]));
3469     if (err < 0)
3470     goto out;
3471    
3472     /* temperature data */
3473     ch = &iio_dev->channels[HTS221_SENSOR_T];
3474     err = regmap_bulk_read(hw->regmap, ch->address,
3475     - buffer + HTS221_DATA_SIZE, HTS221_DATA_SIZE);
3476     + &hw->scan.channels[1],
3477     + sizeof(hw->scan.channels[1]));
3478     if (err < 0)
3479     goto out;
3480    
3481     - iio_push_to_buffers_with_timestamp(iio_dev, buffer,
3482     + iio_push_to_buffers_with_timestamp(iio_dev, &hw->scan,
3483     iio_get_time_ns(iio_dev));
3484    
3485     out:
3486     diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
3487     index 524a686077ca..485b2e6748c5 100644
3488     --- a/drivers/iio/industrialio-core.c
3489     +++ b/drivers/iio/industrialio-core.c
3490     @@ -130,6 +130,8 @@ static const char * const iio_modifier_names[] = {
3491     [IIO_MOD_PM2P5] = "pm2p5",
3492     [IIO_MOD_PM4] = "pm4",
3493     [IIO_MOD_PM10] = "pm10",
3494     + [IIO_MOD_ETHANOL] = "ethanol",
3495     + [IIO_MOD_H2] = "h2",
3496     };
3497    
3498     /* relies on pairs of these shared then separate */
3499     diff --git a/drivers/iio/magnetometer/ak8974.c b/drivers/iio/magnetometer/ak8974.c
3500     index d32996702110..87c15a63c1a4 100644
3501     --- a/drivers/iio/magnetometer/ak8974.c
3502     +++ b/drivers/iio/magnetometer/ak8974.c
3503     @@ -185,6 +185,11 @@ struct ak8974 {
3504     bool drdy_irq;
3505     struct completion drdy_complete;
3506     bool drdy_active_low;
3507     + /* Ensure timestamp is naturally aligned */
3508     + struct {
3509     + __le16 channels[3];
3510     + s64 ts __aligned(8);
3511     + } scan;
3512     };
3513    
3514     static const char ak8974_reg_avdd[] = "avdd";
3515     @@ -581,7 +586,6 @@ static void ak8974_fill_buffer(struct iio_dev *indio_dev)
3516     {
3517     struct ak8974 *ak8974 = iio_priv(indio_dev);
3518     int ret;
3519     - __le16 hw_values[8]; /* Three axes + 64bit padding */
3520    
3521     pm_runtime_get_sync(&ak8974->i2c->dev);
3522     mutex_lock(&ak8974->lock);
3523     @@ -591,13 +595,13 @@ static void ak8974_fill_buffer(struct iio_dev *indio_dev)
3524     dev_err(&ak8974->i2c->dev, "error triggering measure\n");
3525     goto out_unlock;
3526     }
3527     - ret = ak8974_getresult(ak8974, hw_values);
3528     + ret = ak8974_getresult(ak8974, ak8974->scan.channels);
3529     if (ret) {
3530     dev_err(&ak8974->i2c->dev, "error getting measures\n");
3531     goto out_unlock;
3532     }
3533    
3534     - iio_push_to_buffers_with_timestamp(indio_dev, hw_values,
3535     + iio_push_to_buffers_with_timestamp(indio_dev, &ak8974->scan,
3536     iio_get_time_ns(indio_dev));
3537    
3538     out_unlock:
3539     @@ -764,19 +768,21 @@ static int ak8974_probe(struct i2c_client *i2c,
3540     ak8974->map = devm_regmap_init_i2c(i2c, &ak8974_regmap_config);
3541     if (IS_ERR(ak8974->map)) {
3542     dev_err(&i2c->dev, "failed to allocate register map\n");
3543     + pm_runtime_put_noidle(&i2c->dev);
3544     + pm_runtime_disable(&i2c->dev);
3545     return PTR_ERR(ak8974->map);
3546     }
3547    
3548     ret = ak8974_set_power(ak8974, AK8974_PWR_ON);
3549     if (ret) {
3550     dev_err(&i2c->dev, "could not power on\n");
3551     - goto power_off;
3552     + goto disable_pm;
3553     }
3554    
3555     ret = ak8974_detect(ak8974);
3556     if (ret) {
3557     dev_err(&i2c->dev, "neither AK8974 nor AMI30x found\n");
3558     - goto power_off;
3559     + goto disable_pm;
3560     }
3561    
3562     ret = ak8974_selftest(ak8974);
3563     @@ -786,14 +792,9 @@ static int ak8974_probe(struct i2c_client *i2c,
3564     ret = ak8974_reset(ak8974);
3565     if (ret) {
3566     dev_err(&i2c->dev, "AK8974 reset failed\n");
3567     - goto power_off;
3568     + goto disable_pm;
3569     }
3570    
3571     - pm_runtime_set_autosuspend_delay(&i2c->dev,
3572     - AK8974_AUTOSUSPEND_DELAY);
3573     - pm_runtime_use_autosuspend(&i2c->dev);
3574     - pm_runtime_put(&i2c->dev);
3575     -
3576     indio_dev->dev.parent = &i2c->dev;
3577     indio_dev->channels = ak8974_channels;
3578     indio_dev->num_channels = ARRAY_SIZE(ak8974_channels);
3579     @@ -846,6 +847,11 @@ no_irq:
3580     goto cleanup_buffer;
3581     }
3582    
3583     + pm_runtime_set_autosuspend_delay(&i2c->dev,
3584     + AK8974_AUTOSUSPEND_DELAY);
3585     + pm_runtime_use_autosuspend(&i2c->dev);
3586     + pm_runtime_put(&i2c->dev);
3587     +
3588     return 0;
3589    
3590     cleanup_buffer:
3591     @@ -854,7 +860,6 @@ disable_pm:
3592     pm_runtime_put_noidle(&i2c->dev);
3593     pm_runtime_disable(&i2c->dev);
3594     ak8974_set_power(ak8974, AK8974_PWR_OFF);
3595     -power_off:
3596     regulator_bulk_disable(ARRAY_SIZE(ak8974->regs), ak8974->regs);
3597    
3598     return ret;
3599     diff --git a/drivers/iio/pressure/ms5611_core.c b/drivers/iio/pressure/ms5611_core.c
3600     index 2f598ad91621..f5db9fa086f3 100644
3601     --- a/drivers/iio/pressure/ms5611_core.c
3602     +++ b/drivers/iio/pressure/ms5611_core.c
3603     @@ -212,16 +212,21 @@ static irqreturn_t ms5611_trigger_handler(int irq, void *p)
3604     struct iio_poll_func *pf = p;
3605     struct iio_dev *indio_dev = pf->indio_dev;
3606     struct ms5611_state *st = iio_priv(indio_dev);
3607     - s32 buf[4]; /* s32 (pressure) + s32 (temp) + 2 * s32 (timestamp) */
3608     + /* Ensure buffer elements are naturally aligned */
3609     + struct {
3610     + s32 channels[2];
3611     + s64 ts __aligned(8);
3612     + } scan;
3613     int ret;
3614    
3615     mutex_lock(&st->lock);
3616     - ret = ms5611_read_temp_and_pressure(indio_dev, &buf[1], &buf[0]);
3617     + ret = ms5611_read_temp_and_pressure(indio_dev, &scan.channels[1],
3618     + &scan.channels[0]);
3619     mutex_unlock(&st->lock);
3620     if (ret < 0)
3621     goto err;
3622    
3623     - iio_push_to_buffers_with_timestamp(indio_dev, buf,
3624     + iio_push_to_buffers_with_timestamp(indio_dev, &scan,
3625     iio_get_time_ns(indio_dev));
3626    
3627     err:
3628     diff --git a/drivers/iio/pressure/zpa2326.c b/drivers/iio/pressure/zpa2326.c
3629     index 9d0d07930236..7f2e5a8942a4 100644
3630     --- a/drivers/iio/pressure/zpa2326.c
3631     +++ b/drivers/iio/pressure/zpa2326.c
3632     @@ -664,8 +664,10 @@ static int zpa2326_resume(const struct iio_dev *indio_dev)
3633     int err;
3634    
3635     err = pm_runtime_get_sync(indio_dev->dev.parent);
3636     - if (err < 0)
3637     + if (err < 0) {
3638     + pm_runtime_put(indio_dev->dev.parent);
3639     return err;
3640     + }
3641    
3642     if (err > 0) {
3643     /*
3644     diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
3645     index 96edc5c30204..09e29c6cb66d 100644
3646     --- a/drivers/infiniband/hw/mlx5/qp.c
3647     +++ b/drivers/infiniband/hw/mlx5/qp.c
3648     @@ -1463,6 +1463,8 @@ static int create_raw_packet_qp(struct mlx5_ib_dev *dev, struct mlx5_ib_qp *qp,
3649     u16 uid = to_mpd(pd)->uid;
3650     u32 out[MLX5_ST_SZ_DW(create_tir_out)] = {};
3651    
3652     + if (!qp->sq.wqe_cnt && !qp->rq.wqe_cnt)
3653     + return -EINVAL;
3654     if (qp->sq.wqe_cnt) {
3655     err = create_raw_packet_qp_tis(dev, qp, sq, tdn, pd);
3656     if (err)
3657     diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
3658     index 7e048b557462..858a26302198 100644
3659     --- a/drivers/input/serio/i8042-x86ia64io.h
3660     +++ b/drivers/input/serio/i8042-x86ia64io.h
3661     @@ -425,6 +425,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
3662     DMI_MATCH(DMI_PRODUCT_NAME, "076804U"),
3663     },
3664     },
3665     + {
3666     + /* Lenovo XiaoXin Air 12 */
3667     + .matches = {
3668     + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
3669     + DMI_MATCH(DMI_PRODUCT_NAME, "80UN"),
3670     + },
3671     + },
3672     {
3673     .matches = {
3674     DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
3675     diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c
3676     index 0403102e807e..37b35ab97beb 100644
3677     --- a/drivers/input/touchscreen/goodix.c
3678     +++ b/drivers/input/touchscreen/goodix.c
3679     @@ -168,6 +168,22 @@ static const struct dmi_system_id nine_bytes_report[] = {
3680     {}
3681     };
3682    
3683     +/*
3684     + * Those tablets have their x coordinate inverted
3685     + */
3686     +static const struct dmi_system_id inverted_x_screen[] = {
3687     +#if defined(CONFIG_DMI) && defined(CONFIG_X86)
3688     + {
3689     + .ident = "Cube I15-TC",
3690     + .matches = {
3691     + DMI_MATCH(DMI_SYS_VENDOR, "Cube"),
3692     + DMI_MATCH(DMI_PRODUCT_NAME, "I15-TC")
3693     + },
3694     + },
3695     +#endif
3696     + {}
3697     +};
3698     +
3699     /**
3700     * goodix_i2c_read - read data from a register of the i2c slave device.
3701     *
3702     @@ -780,6 +796,12 @@ static int goodix_configure_dev(struct goodix_ts_data *ts)
3703     "Non-standard 9-bytes report format quirk\n");
3704     }
3705    
3706     + if (dmi_check_system(inverted_x_screen)) {
3707     + ts->prop.invert_x = true;
3708     + dev_dbg(&ts->client->dev,
3709     + "Applying 'inverted x screen' quirk\n");
3710     + }
3711     +
3712     error = input_mt_init_slots(ts->input_dev, ts->max_touch_num,
3713     INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED);
3714     if (error) {
3715     diff --git a/drivers/input/touchscreen/mms114.c b/drivers/input/touchscreen/mms114.c
3716     index fca908ba4841..fb28fd2d6f1c 100644
3717     --- a/drivers/input/touchscreen/mms114.c
3718     +++ b/drivers/input/touchscreen/mms114.c
3719     @@ -54,6 +54,7 @@
3720     enum mms_type {
3721     TYPE_MMS114 = 114,
3722     TYPE_MMS152 = 152,
3723     + TYPE_MMS345L = 345,
3724     };
3725    
3726     struct mms114_data {
3727     @@ -250,6 +251,15 @@ static int mms114_get_version(struct mms114_data *data)
3728     int error;
3729    
3730     switch (data->type) {
3731     + case TYPE_MMS345L:
3732     + error = __mms114_read_reg(data, MMS152_FW_REV, 3, buf);
3733     + if (error)
3734     + return error;
3735     +
3736     + dev_info(dev, "TSP FW Rev: bootloader 0x%x / core 0x%x / config 0x%x\n",
3737     + buf[0], buf[1], buf[2]);
3738     + break;
3739     +
3740     case TYPE_MMS152:
3741     error = __mms114_read_reg(data, MMS152_FW_REV, 3, buf);
3742     if (error)
3743     @@ -287,8 +297,8 @@ static int mms114_setup_regs(struct mms114_data *data)
3744     if (error < 0)
3745     return error;
3746    
3747     - /* MMS152 has no configuration or power on registers */
3748     - if (data->type == TYPE_MMS152)
3749     + /* Only MMS114 has configuration and power on registers */
3750     + if (data->type != TYPE_MMS114)
3751     return 0;
3752    
3753     error = mms114_set_active(data, true);
3754     @@ -598,6 +608,9 @@ static const struct of_device_id mms114_dt_match[] = {
3755     }, {
3756     .compatible = "melfas,mms152",
3757     .data = (void *)TYPE_MMS152,
3758     + }, {
3759     + .compatible = "melfas,mms345l",
3760     + .data = (void *)TYPE_MMS345L,
3761     },
3762     { }
3763     };
3764     diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig
3765     index e3842eabcfdd..390568afee9f 100644
3766     --- a/drivers/iommu/Kconfig
3767     +++ b/drivers/iommu/Kconfig
3768     @@ -205,7 +205,7 @@ config INTEL_IOMMU_DEBUGFS
3769    
3770     config INTEL_IOMMU_SVM
3771     bool "Support for Shared Virtual Memory with Intel IOMMU"
3772     - depends on INTEL_IOMMU && X86
3773     + depends on INTEL_IOMMU && X86_64
3774     select PCI_PASID
3775     select MMU_NOTIFIER
3776     help
3777     diff --git a/drivers/misc/atmel-ssc.c b/drivers/misc/atmel-ssc.c
3778     index ab4144ea1f11..d6cd5537126c 100644
3779     --- a/drivers/misc/atmel-ssc.c
3780     +++ b/drivers/misc/atmel-ssc.c
3781     @@ -10,7 +10,7 @@
3782     #include <linux/clk.h>
3783     #include <linux/err.h>
3784     #include <linux/io.h>
3785     -#include <linux/spinlock.h>
3786     +#include <linux/mutex.h>
3787     #include <linux/atmel-ssc.h>
3788     #include <linux/slab.h>
3789     #include <linux/module.h>
3790     @@ -20,7 +20,7 @@
3791     #include "../../sound/soc/atmel/atmel_ssc_dai.h"
3792    
3793     /* Serialize access to ssc_list and user count */
3794     -static DEFINE_SPINLOCK(user_lock);
3795     +static DEFINE_MUTEX(user_lock);
3796     static LIST_HEAD(ssc_list);
3797    
3798     struct ssc_device *ssc_request(unsigned int ssc_num)
3799     @@ -28,7 +28,7 @@ struct ssc_device *ssc_request(unsigned int ssc_num)
3800     int ssc_valid = 0;
3801     struct ssc_device *ssc;
3802    
3803     - spin_lock(&user_lock);
3804     + mutex_lock(&user_lock);
3805     list_for_each_entry(ssc, &ssc_list, list) {
3806     if (ssc->pdev->dev.of_node) {
3807     if (of_alias_get_id(ssc->pdev->dev.of_node, "ssc")
3808     @@ -44,18 +44,18 @@ struct ssc_device *ssc_request(unsigned int ssc_num)
3809     }
3810    
3811     if (!ssc_valid) {
3812     - spin_unlock(&user_lock);
3813     + mutex_unlock(&user_lock);
3814     pr_err("ssc: ssc%d platform device is missing\n", ssc_num);
3815     return ERR_PTR(-ENODEV);
3816     }
3817    
3818     if (ssc->user) {
3819     - spin_unlock(&user_lock);
3820     + mutex_unlock(&user_lock);
3821     dev_dbg(&ssc->pdev->dev, "module busy\n");
3822     return ERR_PTR(-EBUSY);
3823     }
3824     ssc->user++;
3825     - spin_unlock(&user_lock);
3826     + mutex_unlock(&user_lock);
3827    
3828     clk_prepare(ssc->clk);
3829    
3830     @@ -67,14 +67,14 @@ void ssc_free(struct ssc_device *ssc)
3831     {
3832     bool disable_clk = true;
3833    
3834     - spin_lock(&user_lock);
3835     + mutex_lock(&user_lock);
3836     if (ssc->user)
3837     ssc->user--;
3838     else {
3839     disable_clk = false;
3840     dev_dbg(&ssc->pdev->dev, "device already free\n");
3841     }
3842     - spin_unlock(&user_lock);
3843     + mutex_unlock(&user_lock);
3844    
3845     if (disable_clk)
3846     clk_unprepare(ssc->clk);
3847     @@ -237,9 +237,9 @@ static int ssc_probe(struct platform_device *pdev)
3848     return -ENXIO;
3849     }
3850    
3851     - spin_lock(&user_lock);
3852     + mutex_lock(&user_lock);
3853     list_add_tail(&ssc->list, &ssc_list);
3854     - spin_unlock(&user_lock);
3855     + mutex_unlock(&user_lock);
3856    
3857     platform_set_drvdata(pdev, ssc);
3858    
3859     @@ -258,9 +258,9 @@ static int ssc_remove(struct platform_device *pdev)
3860    
3861     ssc_sound_dai_remove(ssc);
3862    
3863     - spin_lock(&user_lock);
3864     + mutex_lock(&user_lock);
3865     list_del(&ssc->list);
3866     - spin_unlock(&user_lock);
3867     + mutex_unlock(&user_lock);
3868    
3869     return 0;
3870     }
3871     diff --git a/drivers/misc/habanalabs/goya/goya_security.c b/drivers/misc/habanalabs/goya/goya_security.c
3872     index d6ec12b3e692..08fc89ea0a0c 100644
3873     --- a/drivers/misc/habanalabs/goya/goya_security.c
3874     +++ b/drivers/misc/habanalabs/goya/goya_security.c
3875     @@ -695,7 +695,6 @@ static void goya_init_tpc_protection_bits(struct hl_device *hdev)
3876     mask |= 1 << ((mmTPC0_CFG_CFG_SUBTRACT_VALUE & 0x7F) >> 2);
3877     mask |= 1 << ((mmTPC0_CFG_SM_BASE_ADDRESS_LOW & 0x7F) >> 2);
3878     mask |= 1 << ((mmTPC0_CFG_SM_BASE_ADDRESS_HIGH & 0x7F) >> 2);
3879     - mask |= 1 << ((mmTPC0_CFG_CFG_SUBTRACT_VALUE & 0x7F) >> 2);
3880     mask |= 1 << ((mmTPC0_CFG_TPC_STALL & 0x7F) >> 2);
3881     mask |= 1 << ((mmTPC0_CFG_MSS_CONFIG & 0x7F) >> 2);
3882     mask |= 1 << ((mmTPC0_CFG_TPC_INTR_CAUSE & 0x7F) >> 2);
3883     @@ -875,6 +874,16 @@ static void goya_init_tpc_protection_bits(struct hl_device *hdev)
3884     goya_pb_set_block(hdev, mmTPC1_RD_REGULATOR_BASE);
3885     goya_pb_set_block(hdev, mmTPC1_WR_REGULATOR_BASE);
3886    
3887     + pb_addr = (mmTPC1_CFG_SEMAPHORE & ~0xFFF) + PROT_BITS_OFFS;
3888     + word_offset = ((mmTPC1_CFG_SEMAPHORE & PROT_BITS_OFFS) >> 7) << 2;
3889     +
3890     + mask = 1 << ((mmTPC1_CFG_SEMAPHORE & 0x7F) >> 2);
3891     + mask |= 1 << ((mmTPC1_CFG_VFLAGS & 0x7F) >> 2);
3892     + mask |= 1 << ((mmTPC1_CFG_SFLAGS & 0x7F) >> 2);
3893     + mask |= 1 << ((mmTPC1_CFG_STATUS & 0x7F) >> 2);
3894     +
3895     + WREG32(pb_addr + word_offset, ~mask);
3896     +
3897     pb_addr = (mmTPC1_CFG_CFG_BASE_ADDRESS_HIGH & ~0xFFF) + PROT_BITS_OFFS;
3898     word_offset = ((mmTPC1_CFG_CFG_BASE_ADDRESS_HIGH &
3899     PROT_BITS_OFFS) >> 7) << 2;
3900     @@ -882,6 +891,10 @@ static void goya_init_tpc_protection_bits(struct hl_device *hdev)
3901     mask |= 1 << ((mmTPC1_CFG_CFG_SUBTRACT_VALUE & 0x7F) >> 2);
3902     mask |= 1 << ((mmTPC1_CFG_SM_BASE_ADDRESS_LOW & 0x7F) >> 2);
3903     mask |= 1 << ((mmTPC1_CFG_SM_BASE_ADDRESS_HIGH & 0x7F) >> 2);
3904     + mask |= 1 << ((mmTPC1_CFG_TPC_STALL & 0x7F) >> 2);
3905     + mask |= 1 << ((mmTPC1_CFG_MSS_CONFIG & 0x7F) >> 2);
3906     + mask |= 1 << ((mmTPC1_CFG_TPC_INTR_CAUSE & 0x7F) >> 2);
3907     + mask |= 1 << ((mmTPC1_CFG_TPC_INTR_MASK & 0x7F) >> 2);
3908    
3909     WREG32(pb_addr + word_offset, ~mask);
3910    
3911     @@ -1057,6 +1070,16 @@ static void goya_init_tpc_protection_bits(struct hl_device *hdev)
3912     goya_pb_set_block(hdev, mmTPC2_RD_REGULATOR_BASE);
3913     goya_pb_set_block(hdev, mmTPC2_WR_REGULATOR_BASE);
3914    
3915     + pb_addr = (mmTPC2_CFG_SEMAPHORE & ~0xFFF) + PROT_BITS_OFFS;
3916     + word_offset = ((mmTPC2_CFG_SEMAPHORE & PROT_BITS_OFFS) >> 7) << 2;
3917     +
3918     + mask = 1 << ((mmTPC2_CFG_SEMAPHORE & 0x7F) >> 2);
3919     + mask |= 1 << ((mmTPC2_CFG_VFLAGS & 0x7F) >> 2);
3920     + mask |= 1 << ((mmTPC2_CFG_SFLAGS & 0x7F) >> 2);
3921     + mask |= 1 << ((mmTPC2_CFG_STATUS & 0x7F) >> 2);
3922     +
3923     + WREG32(pb_addr + word_offset, ~mask);
3924     +
3925     pb_addr = (mmTPC2_CFG_CFG_BASE_ADDRESS_HIGH & ~0xFFF) + PROT_BITS_OFFS;
3926     word_offset = ((mmTPC2_CFG_CFG_BASE_ADDRESS_HIGH &
3927     PROT_BITS_OFFS) >> 7) << 2;
3928     @@ -1064,6 +1087,10 @@ static void goya_init_tpc_protection_bits(struct hl_device *hdev)
3929     mask |= 1 << ((mmTPC2_CFG_CFG_SUBTRACT_VALUE & 0x7F) >> 2);
3930     mask |= 1 << ((mmTPC2_CFG_SM_BASE_ADDRESS_LOW & 0x7F) >> 2);
3931     mask |= 1 << ((mmTPC2_CFG_SM_BASE_ADDRESS_HIGH & 0x7F) >> 2);
3932     + mask |= 1 << ((mmTPC2_CFG_TPC_STALL & 0x7F) >> 2);
3933     + mask |= 1 << ((mmTPC2_CFG_MSS_CONFIG & 0x7F) >> 2);
3934     + mask |= 1 << ((mmTPC2_CFG_TPC_INTR_CAUSE & 0x7F) >> 2);
3935     + mask |= 1 << ((mmTPC2_CFG_TPC_INTR_MASK & 0x7F) >> 2);
3936    
3937     WREG32(pb_addr + word_offset, ~mask);
3938    
3939     @@ -1239,6 +1266,16 @@ static void goya_init_tpc_protection_bits(struct hl_device *hdev)
3940     goya_pb_set_block(hdev, mmTPC3_RD_REGULATOR_BASE);
3941     goya_pb_set_block(hdev, mmTPC3_WR_REGULATOR_BASE);
3942    
3943     + pb_addr = (mmTPC3_CFG_SEMAPHORE & ~0xFFF) + PROT_BITS_OFFS;
3944     + word_offset = ((mmTPC3_CFG_SEMAPHORE & PROT_BITS_OFFS) >> 7) << 2;
3945     +
3946     + mask = 1 << ((mmTPC3_CFG_SEMAPHORE & 0x7F) >> 2);
3947     + mask |= 1 << ((mmTPC3_CFG_VFLAGS & 0x7F) >> 2);
3948     + mask |= 1 << ((mmTPC3_CFG_SFLAGS & 0x7F) >> 2);
3949     + mask |= 1 << ((mmTPC3_CFG_STATUS & 0x7F) >> 2);
3950     +
3951     + WREG32(pb_addr + word_offset, ~mask);
3952     +
3953     pb_addr = (mmTPC3_CFG_CFG_BASE_ADDRESS_HIGH & ~0xFFF) + PROT_BITS_OFFS;
3954     word_offset = ((mmTPC3_CFG_CFG_BASE_ADDRESS_HIGH
3955     & PROT_BITS_OFFS) >> 7) << 2;
3956     @@ -1246,6 +1283,10 @@ static void goya_init_tpc_protection_bits(struct hl_device *hdev)
3957     mask |= 1 << ((mmTPC3_CFG_CFG_SUBTRACT_VALUE & 0x7F) >> 2);
3958     mask |= 1 << ((mmTPC3_CFG_SM_BASE_ADDRESS_LOW & 0x7F) >> 2);
3959     mask |= 1 << ((mmTPC3_CFG_SM_BASE_ADDRESS_HIGH & 0x7F) >> 2);
3960     + mask |= 1 << ((mmTPC3_CFG_TPC_STALL & 0x7F) >> 2);
3961     + mask |= 1 << ((mmTPC3_CFG_MSS_CONFIG & 0x7F) >> 2);
3962     + mask |= 1 << ((mmTPC3_CFG_TPC_INTR_CAUSE & 0x7F) >> 2);
3963     + mask |= 1 << ((mmTPC3_CFG_TPC_INTR_MASK & 0x7F) >> 2);
3964    
3965     WREG32(pb_addr + word_offset, ~mask);
3966    
3967     @@ -1421,6 +1462,16 @@ static void goya_init_tpc_protection_bits(struct hl_device *hdev)
3968     goya_pb_set_block(hdev, mmTPC4_RD_REGULATOR_BASE);
3969     goya_pb_set_block(hdev, mmTPC4_WR_REGULATOR_BASE);
3970    
3971     + pb_addr = (mmTPC4_CFG_SEMAPHORE & ~0xFFF) + PROT_BITS_OFFS;
3972     + word_offset = ((mmTPC4_CFG_SEMAPHORE & PROT_BITS_OFFS) >> 7) << 2;
3973     +
3974     + mask = 1 << ((mmTPC4_CFG_SEMAPHORE & 0x7F) >> 2);
3975     + mask |= 1 << ((mmTPC4_CFG_VFLAGS & 0x7F) >> 2);
3976     + mask |= 1 << ((mmTPC4_CFG_SFLAGS & 0x7F) >> 2);
3977     + mask |= 1 << ((mmTPC4_CFG_STATUS & 0x7F) >> 2);
3978     +
3979     + WREG32(pb_addr + word_offset, ~mask);
3980     +
3981     pb_addr = (mmTPC4_CFG_CFG_BASE_ADDRESS_HIGH & ~0xFFF) + PROT_BITS_OFFS;
3982     word_offset = ((mmTPC4_CFG_CFG_BASE_ADDRESS_HIGH &
3983     PROT_BITS_OFFS) >> 7) << 2;
3984     @@ -1428,6 +1479,10 @@ static void goya_init_tpc_protection_bits(struct hl_device *hdev)
3985     mask |= 1 << ((mmTPC4_CFG_CFG_SUBTRACT_VALUE & 0x7F) >> 2);
3986     mask |= 1 << ((mmTPC4_CFG_SM_BASE_ADDRESS_LOW & 0x7F) >> 2);
3987     mask |= 1 << ((mmTPC4_CFG_SM_BASE_ADDRESS_HIGH & 0x7F) >> 2);
3988     + mask |= 1 << ((mmTPC4_CFG_TPC_STALL & 0x7F) >> 2);
3989     + mask |= 1 << ((mmTPC4_CFG_MSS_CONFIG & 0x7F) >> 2);
3990     + mask |= 1 << ((mmTPC4_CFG_TPC_INTR_CAUSE & 0x7F) >> 2);
3991     + mask |= 1 << ((mmTPC4_CFG_TPC_INTR_MASK & 0x7F) >> 2);
3992    
3993     WREG32(pb_addr + word_offset, ~mask);
3994    
3995     @@ -1603,6 +1658,16 @@ static void goya_init_tpc_protection_bits(struct hl_device *hdev)
3996     goya_pb_set_block(hdev, mmTPC5_RD_REGULATOR_BASE);
3997     goya_pb_set_block(hdev, mmTPC5_WR_REGULATOR_BASE);
3998    
3999     + pb_addr = (mmTPC5_CFG_SEMAPHORE & ~0xFFF) + PROT_BITS_OFFS;
4000     + word_offset = ((mmTPC5_CFG_SEMAPHORE & PROT_BITS_OFFS) >> 7) << 2;
4001     +
4002     + mask = 1 << ((mmTPC5_CFG_SEMAPHORE & 0x7F) >> 2);
4003     + mask |= 1 << ((mmTPC5_CFG_VFLAGS & 0x7F) >> 2);
4004     + mask |= 1 << ((mmTPC5_CFG_SFLAGS & 0x7F) >> 2);
4005     + mask |= 1 << ((mmTPC5_CFG_STATUS & 0x7F) >> 2);
4006     +
4007     + WREG32(pb_addr + word_offset, ~mask);
4008     +
4009     pb_addr = (mmTPC5_CFG_CFG_BASE_ADDRESS_HIGH & ~0xFFF) + PROT_BITS_OFFS;
4010     word_offset = ((mmTPC5_CFG_CFG_BASE_ADDRESS_HIGH &
4011     PROT_BITS_OFFS) >> 7) << 2;
4012     @@ -1610,6 +1675,10 @@ static void goya_init_tpc_protection_bits(struct hl_device *hdev)
4013     mask |= 1 << ((mmTPC5_CFG_CFG_SUBTRACT_VALUE & 0x7F) >> 2);
4014     mask |= 1 << ((mmTPC5_CFG_SM_BASE_ADDRESS_LOW & 0x7F) >> 2);
4015     mask |= 1 << ((mmTPC5_CFG_SM_BASE_ADDRESS_HIGH & 0x7F) >> 2);
4016     + mask |= 1 << ((mmTPC5_CFG_TPC_STALL & 0x7F) >> 2);
4017     + mask |= 1 << ((mmTPC5_CFG_MSS_CONFIG & 0x7F) >> 2);
4018     + mask |= 1 << ((mmTPC5_CFG_TPC_INTR_CAUSE & 0x7F) >> 2);
4019     + mask |= 1 << ((mmTPC5_CFG_TPC_INTR_MASK & 0x7F) >> 2);
4020    
4021     WREG32(pb_addr + word_offset, ~mask);
4022    
4023     @@ -1785,6 +1854,16 @@ static void goya_init_tpc_protection_bits(struct hl_device *hdev)
4024     goya_pb_set_block(hdev, mmTPC6_RD_REGULATOR_BASE);
4025     goya_pb_set_block(hdev, mmTPC6_WR_REGULATOR_BASE);
4026    
4027     + pb_addr = (mmTPC6_CFG_SEMAPHORE & ~0xFFF) + PROT_BITS_OFFS;
4028     + word_offset = ((mmTPC6_CFG_SEMAPHORE & PROT_BITS_OFFS) >> 7) << 2;
4029     +
4030     + mask = 1 << ((mmTPC6_CFG_SEMAPHORE & 0x7F) >> 2);
4031     + mask |= 1 << ((mmTPC6_CFG_VFLAGS & 0x7F) >> 2);
4032     + mask |= 1 << ((mmTPC6_CFG_SFLAGS & 0x7F) >> 2);
4033     + mask |= 1 << ((mmTPC6_CFG_STATUS & 0x7F) >> 2);
4034     +
4035     + WREG32(pb_addr + word_offset, ~mask);
4036     +
4037     pb_addr = (mmTPC6_CFG_CFG_BASE_ADDRESS_HIGH & ~0xFFF) + PROT_BITS_OFFS;
4038     word_offset = ((mmTPC6_CFG_CFG_BASE_ADDRESS_HIGH &
4039     PROT_BITS_OFFS) >> 7) << 2;
4040     @@ -1792,6 +1871,10 @@ static void goya_init_tpc_protection_bits(struct hl_device *hdev)
4041     mask |= 1 << ((mmTPC6_CFG_CFG_SUBTRACT_VALUE & 0x7F) >> 2);
4042     mask |= 1 << ((mmTPC6_CFG_SM_BASE_ADDRESS_LOW & 0x7F) >> 2);
4043     mask |= 1 << ((mmTPC6_CFG_SM_BASE_ADDRESS_HIGH & 0x7F) >> 2);
4044     + mask |= 1 << ((mmTPC6_CFG_TPC_STALL & 0x7F) >> 2);
4045     + mask |= 1 << ((mmTPC6_CFG_MSS_CONFIG & 0x7F) >> 2);
4046     + mask |= 1 << ((mmTPC6_CFG_TPC_INTR_CAUSE & 0x7F) >> 2);
4047     + mask |= 1 << ((mmTPC6_CFG_TPC_INTR_MASK & 0x7F) >> 2);
4048    
4049     WREG32(pb_addr + word_offset, ~mask);
4050    
4051     @@ -1967,6 +2050,16 @@ static void goya_init_tpc_protection_bits(struct hl_device *hdev)
4052     goya_pb_set_block(hdev, mmTPC7_RD_REGULATOR_BASE);
4053     goya_pb_set_block(hdev, mmTPC7_WR_REGULATOR_BASE);
4054    
4055     + pb_addr = (mmTPC7_CFG_SEMAPHORE & ~0xFFF) + PROT_BITS_OFFS;
4056     + word_offset = ((mmTPC7_CFG_SEMAPHORE & PROT_BITS_OFFS) >> 7) << 2;
4057     +
4058     + mask = 1 << ((mmTPC7_CFG_SEMAPHORE & 0x7F) >> 2);
4059     + mask |= 1 << ((mmTPC7_CFG_VFLAGS & 0x7F) >> 2);
4060     + mask |= 1 << ((mmTPC7_CFG_SFLAGS & 0x7F) >> 2);
4061     + mask |= 1 << ((mmTPC7_CFG_STATUS & 0x7F) >> 2);
4062     +
4063     + WREG32(pb_addr + word_offset, ~mask);
4064     +
4065     pb_addr = (mmTPC7_CFG_CFG_BASE_ADDRESS_HIGH & ~0xFFF) + PROT_BITS_OFFS;
4066     word_offset = ((mmTPC7_CFG_CFG_BASE_ADDRESS_HIGH &
4067     PROT_BITS_OFFS) >> 7) << 2;
4068     @@ -1974,6 +2067,10 @@ static void goya_init_tpc_protection_bits(struct hl_device *hdev)
4069     mask |= 1 << ((mmTPC7_CFG_CFG_SUBTRACT_VALUE & 0x7F) >> 2);
4070     mask |= 1 << ((mmTPC7_CFG_SM_BASE_ADDRESS_LOW & 0x7F) >> 2);
4071     mask |= 1 << ((mmTPC7_CFG_SM_BASE_ADDRESS_HIGH & 0x7F) >> 2);
4072     + mask |= 1 << ((mmTPC7_CFG_TPC_STALL & 0x7F) >> 2);
4073     + mask |= 1 << ((mmTPC7_CFG_MSS_CONFIG & 0x7F) >> 2);
4074     + mask |= 1 << ((mmTPC7_CFG_TPC_INTR_CAUSE & 0x7F) >> 2);
4075     + mask |= 1 << ((mmTPC7_CFG_TPC_INTR_MASK & 0x7F) >> 2);
4076    
4077     WREG32(pb_addr + word_offset, ~mask);
4078    
4079     diff --git a/drivers/misc/mei/bus.c b/drivers/misc/mei/bus.c
4080     index 53bb394ccba6..cef97a7eb8b6 100644
4081     --- a/drivers/misc/mei/bus.c
4082     +++ b/drivers/misc/mei/bus.c
4083     @@ -745,9 +745,8 @@ static int mei_cl_device_remove(struct device *dev)
4084    
4085     mei_cl_bus_module_put(cldev);
4086     module_put(THIS_MODULE);
4087     - dev->driver = NULL;
4088     - return ret;
4089    
4090     + return ret;
4091     }
4092    
4093     static ssize_t name_show(struct device *dev, struct device_attribute *a,
4094     diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
4095     index c37e70dbe250..7e4bc9124efd 100644
4096     --- a/drivers/mmc/host/mmci.c
4097     +++ b/drivers/mmc/host/mmci.c
4098     @@ -168,6 +168,8 @@ static struct variant_data variant_ux500 = {
4099     .cmdreg_srsp = MCI_CPSM_RESPONSE,
4100     .datalength_bits = 24,
4101     .datactrl_blocksz = 11,
4102     + .datactrl_any_blocksz = true,
4103     + .dma_power_of_2 = true,
4104     .datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN,
4105     .st_sdio = true,
4106     .st_clkdiv = true,
4107     @@ -201,6 +203,8 @@ static struct variant_data variant_ux500v2 = {
4108     .datactrl_mask_ddrmode = MCI_DPSM_ST_DDRMODE,
4109     .datalength_bits = 24,
4110     .datactrl_blocksz = 11,
4111     + .datactrl_any_blocksz = true,
4112     + .dma_power_of_2 = true,
4113     .datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN,
4114     .st_sdio = true,
4115     .st_clkdiv = true,
4116     @@ -260,6 +264,7 @@ static struct variant_data variant_stm32_sdmmc = {
4117     .datacnt_useless = true,
4118     .datalength_bits = 25,
4119     .datactrl_blocksz = 14,
4120     + .datactrl_any_blocksz = true,
4121     .stm32_idmabsize_mask = GENMASK(12, 5),
4122     .init = sdmmc_variant_init,
4123     };
4124     @@ -279,6 +284,7 @@ static struct variant_data variant_qcom = {
4125     .data_cmd_enable = MCI_CPSM_QCOM_DATCMD,
4126     .datalength_bits = 24,
4127     .datactrl_blocksz = 11,
4128     + .datactrl_any_blocksz = true,
4129     .pwrreg_powerup = MCI_PWR_UP,
4130     .f_max = 208000000,
4131     .explicit_mclk_control = true,
4132     @@ -447,10 +453,11 @@ void mmci_dma_setup(struct mmci_host *host)
4133     static int mmci_validate_data(struct mmci_host *host,
4134     struct mmc_data *data)
4135     {
4136     + struct variant_data *variant = host->variant;
4137     +
4138     if (!data)
4139     return 0;
4140     -
4141     - if (!is_power_of_2(data->blksz)) {
4142     + if (!is_power_of_2(data->blksz) && !variant->datactrl_any_blocksz) {
4143     dev_err(mmc_dev(host->mmc),
4144     "unsupported block size (%d bytes)\n", data->blksz);
4145     return -EINVAL;
4146     @@ -515,7 +522,9 @@ int mmci_dma_start(struct mmci_host *host, unsigned int datactrl)
4147     "Submit MMCI DMA job, sglen %d blksz %04x blks %04x flags %08x\n",
4148     data->sg_len, data->blksz, data->blocks, data->flags);
4149    
4150     - host->ops->dma_start(host, &datactrl);
4151     + ret = host->ops->dma_start(host, &datactrl);
4152     + if (ret)
4153     + return ret;
4154    
4155     /* Trigger the DMA transfer */
4156     mmci_write_datactrlreg(host, datactrl);
4157     @@ -822,6 +831,18 @@ static int _mmci_dmae_prep_data(struct mmci_host *host, struct mmc_data *data,
4158     if (data->blksz * data->blocks <= variant->fifosize)
4159     return -EINVAL;
4160    
4161     + /*
4162     + * This is necessary to get SDIO working on the Ux500. We do not yet
4163     + * know if this is a bug in:
4164     + * - The Ux500 DMA controller (DMA40)
4165     + * - The MMCI DMA interface on the Ux500
4166     + * some power of two blocks (such as 64 bytes) are sent regularly
4167     + * during SDIO traffic and those work fine so for these we enable DMA
4168     + * transfers.
4169     + */
4170     + if (host->variant->dma_power_of_2 && !is_power_of_2(data->blksz))
4171     + return -EINVAL;
4172     +
4173     device = chan->device;
4174     nr_sg = dma_map_sg(device->dev, data->sg, data->sg_len,
4175     mmc_get_dma_dir(data));
4176     @@ -872,9 +893,14 @@ int mmci_dmae_prep_data(struct mmci_host *host,
4177     int mmci_dmae_start(struct mmci_host *host, unsigned int *datactrl)
4178     {
4179     struct mmci_dmae_priv *dmae = host->dma_priv;
4180     + int ret;
4181    
4182     host->dma_in_progress = true;
4183     - dmaengine_submit(dmae->desc_current);
4184     + ret = dma_submit_error(dmaengine_submit(dmae->desc_current));
4185     + if (ret < 0) {
4186     + host->dma_in_progress = false;
4187     + return ret;
4188     + }
4189     dma_async_issue_pending(dmae->cur);
4190    
4191     *datactrl |= MCI_DPSM_DMAENABLE;
4192     diff --git a/drivers/mmc/host/mmci.h b/drivers/mmc/host/mmci.h
4193     index 833236ecb31e..89ab73343cf3 100644
4194     --- a/drivers/mmc/host/mmci.h
4195     +++ b/drivers/mmc/host/mmci.h
4196     @@ -278,7 +278,11 @@ struct mmci_host;
4197     * @stm32_clkdiv: true if using a STM32-specific clock divider algorithm
4198     * @datactrl_mask_ddrmode: ddr mode mask in datactrl register.
4199     * @datactrl_mask_sdio: SDIO enable mask in datactrl register
4200     - * @datactrl_blksz: block size in power of two
4201     + * @datactrl_blocksz: block size in power of two
4202     + * @datactrl_any_blocksz: true if block any block sizes are accepted by
4203     + * hardware, such as with some SDIO traffic that send
4204     + * odd packets.
4205     + * @dma_power_of_2: DMA only works with blocks that are a power of 2.
4206     * @datactrl_first: true if data must be setup before send command
4207     * @datacnt_useless: true if you could not use datacnt register to read
4208     * remaining data
4209     @@ -323,6 +327,8 @@ struct variant_data {
4210     unsigned int datactrl_mask_ddrmode;
4211     unsigned int datactrl_mask_sdio;
4212     unsigned int datactrl_blocksz;
4213     + u8 datactrl_any_blocksz:1;
4214     + u8 dma_power_of_2:1;
4215     u8 datactrl_first:1;
4216     u8 datacnt_useless:1;
4217     u8 st_sdio:1;
4218     diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
4219     index 50514fedbc76..136f9737713d 100644
4220     --- a/drivers/mmc/host/sdhci.c
4221     +++ b/drivers/mmc/host/sdhci.c
4222     @@ -152,7 +152,7 @@ static void sdhci_set_card_detection(struct sdhci_host *host, bool enable)
4223     u32 present;
4224    
4225     if ((host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) ||
4226     - !mmc_card_is_removable(host->mmc))
4227     + !mmc_card_is_removable(host->mmc) || mmc_can_gpio_cd(host->mmc))
4228     return;
4229    
4230     if (enable) {
4231     diff --git a/drivers/mtd/nand/raw/brcmnand/brcmnand.c b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
4232     index 4fef20724175..e9ad8bb82f44 100644
4233     --- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
4234     +++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
4235     @@ -537,8 +537,9 @@ static int brcmnand_revision_init(struct brcmnand_controller *ctrl)
4236     } else {
4237     ctrl->cs_offsets = brcmnand_cs_offsets;
4238    
4239     - /* v5.0 and earlier has a different CS0 offset layout */
4240     - if (ctrl->nand_version <= 0x0500)
4241     + /* v3.3-5.0 have a different CS0 offset layout */
4242     + if (ctrl->nand_version >= 0x0303 &&
4243     + ctrl->nand_version <= 0x0500)
4244     ctrl->cs0_offsets = brcmnand_cs_offsets_cs0;
4245     }
4246    
4247     @@ -1790,28 +1791,31 @@ static int brcmnand_read_by_pio(struct mtd_info *mtd, struct nand_chip *chip,
4248     static int brcmstb_nand_verify_erased_page(struct mtd_info *mtd,
4249     struct nand_chip *chip, void *buf, u64 addr)
4250     {
4251     - int i, sas;
4252     - void *oob = chip->oob_poi;
4253     + struct mtd_oob_region ecc;
4254     + int i;
4255     int bitflips = 0;
4256     int page = addr >> chip->page_shift;
4257     int ret;
4258     + void *ecc_bytes;
4259     void *ecc_chunk;
4260    
4261     if (!buf)
4262     buf = nand_get_data_buf(chip);
4263    
4264     - sas = mtd->oobsize / chip->ecc.steps;
4265     -
4266     /* read without ecc for verification */
4267     ret = chip->ecc.read_page_raw(chip, buf, true, page);
4268     if (ret)
4269     return ret;
4270    
4271     - for (i = 0; i < chip->ecc.steps; i++, oob += sas) {
4272     + for (i = 0; i < chip->ecc.steps; i++) {
4273     ecc_chunk = buf + chip->ecc.size * i;
4274     - ret = nand_check_erased_ecc_chunk(ecc_chunk,
4275     - chip->ecc.size,
4276     - oob, sas, NULL, 0,
4277     +
4278     + mtd_ooblayout_ecc(mtd, i, &ecc);
4279     + ecc_bytes = chip->oob_poi + ecc.offset;
4280     +
4281     + ret = nand_check_erased_ecc_chunk(ecc_chunk, chip->ecc.size,
4282     + ecc_bytes, ecc.length,
4283     + NULL, 0,
4284     chip->ecc.strength);
4285     if (ret < 0)
4286     return ret;
4287     diff --git a/drivers/mtd/nand/raw/marvell_nand.c b/drivers/mtd/nand/raw/marvell_nand.c
4288     index fc49e13d81ec..ee4afa17d8a3 100644
4289     --- a/drivers/mtd/nand/raw/marvell_nand.c
4290     +++ b/drivers/mtd/nand/raw/marvell_nand.c
4291     @@ -707,7 +707,7 @@ static int marvell_nfc_wait_op(struct nand_chip *chip, unsigned int timeout_ms)
4292     * In case the interrupt was not served in the required time frame,
4293     * check if the ISR was not served or if something went actually wrong.
4294     */
4295     - if (ret && !pending) {
4296     + if (!ret && !pending) {
4297     dev_err(nfc->dev, "Timeout waiting for RB signal\n");
4298     return -ETIMEDOUT;
4299     }
4300     @@ -2664,7 +2664,7 @@ static int marvell_nand_chip_init(struct device *dev, struct marvell_nfc *nfc,
4301     ret = mtd_device_register(mtd, NULL, 0);
4302     if (ret) {
4303     dev_err(dev, "failed to register mtd device: %d\n", ret);
4304     - nand_release(chip);
4305     + nand_cleanup(chip);
4306     return ret;
4307     }
4308    
4309     @@ -2673,6 +2673,16 @@ static int marvell_nand_chip_init(struct device *dev, struct marvell_nfc *nfc,
4310     return 0;
4311     }
4312    
4313     +static void marvell_nand_chips_cleanup(struct marvell_nfc *nfc)
4314     +{
4315     + struct marvell_nand_chip *entry, *temp;
4316     +
4317     + list_for_each_entry_safe(entry, temp, &nfc->chips, node) {
4318     + nand_release(&entry->chip);
4319     + list_del(&entry->node);
4320     + }
4321     +}
4322     +
4323     static int marvell_nand_chips_init(struct device *dev, struct marvell_nfc *nfc)
4324     {
4325     struct device_node *np = dev->of_node;
4326     @@ -2707,21 +2717,16 @@ static int marvell_nand_chips_init(struct device *dev, struct marvell_nfc *nfc)
4327     ret = marvell_nand_chip_init(dev, nfc, nand_np);
4328     if (ret) {
4329     of_node_put(nand_np);
4330     - return ret;
4331     + goto cleanup_chips;
4332     }
4333     }
4334    
4335     return 0;
4336     -}
4337    
4338     -static void marvell_nand_chips_cleanup(struct marvell_nfc *nfc)
4339     -{
4340     - struct marvell_nand_chip *entry, *temp;
4341     +cleanup_chips:
4342     + marvell_nand_chips_cleanup(nfc);
4343    
4344     - list_for_each_entry_safe(entry, temp, &nfc->chips, node) {
4345     - nand_release(&entry->chip);
4346     - list_del(&entry->node);
4347     - }
4348     + return ret;
4349     }
4350    
4351     static int marvell_nfc_init_dma(struct marvell_nfc *nfc)
4352     diff --git a/drivers/mtd/nand/raw/nand_timings.c b/drivers/mtd/nand/raw/nand_timings.c
4353     index f64b06a71dfa..f12b7a7844c9 100644
4354     --- a/drivers/mtd/nand/raw/nand_timings.c
4355     +++ b/drivers/mtd/nand/raw/nand_timings.c
4356     @@ -314,10 +314,9 @@ int onfi_fill_data_interface(struct nand_chip *chip,
4357     /* microseconds -> picoseconds */
4358     timings->tPROG_max = 1000000ULL * ONFI_DYN_TIMING_MAX;
4359     timings->tBERS_max = 1000000ULL * ONFI_DYN_TIMING_MAX;
4360     - timings->tR_max = 1000000ULL * 200000000ULL;
4361    
4362     - /* nanoseconds -> picoseconds */
4363     - timings->tCCS_min = 1000UL * 500000;
4364     + timings->tR_max = 200000000;
4365     + timings->tCCS_min = 500000;
4366     }
4367    
4368     return 0;
4369     diff --git a/drivers/mtd/nand/raw/oxnas_nand.c b/drivers/mtd/nand/raw/oxnas_nand.c
4370     index 0429d218fd9f..23c222b6c40e 100644
4371     --- a/drivers/mtd/nand/raw/oxnas_nand.c
4372     +++ b/drivers/mtd/nand/raw/oxnas_nand.c
4373     @@ -32,6 +32,7 @@ struct oxnas_nand_ctrl {
4374     void __iomem *io_base;
4375     struct clk *clk;
4376     struct nand_chip *chips[OXNAS_NAND_MAX_CHIPS];
4377     + unsigned int nchips;
4378     };
4379    
4380     static uint8_t oxnas_nand_read_byte(struct nand_chip *chip)
4381     @@ -79,9 +80,9 @@ static int oxnas_nand_probe(struct platform_device *pdev)
4382     struct nand_chip *chip;
4383     struct mtd_info *mtd;
4384     struct resource *res;
4385     - int nchips = 0;
4386     int count = 0;
4387     int err = 0;
4388     + int i;
4389    
4390     /* Allocate memory for the device structure (and zero it) */
4391     oxnas = devm_kzalloc(&pdev->dev, sizeof(*oxnas),
4392     @@ -143,12 +144,12 @@ static int oxnas_nand_probe(struct platform_device *pdev)
4393     if (err)
4394     goto err_cleanup_nand;
4395    
4396     - oxnas->chips[nchips] = chip;
4397     - ++nchips;
4398     + oxnas->chips[oxnas->nchips] = chip;
4399     + ++oxnas->nchips;
4400     }
4401    
4402     /* Exit if no chips found */
4403     - if (!nchips) {
4404     + if (!oxnas->nchips) {
4405     err = -ENODEV;
4406     goto err_clk_unprepare;
4407     }
4408     @@ -161,6 +162,13 @@ err_cleanup_nand:
4409     nand_cleanup(chip);
4410     err_release_child:
4411     of_node_put(nand_np);
4412     +
4413     + for (i = 0; i < oxnas->nchips; i++) {
4414     + chip = oxnas->chips[i];
4415     + WARN_ON(mtd_device_unregister(nand_to_mtd(chip)));
4416     + nand_cleanup(chip);
4417     + }
4418     +
4419     err_clk_unprepare:
4420     clk_disable_unprepare(oxnas->clk);
4421     return err;
4422     @@ -169,9 +177,13 @@ err_clk_unprepare:
4423     static int oxnas_nand_remove(struct platform_device *pdev)
4424     {
4425     struct oxnas_nand_ctrl *oxnas = platform_get_drvdata(pdev);
4426     + struct nand_chip *chip;
4427     + int i;
4428    
4429     - if (oxnas->chips[0])
4430     - nand_release(oxnas->chips[0]);
4431     + for (i = 0; i < oxnas->nchips; i++) {
4432     + chip = oxnas->chips[i];
4433     + nand_release(chip);
4434     + }
4435    
4436     clk_disable_unprepare(oxnas->clk);
4437    
4438     diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c
4439     index 9502db66092e..b16aea0e3999 100644
4440     --- a/drivers/net/dsa/bcm_sf2.c
4441     +++ b/drivers/net/dsa/bcm_sf2.c
4442     @@ -1116,6 +1116,8 @@ static int bcm_sf2_sw_probe(struct platform_device *pdev)
4443     set_bit(0, priv->cfp.used);
4444     set_bit(0, priv->cfp.unique);
4445    
4446     + /* Balance of_node_put() done by of_find_node_by_name() */
4447     + of_node_get(dn);
4448     ports = of_find_node_by_name(dn, "ports");
4449     if (ports) {
4450     bcm_sf2_identify_ports(priv, ports);
4451     diff --git a/drivers/net/dsa/microchip/ksz8795.c b/drivers/net/dsa/microchip/ksz8795.c
4452     index 84c4319e3b31..8d50aacd19e5 100644
4453     --- a/drivers/net/dsa/microchip/ksz8795.c
4454     +++ b/drivers/net/dsa/microchip/ksz8795.c
4455     @@ -1270,6 +1270,9 @@ static int ksz8795_switch_init(struct ksz_device *dev)
4456     /* set the real number of ports */
4457     dev->ds->num_ports = dev->port_cnt;
4458    
4459     + /* set the real number of ports */
4460     + dev->ds->num_ports = dev->port_cnt;
4461     +
4462     return 0;
4463     }
4464    
4465     diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchip/ksz9477.c
4466     index 3afb596d8e43..f600874e2476 100644
4467     --- a/drivers/net/dsa/microchip/ksz9477.c
4468     +++ b/drivers/net/dsa/microchip/ksz9477.c
4469     @@ -515,6 +515,9 @@ static int ksz9477_port_vlan_filtering(struct dsa_switch *ds, int port,
4470     PORT_VLAN_LOOKUP_VID_0, false);
4471     }
4472    
4473     + /* set the real number of ports */
4474     + dev->ds->num_ports = dev->port_cnt;
4475     +
4476     return 0;
4477     }
4478    
4479     diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c
4480     index 6f340695e6bd..774e48b3f904 100644
4481     --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c
4482     +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c
4483     @@ -1597,7 +1597,7 @@ void hw_atl_rpfl3l4_ipv6_src_addr_set(struct aq_hw_s *aq_hw, u8 location,
4484     for (i = 0; i < 4; ++i)
4485     aq_hw_write_reg(aq_hw,
4486     HW_ATL_RPF_L3_SRCA_ADR(location + i),
4487     - ipv6_src[i]);
4488     + ipv6_src[3 - i]);
4489     }
4490    
4491     void hw_atl_rpfl3l4_ipv6_dest_addr_set(struct aq_hw_s *aq_hw, u8 location,
4492     @@ -1608,7 +1608,7 @@ void hw_atl_rpfl3l4_ipv6_dest_addr_set(struct aq_hw_s *aq_hw, u8 location,
4493     for (i = 0; i < 4; ++i)
4494     aq_hw_write_reg(aq_hw,
4495     HW_ATL_RPF_L3_DSTA_ADR(location + i),
4496     - ipv6_dest[i]);
4497     + ipv6_dest[3 - i]);
4498     }
4499    
4500     u32 hw_atl_sem_ram_get(struct aq_hw_s *self)
4501     diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h
4502     index 35887ad89025..dd8d591404be 100644
4503     --- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h
4504     +++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h
4505     @@ -2564,7 +2564,7 @@
4506     */
4507    
4508     /* Register address for bitfield pif_rpf_l3_da0_i[31:0] */
4509     -#define HW_ATL_RPF_L3_DSTA_ADR(location) (0x000053B0 + (location) * 0x4)
4510     +#define HW_ATL_RPF_L3_DSTA_ADR(filter) (0x000053D0 + (filter) * 0x4)
4511     /* Bitmask for bitfield l3_da0[1F:0] */
4512     #define HW_ATL_RPF_L3_DSTA_MSK 0xFFFFFFFFu
4513     /* Inverted bitmask for bitfield l3_da0[1F:0] */
4514     diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
4515     index 01ed4d4296db..a5c4d4d66df3 100644
4516     --- a/drivers/net/ethernet/cadence/macb_main.c
4517     +++ b/drivers/net/ethernet/cadence/macb_main.c
4518     @@ -3708,7 +3708,7 @@ static int at91ether_open(struct net_device *dev)
4519    
4520     ret = at91ether_start(dev);
4521     if (ret)
4522     - return ret;
4523     + goto pm_exit;
4524    
4525     /* Enable MAC interrupts */
4526     macb_writel(lp, IER, MACB_BIT(RCOMP) |
4527     @@ -3725,6 +3725,10 @@ static int at91ether_open(struct net_device *dev)
4528     netif_start_queue(dev);
4529    
4530     return 0;
4531     +
4532     +pm_exit:
4533     + pm_runtime_put_sync(&lp->pdev->dev);
4534     + return ret;
4535     }
4536    
4537     /* Close the interface */
4538     diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
4539     index ffdb7b113f17..ccb2abd18d6c 100644
4540     --- a/drivers/net/ethernet/marvell/mvneta.c
4541     +++ b/drivers/net/ethernet/marvell/mvneta.c
4542     @@ -3206,7 +3206,7 @@ static int mvneta_config_interface(struct mvneta_port *pp,
4543     MVNETA_HSGMII_SERDES_PROTO);
4544     break;
4545     default:
4546     - return -EINVAL;
4547     + break;
4548     }
4549     }
4550    
4551     @@ -4496,10 +4496,18 @@ static void mvneta_conf_mbus_windows(struct mvneta_port *pp,
4552     }
4553    
4554     /* Power up the port */
4555     -static void mvneta_port_power_up(struct mvneta_port *pp, int phy_mode)
4556     +static int mvneta_port_power_up(struct mvneta_port *pp, int phy_mode)
4557     {
4558     /* MAC Cause register should be cleared */
4559     mvreg_write(pp, MVNETA_UNIT_INTR_CAUSE, 0);
4560     +
4561     + if (phy_mode != PHY_INTERFACE_MODE_QSGMII &&
4562     + phy_mode != PHY_INTERFACE_MODE_SGMII &&
4563     + !phy_interface_mode_is_8023z(phy_mode) &&
4564     + !phy_interface_mode_is_rgmii(phy_mode))
4565     + return -EINVAL;
4566     +
4567     + return 0;
4568     }
4569    
4570     /* Device initialization routine */
4571     @@ -4683,7 +4691,11 @@ static int mvneta_probe(struct platform_device *pdev)
4572     if (err < 0)
4573     goto err_netdev;
4574    
4575     - mvneta_port_power_up(pp, phy_mode);
4576     + err = mvneta_port_power_up(pp, pp->phy_interface);
4577     + if (err < 0) {
4578     + dev_err(&pdev->dev, "can't power up port\n");
4579     + return err;
4580     + }
4581    
4582     /* Armada3700 network controller does not support per-cpu
4583     * operation, so only single NAPI should be initialized.
4584     @@ -4836,7 +4848,11 @@ static int mvneta_resume(struct device *device)
4585     }
4586     }
4587     mvneta_defaults_set(pp);
4588     - mvneta_port_power_up(pp, pp->phy_interface);
4589     + err = mvneta_port_power_up(pp, pp->phy_interface);
4590     + if (err < 0) {
4591     + dev_err(device, "can't power up port\n");
4592     + return err;
4593     + }
4594    
4595     netif_device_attach(dev);
4596    
4597     diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
4598     index 134640412d7b..d5b0bf54f961 100644
4599     --- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
4600     +++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
4601     @@ -1187,6 +1187,7 @@ static int ionic_init_nic_features(struct ionic_lif *lif)
4602    
4603     netdev->hw_features |= netdev->hw_enc_features;
4604     netdev->features |= netdev->hw_features;
4605     + netdev->vlan_features |= netdev->features & ~NETIF_F_VLAN_FEATURES;
4606    
4607     netdev->priv_flags |= IFF_UNICAST_FLT;
4608    
4609     diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c
4610     index 02cdbb22d335..18d88b424828 100644
4611     --- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c
4612     +++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c
4613     @@ -47,15 +47,23 @@ static int rmnet_unregister_real_device(struct net_device *real_dev)
4614     return 0;
4615     }
4616    
4617     -static int rmnet_register_real_device(struct net_device *real_dev)
4618     +static int rmnet_register_real_device(struct net_device *real_dev,
4619     + struct netlink_ext_ack *extack)
4620     {
4621     struct rmnet_port *port;
4622     int rc, entry;
4623    
4624     ASSERT_RTNL();
4625    
4626     - if (rmnet_is_real_dev_registered(real_dev))
4627     + if (rmnet_is_real_dev_registered(real_dev)) {
4628     + port = rmnet_get_port_rtnl(real_dev);
4629     + if (port->rmnet_mode != RMNET_EPMODE_VND) {
4630     + NL_SET_ERR_MSG_MOD(extack, "bridge device already exists");
4631     + return -EINVAL;
4632     + }
4633     +
4634     return 0;
4635     + }
4636    
4637     port = kzalloc(sizeof(*port), GFP_ATOMIC);
4638     if (!port)
4639     @@ -134,7 +142,7 @@ static int rmnet_newlink(struct net *src_net, struct net_device *dev,
4640    
4641     mux_id = nla_get_u16(data[IFLA_RMNET_MUX_ID]);
4642    
4643     - err = rmnet_register_real_device(real_dev);
4644     + err = rmnet_register_real_device(real_dev, extack);
4645     if (err)
4646     goto err0;
4647    
4648     @@ -416,13 +424,10 @@ int rmnet_add_bridge(struct net_device *rmnet_dev,
4649     if (port->nr_rmnet_devs > 1)
4650     return -EINVAL;
4651    
4652     - if (port->rmnet_mode != RMNET_EPMODE_VND)
4653     - return -EINVAL;
4654     -
4655     if (rmnet_is_real_dev_registered(slave_dev))
4656     return -EBUSY;
4657    
4658     - err = rmnet_register_real_device(slave_dev);
4659     + err = rmnet_register_real_device(slave_dev, extack);
4660     if (err)
4661     return -EBUSY;
4662    
4663     diff --git a/drivers/net/phy/sfp-bus.c b/drivers/net/phy/sfp-bus.c
4664     index b23fc41896ef..816e59fe68f5 100644
4665     --- a/drivers/net/phy/sfp-bus.c
4666     +++ b/drivers/net/phy/sfp-bus.c
4667     @@ -9,6 +9,12 @@
4668    
4669     #include "sfp.h"
4670    
4671     +struct sfp_quirk {
4672     + const char *vendor;
4673     + const char *part;
4674     + void (*modes)(const struct sfp_eeprom_id *id, unsigned long *modes);
4675     +};
4676     +
4677     /**
4678     * struct sfp_bus - internal representation of a sfp bus
4679     */
4680     @@ -21,6 +27,7 @@ struct sfp_bus {
4681     const struct sfp_socket_ops *socket_ops;
4682     struct device *sfp_dev;
4683     struct sfp *sfp;
4684     + const struct sfp_quirk *sfp_quirk;
4685    
4686     const struct sfp_upstream_ops *upstream_ops;
4687     void *upstream;
4688     @@ -30,6 +37,71 @@ struct sfp_bus {
4689     bool started;
4690     };
4691    
4692     +static void sfp_quirk_2500basex(const struct sfp_eeprom_id *id,
4693     + unsigned long *modes)
4694     +{
4695     + phylink_set(modes, 2500baseX_Full);
4696     +}
4697     +
4698     +static const struct sfp_quirk sfp_quirks[] = {
4699     + {
4700     + // Alcatel Lucent G-010S-P can operate at 2500base-X, but
4701     + // incorrectly report 2500MBd NRZ in their EEPROM
4702     + .vendor = "ALCATELLUCENT",
4703     + .part = "G010SP",
4704     + .modes = sfp_quirk_2500basex,
4705     + }, {
4706     + // Alcatel Lucent G-010S-A can operate at 2500base-X, but
4707     + // report 3.2GBd NRZ in their EEPROM
4708     + .vendor = "ALCATELLUCENT",
4709     + .part = "3FE46541AA",
4710     + .modes = sfp_quirk_2500basex,
4711     + }, {
4712     + // Huawei MA5671A can operate at 2500base-X, but report 1.2GBd
4713     + // NRZ in their EEPROM
4714     + .vendor = "HUAWEI",
4715     + .part = "MA5671A",
4716     + .modes = sfp_quirk_2500basex,
4717     + },
4718     +};
4719     +
4720     +static size_t sfp_strlen(const char *str, size_t maxlen)
4721     +{
4722     + size_t size, i;
4723     +
4724     + /* Trailing characters should be filled with space chars */
4725     + for (i = 0, size = 0; i < maxlen; i++)
4726     + if (str[i] != ' ')
4727     + size = i + 1;
4728     +
4729     + return size;
4730     +}
4731     +
4732     +static bool sfp_match(const char *qs, const char *str, size_t len)
4733     +{
4734     + if (!qs)
4735     + return true;
4736     + if (strlen(qs) != len)
4737     + return false;
4738     + return !strncmp(qs, str, len);
4739     +}
4740     +
4741     +static const struct sfp_quirk *sfp_lookup_quirk(const struct sfp_eeprom_id *id)
4742     +{
4743     + const struct sfp_quirk *q;
4744     + unsigned int i;
4745     + size_t vs, ps;
4746     +
4747     + vs = sfp_strlen(id->base.vendor_name, ARRAY_SIZE(id->base.vendor_name));
4748     + ps = sfp_strlen(id->base.vendor_pn, ARRAY_SIZE(id->base.vendor_pn));
4749     +
4750     + for (i = 0, q = sfp_quirks; i < ARRAY_SIZE(sfp_quirks); i++, q++)
4751     + if (sfp_match(q->vendor, id->base.vendor_name, vs) &&
4752     + sfp_match(q->part, id->base.vendor_pn, ps))
4753     + return q;
4754     +
4755     + return NULL;
4756     +}
4757     /**
4758     * sfp_parse_port() - Parse the EEPROM base ID, setting the port type
4759     * @bus: a pointer to the &struct sfp_bus structure for the sfp module
4760     @@ -233,6 +305,9 @@ void sfp_parse_support(struct sfp_bus *bus, const struct sfp_eeprom_id *id,
4761     phylink_set(modes, 1000baseX_Full);
4762     }
4763    
4764     + if (bus->sfp_quirk)
4765     + bus->sfp_quirk->modes(id, modes);
4766     +
4767     bitmap_or(support, support, modes, __ETHTOOL_LINK_MODE_MASK_NBITS);
4768    
4769     phylink_set(support, Autoneg);
4770     @@ -553,6 +628,8 @@ int sfp_module_insert(struct sfp_bus *bus, const struct sfp_eeprom_id *id)
4771     const struct sfp_upstream_ops *ops = sfp_get_upstream_ops(bus);
4772     int ret = 0;
4773    
4774     + bus->sfp_quirk = sfp_lookup_quirk(id);
4775     +
4776     if (ops && ops->module_insert)
4777     ret = ops->module_insert(bus->upstream, id);
4778    
4779     @@ -566,6 +643,8 @@ void sfp_module_remove(struct sfp_bus *bus)
4780    
4781     if (ops && ops->module_remove)
4782     ops->module_remove(bus->upstream);
4783     +
4784     + bus->sfp_quirk = NULL;
4785     }
4786     EXPORT_SYMBOL_GPL(sfp_module_remove);
4787    
4788     diff --git a/drivers/net/usb/qmi_wwan.c b/drivers/net/usb/qmi_wwan.c
4789     index 4a2c7355be63..e57d59b0a7ae 100644
4790     --- a/drivers/net/usb/qmi_wwan.c
4791     +++ b/drivers/net/usb/qmi_wwan.c
4792     @@ -1370,6 +1370,7 @@ static const struct usb_device_id products[] = {
4793     {QMI_QUIRK_SET_DTR(0x1e0e, 0x9001, 5)}, /* SIMCom 7100E, 7230E, 7600E ++ */
4794     {QMI_QUIRK_SET_DTR(0x2c7c, 0x0121, 4)}, /* Quectel EC21 Mini PCIe */
4795     {QMI_QUIRK_SET_DTR(0x2c7c, 0x0191, 4)}, /* Quectel EG91 */
4796     + {QMI_QUIRK_SET_DTR(0x2c7c, 0x0195, 4)}, /* Quectel EG95 */
4797     {QMI_FIXED_INTF(0x2c7c, 0x0296, 4)}, /* Quectel BG96 */
4798     {QMI_QUIRK_SET_DTR(0x2cb7, 0x0104, 4)}, /* Fibocom NL678 series */
4799     {QMI_FIXED_INTF(0x0489, 0xe0b4, 0)}, /* Foxconn T77W968 LTE */
4800     diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c
4801     index c34a6df712ad..26ddb4cc675a 100644
4802     --- a/drivers/of/of_mdio.c
4803     +++ b/drivers/of/of_mdio.c
4804     @@ -265,10 +265,15 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
4805     child, addr);
4806    
4807     if (of_mdiobus_child_is_phy(child)) {
4808     + /* -ENODEV is the return code that PHYLIB has
4809     + * standardized on to indicate that bus
4810     + * scanning should continue.
4811     + */
4812     rc = of_mdiobus_register_phy(mdio, child, addr);
4813     - if (rc && rc != -ENODEV)
4814     + if (!rc)
4815     + break;
4816     + if (rc != -ENODEV)
4817     goto unregister;
4818     - break;
4819     }
4820     }
4821     }
4822     diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
4823     index 689f0280c038..08f7b1ed8c62 100644
4824     --- a/drivers/pci/pci.c
4825     +++ b/drivers/pci/pci.c
4826     @@ -802,7 +802,9 @@ static inline bool platform_pci_need_resume(struct pci_dev *dev)
4827    
4828     static inline bool platform_pci_bridge_d3(struct pci_dev *dev)
4829     {
4830     - return pci_platform_pm ? pci_platform_pm->bridge_d3(dev) : false;
4831     + if (pci_platform_pm && pci_platform_pm->bridge_d3)
4832     + return pci_platform_pm->bridge_d3(dev);
4833     + return false;
4834     }
4835    
4836     /**
4837     diff --git a/drivers/phy/allwinner/phy-sun4i-usb.c b/drivers/phy/allwinner/phy-sun4i-usb.c
4838     index 856927382248..e5842e48a5e0 100644
4839     --- a/drivers/phy/allwinner/phy-sun4i-usb.c
4840     +++ b/drivers/phy/allwinner/phy-sun4i-usb.c
4841     @@ -545,13 +545,14 @@ static void sun4i_usb_phy0_id_vbus_det_scan(struct work_struct *work)
4842     struct sun4i_usb_phy_data *data =
4843     container_of(work, struct sun4i_usb_phy_data, detect.work);
4844     struct phy *phy0 = data->phys[0].phy;
4845     - struct sun4i_usb_phy *phy = phy_get_drvdata(phy0);
4846     + struct sun4i_usb_phy *phy;
4847     bool force_session_end, id_notify = false, vbus_notify = false;
4848     int id_det, vbus_det;
4849    
4850     - if (phy0 == NULL)
4851     + if (!phy0)
4852     return;
4853    
4854     + phy = phy_get_drvdata(phy0);
4855     id_det = sun4i_usb_phy0_get_id_det(data);
4856     vbus_det = sun4i_usb_phy0_get_vbus_det(data);
4857    
4858     diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
4859     index 90cf4691b8c3..9ea30fcb4428 100644
4860     --- a/drivers/scsi/Kconfig
4861     +++ b/drivers/scsi/Kconfig
4862     @@ -114,15 +114,6 @@ config BLK_DEV_SR
4863     <file:Documentation/scsi/scsi.txt>.
4864     The module will be called sr_mod.
4865    
4866     -config BLK_DEV_SR_VENDOR
4867     - bool "Enable vendor-specific extensions (for SCSI CDROM)"
4868     - depends on BLK_DEV_SR
4869     - help
4870     - This enables the usage of vendor specific SCSI commands. This is
4871     - required to support multisession CDs with old NEC/TOSHIBA cdrom
4872     - drives (and HP Writers). If you have such a drive and get the first
4873     - session only, try saying Y here; everybody else says N.
4874     -
4875     config CHR_DEV_SG
4876     tristate "SCSI generic support"
4877     depends on SCSI
4878     diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
4879     index 3d48024082ba..5bcef9769740 100644
4880     --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
4881     +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
4882     @@ -3787,10 +3787,8 @@ static irqreturn_t megasas_isr_fusion(int irq, void *devp)
4883     if (instance->mask_interrupts)
4884     return IRQ_NONE;
4885    
4886     -#if defined(ENABLE_IRQ_POLL)
4887     if (irq_context->irq_poll_scheduled)
4888     return IRQ_HANDLED;
4889     -#endif
4890    
4891     if (!instance->msix_vectors) {
4892     mfiStatus = instance->instancet->clear_intr(instance);
4893     diff --git a/drivers/scsi/sr_vendor.c b/drivers/scsi/sr_vendor.c
4894     index e3b0ce25162b..b9db2ec6d036 100644
4895     --- a/drivers/scsi/sr_vendor.c
4896     +++ b/drivers/scsi/sr_vendor.c
4897     @@ -66,9 +66,6 @@
4898    
4899     void sr_vendor_init(Scsi_CD *cd)
4900     {
4901     -#ifndef CONFIG_BLK_DEV_SR_VENDOR
4902     - cd->vendor = VENDOR_SCSI3;
4903     -#else
4904     const char *vendor = cd->device->vendor;
4905     const char *model = cd->device->model;
4906    
4907     @@ -100,7 +97,6 @@ void sr_vendor_init(Scsi_CD *cd)
4908     cd->vendor = VENDOR_TOSHIBA;
4909    
4910     }
4911     -#endif
4912     }
4913    
4914    
4915     @@ -114,10 +110,8 @@ int sr_set_blocklength(Scsi_CD *cd, int blocklength)
4916     struct ccs_modesel_head *modesel;
4917     int rc, density = 0;
4918    
4919     -#ifdef CONFIG_BLK_DEV_SR_VENDOR
4920     if (cd->vendor == VENDOR_TOSHIBA)
4921     density = (blocklength > 2048) ? 0x81 : 0x83;
4922     -#endif
4923    
4924     buffer = kmalloc(512, GFP_KERNEL | GFP_DMA);
4925     if (!buffer)
4926     @@ -205,7 +199,6 @@ int sr_cd_check(struct cdrom_device_info *cdi)
4927     }
4928     break;
4929    
4930     -#ifdef CONFIG_BLK_DEV_SR_VENDOR
4931     case VENDOR_NEC:{
4932     unsigned long min, sec, frame;
4933     cgc.cmd[0] = 0xde;
4934     @@ -298,7 +291,6 @@ int sr_cd_check(struct cdrom_device_info *cdi)
4935     sector = buffer[11] + (buffer[10] << 8) +
4936     (buffer[9] << 16) + (buffer[8] << 24);
4937     break;
4938     -#endif /* CONFIG_BLK_DEV_SR_VENDOR */
4939    
4940     default:
4941     /* should not happen */
4942     diff --git a/drivers/slimbus/core.c b/drivers/slimbus/core.c
4943     index 526e3215d8fe..63ee96eb58c6 100644
4944     --- a/drivers/slimbus/core.c
4945     +++ b/drivers/slimbus/core.c
4946     @@ -283,6 +283,7 @@ EXPORT_SYMBOL_GPL(slim_register_controller);
4947     /* slim_remove_device: Remove the effect of slim_add_device() */
4948     static void slim_remove_device(struct slim_device *sbdev)
4949     {
4950     + of_node_put(sbdev->dev.of_node);
4951     device_unregister(&sbdev->dev);
4952     }
4953    
4954     diff --git a/drivers/soc/qcom/rpmh-rsc.c b/drivers/soc/qcom/rpmh-rsc.c
4955     index e278fc11fe5c..0ba1f465db12 100644
4956     --- a/drivers/soc/qcom/rpmh-rsc.c
4957     +++ b/drivers/soc/qcom/rpmh-rsc.c
4958     @@ -148,7 +148,7 @@ int rpmh_rsc_invalidate(struct rsc_drv *drv)
4959     static struct tcs_group *get_tcs_for_msg(struct rsc_drv *drv,
4960     const struct tcs_request *msg)
4961     {
4962     - int type, ret;
4963     + int type;
4964     struct tcs_group *tcs;
4965    
4966     switch (msg->state) {
4967     @@ -169,19 +169,10 @@ static struct tcs_group *get_tcs_for_msg(struct rsc_drv *drv,
4968     * If we are making an active request on a RSC that does not have a
4969     * dedicated TCS for active state use, then re-purpose a wake TCS to
4970     * send active votes.
4971     - * NOTE: The driver must be aware that this RSC does not have a
4972     - * dedicated AMC, and therefore would invalidate the sleep and wake
4973     - * TCSes before making an active state request.
4974     */
4975     tcs = get_tcs_of_type(drv, type);
4976     - if (msg->state == RPMH_ACTIVE_ONLY_STATE && !tcs->num_tcs) {
4977     + if (msg->state == RPMH_ACTIVE_ONLY_STATE && !tcs->num_tcs)
4978     tcs = get_tcs_of_type(drv, WAKE_TCS);
4979     - if (tcs->num_tcs) {
4980     - ret = rpmh_rsc_invalidate(drv);
4981     - if (ret)
4982     - return ERR_PTR(ret);
4983     - }
4984     - }
4985    
4986     return tcs;
4987     }
4988     @@ -201,6 +192,42 @@ static const struct tcs_request *get_req_from_tcs(struct rsc_drv *drv,
4989     return NULL;
4990     }
4991    
4992     +static void __tcs_set_trigger(struct rsc_drv *drv, int tcs_id, bool trigger)
4993     +{
4994     + u32 enable;
4995     +
4996     + /*
4997     + * HW req: Clear the DRV_CONTROL and enable TCS again
4998     + * While clearing ensure that the AMC mode trigger is cleared
4999     + * and then the mode enable is cleared.
5000     + */
5001     + enable = read_tcs_reg(drv, RSC_DRV_CONTROL, tcs_id, 0);
5002     + enable &= ~TCS_AMC_MODE_TRIGGER;
5003     + write_tcs_reg_sync(drv, RSC_DRV_CONTROL, tcs_id, enable);
5004     + enable &= ~TCS_AMC_MODE_ENABLE;
5005     + write_tcs_reg_sync(drv, RSC_DRV_CONTROL, tcs_id, enable);
5006     +
5007     + if (trigger) {
5008     + /* Enable the AMC mode on the TCS and then trigger the TCS */
5009     + enable = TCS_AMC_MODE_ENABLE;
5010     + write_tcs_reg_sync(drv, RSC_DRV_CONTROL, tcs_id, enable);
5011     + enable |= TCS_AMC_MODE_TRIGGER;
5012     + write_tcs_reg_sync(drv, RSC_DRV_CONTROL, tcs_id, enable);
5013     + }
5014     +}
5015     +
5016     +static void enable_tcs_irq(struct rsc_drv *drv, int tcs_id, bool enable)
5017     +{
5018     + u32 data;
5019     +
5020     + data = read_tcs_reg(drv, RSC_DRV_IRQ_ENABLE, 0, 0);
5021     + if (enable)
5022     + data |= BIT(tcs_id);
5023     + else
5024     + data &= ~BIT(tcs_id);
5025     + write_tcs_reg(drv, RSC_DRV_IRQ_ENABLE, 0, data);
5026     +}
5027     +
5028     /**
5029     * tcs_tx_done: TX Done interrupt handler
5030     */
5031     @@ -237,6 +264,14 @@ static irqreturn_t tcs_tx_done(int irq, void *p)
5032     }
5033    
5034     trace_rpmh_tx_done(drv, i, req, err);
5035     +
5036     + /*
5037     + * If wake tcs was re-purposed for sending active
5038     + * votes, clear AMC trigger & enable modes and
5039     + * disable interrupt for this TCS
5040     + */
5041     + if (!drv->tcs[ACTIVE_TCS].num_tcs)
5042     + __tcs_set_trigger(drv, i, false);
5043     skip:
5044     /* Reclaim the TCS */
5045     write_tcs_reg(drv, RSC_DRV_CMD_ENABLE, i, 0);
5046     @@ -244,6 +279,13 @@ skip:
5047     write_tcs_reg(drv, RSC_DRV_IRQ_CLEAR, 0, BIT(i));
5048     spin_lock(&drv->lock);
5049     clear_bit(i, drv->tcs_in_use);
5050     + /*
5051     + * Disable interrupt for WAKE TCS to avoid being
5052     + * spammed with interrupts coming when the solver
5053     + * sends its wake votes.
5054     + */
5055     + if (!drv->tcs[ACTIVE_TCS].num_tcs)
5056     + enable_tcs_irq(drv, i, false);
5057     spin_unlock(&drv->lock);
5058     if (req)
5059     rpmh_tx_done(req, err);
5060     @@ -285,28 +327,6 @@ static void __tcs_buffer_write(struct rsc_drv *drv, int tcs_id, int cmd_id,
5061     write_tcs_reg(drv, RSC_DRV_CMD_ENABLE, tcs_id, cmd_enable);
5062     }
5063    
5064     -static void __tcs_trigger(struct rsc_drv *drv, int tcs_id)
5065     -{
5066     - u32 enable;
5067     -
5068     - /*
5069     - * HW req: Clear the DRV_CONTROL and enable TCS again
5070     - * While clearing ensure that the AMC mode trigger is cleared
5071     - * and then the mode enable is cleared.
5072     - */
5073     - enable = read_tcs_reg(drv, RSC_DRV_CONTROL, tcs_id, 0);
5074     - enable &= ~TCS_AMC_MODE_TRIGGER;
5075     - write_tcs_reg_sync(drv, RSC_DRV_CONTROL, tcs_id, enable);
5076     - enable &= ~TCS_AMC_MODE_ENABLE;
5077     - write_tcs_reg_sync(drv, RSC_DRV_CONTROL, tcs_id, enable);
5078     -
5079     - /* Enable the AMC mode on the TCS and then trigger the TCS */
5080     - enable = TCS_AMC_MODE_ENABLE;
5081     - write_tcs_reg_sync(drv, RSC_DRV_CONTROL, tcs_id, enable);
5082     - enable |= TCS_AMC_MODE_TRIGGER;
5083     - write_tcs_reg_sync(drv, RSC_DRV_CONTROL, tcs_id, enable);
5084     -}
5085     -
5086     static int check_for_req_inflight(struct rsc_drv *drv, struct tcs_group *tcs,
5087     const struct tcs_request *msg)
5088     {
5089     @@ -377,10 +397,20 @@ static int tcs_write(struct rsc_drv *drv, const struct tcs_request *msg)
5090    
5091     tcs->req[tcs_id - tcs->offset] = msg;
5092     set_bit(tcs_id, drv->tcs_in_use);
5093     + if (msg->state == RPMH_ACTIVE_ONLY_STATE && tcs->type != ACTIVE_TCS) {
5094     + /*
5095     + * Clear previously programmed WAKE commands in selected
5096     + * repurposed TCS to avoid triggering them. tcs->slots will be
5097     + * cleaned from rpmh_flush() by invoking rpmh_rsc_invalidate()
5098     + */
5099     + write_tcs_reg_sync(drv, RSC_DRV_CMD_ENABLE, tcs_id, 0);
5100     + write_tcs_reg_sync(drv, RSC_DRV_CMD_WAIT_FOR_CMPL, tcs_id, 0);
5101     + enable_tcs_irq(drv, tcs_id, true);
5102     + }
5103     spin_unlock(&drv->lock);
5104    
5105     __tcs_buffer_write(drv, tcs_id, 0, msg);
5106     - __tcs_trigger(drv, tcs_id);
5107     + __tcs_set_trigger(drv, tcs_id, true);
5108    
5109     done_write:
5110     spin_unlock_irqrestore(&tcs->lock, flags);
5111     diff --git a/drivers/soc/qcom/rpmh.c b/drivers/soc/qcom/rpmh.c
5112     index 035091fd44b8..ae2d1590a611 100644
5113     --- a/drivers/soc/qcom/rpmh.c
5114     +++ b/drivers/soc/qcom/rpmh.c
5115     @@ -119,6 +119,7 @@ static struct cache_req *cache_rpm_request(struct rpmh_ctrlr *ctrlr,
5116     {
5117     struct cache_req *req;
5118     unsigned long flags;
5119     + u32 old_sleep_val, old_wake_val;
5120    
5121     spin_lock_irqsave(&ctrlr->cache_lock, flags);
5122     req = __find_req(ctrlr, cmd->addr);
5123     @@ -133,26 +134,27 @@ static struct cache_req *cache_rpm_request(struct rpmh_ctrlr *ctrlr,
5124    
5125     req->addr = cmd->addr;
5126     req->sleep_val = req->wake_val = UINT_MAX;
5127     - INIT_LIST_HEAD(&req->list);
5128     list_add_tail(&req->list, &ctrlr->cache);
5129    
5130     existing:
5131     + old_sleep_val = req->sleep_val;
5132     + old_wake_val = req->wake_val;
5133     +
5134     switch (state) {
5135     case RPMH_ACTIVE_ONLY_STATE:
5136     - if (req->sleep_val != UINT_MAX)
5137     - req->wake_val = cmd->data;
5138     - break;
5139     case RPMH_WAKE_ONLY_STATE:
5140     req->wake_val = cmd->data;
5141     break;
5142     case RPMH_SLEEP_STATE:
5143     req->sleep_val = cmd->data;
5144     break;
5145     - default:
5146     - break;
5147     }
5148    
5149     - ctrlr->dirty = true;
5150     + ctrlr->dirty = (req->sleep_val != old_sleep_val ||
5151     + req->wake_val != old_wake_val) &&
5152     + req->sleep_val != UINT_MAX &&
5153     + req->wake_val != UINT_MAX;
5154     +
5155     unlock:
5156     spin_unlock_irqrestore(&ctrlr->cache_lock, flags);
5157    
5158     @@ -287,6 +289,7 @@ static void cache_batch(struct rpmh_ctrlr *ctrlr, struct batch_cache_req *req)
5159    
5160     spin_lock_irqsave(&ctrlr->cache_lock, flags);
5161     list_add_tail(&req->list, &ctrlr->batch_cache);
5162     + ctrlr->dirty = true;
5163     spin_unlock_irqrestore(&ctrlr->cache_lock, flags);
5164     }
5165    
5166     @@ -314,18 +317,6 @@ static int flush_batch(struct rpmh_ctrlr *ctrlr)
5167     return ret;
5168     }
5169    
5170     -static void invalidate_batch(struct rpmh_ctrlr *ctrlr)
5171     -{
5172     - struct batch_cache_req *req, *tmp;
5173     - unsigned long flags;
5174     -
5175     - spin_lock_irqsave(&ctrlr->cache_lock, flags);
5176     - list_for_each_entry_safe(req, tmp, &ctrlr->batch_cache, list)
5177     - kfree(req);
5178     - INIT_LIST_HEAD(&ctrlr->batch_cache);
5179     - spin_unlock_irqrestore(&ctrlr->cache_lock, flags);
5180     -}
5181     -
5182     /**
5183     * rpmh_write_batch: Write multiple sets of RPMH commands and wait for the
5184     * batch to finish.
5185     @@ -465,6 +456,13 @@ int rpmh_flush(const struct device *dev)
5186     return 0;
5187     }
5188    
5189     + /* Invalidate the TCSes first to avoid stale data */
5190     + do {
5191     + ret = rpmh_rsc_invalidate(ctrlr_to_drv(ctrlr));
5192     + } while (ret == -EAGAIN);
5193     + if (ret)
5194     + return ret;
5195     +
5196     /* First flush the cached batch requests */
5197     ret = flush_batch(ctrlr);
5198     if (ret)
5199     @@ -496,25 +494,25 @@ int rpmh_flush(const struct device *dev)
5200     EXPORT_SYMBOL(rpmh_flush);
5201    
5202     /**
5203     - * rpmh_invalidate: Invalidate all sleep and active sets
5204     - * sets.
5205     + * rpmh_invalidate: Invalidate sleep and wake sets in batch_cache
5206     *
5207     * @dev: The device making the request
5208     *
5209     - * Invalidate the sleep and active values in the TCS blocks.
5210     + * Invalidate the sleep and wake values in batch_cache.
5211     */
5212     int rpmh_invalidate(const struct device *dev)
5213     {
5214     struct rpmh_ctrlr *ctrlr = get_rpmh_ctrlr(dev);
5215     - int ret;
5216     + struct batch_cache_req *req, *tmp;
5217     + unsigned long flags;
5218    
5219     - invalidate_batch(ctrlr);
5220     + spin_lock_irqsave(&ctrlr->cache_lock, flags);
5221     + list_for_each_entry_safe(req, tmp, &ctrlr->batch_cache, list)
5222     + kfree(req);
5223     + INIT_LIST_HEAD(&ctrlr->batch_cache);
5224     ctrlr->dirty = true;
5225     + spin_unlock_irqrestore(&ctrlr->cache_lock, flags);
5226    
5227     - do {
5228     - ret = rpmh_rsc_invalidate(ctrlr_to_drv(ctrlr));
5229     - } while (ret == -EAGAIN);
5230     -
5231     - return ret;
5232     + return 0;
5233     }
5234     EXPORT_SYMBOL(rpmh_invalidate);
5235     diff --git a/drivers/soc/qcom/socinfo.c b/drivers/soc/qcom/socinfo.c
5236     index a39ea5061dc5..176696f8f38d 100644
5237     --- a/drivers/soc/qcom/socinfo.c
5238     +++ b/drivers/soc/qcom/socinfo.c
5239     @@ -428,6 +428,8 @@ static int qcom_socinfo_probe(struct platform_device *pdev)
5240     qs->attr.family = "Snapdragon";
5241     qs->attr.machine = socinfo_machine(&pdev->dev,
5242     le32_to_cpu(info->id));
5243     + qs->attr.soc_id = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%u",
5244     + le32_to_cpu(info->id));
5245     qs->attr.revision = devm_kasprintf(&pdev->dev, GFP_KERNEL, "%u.%u",
5246     SOCINFO_MAJOR(le32_to_cpu(info->ver)),
5247     SOCINFO_MINOR(le32_to_cpu(info->ver)));
5248     diff --git a/drivers/soundwire/intel.c b/drivers/soundwire/intel.c
5249     index d1839707128a..243af8198d1c 100644
5250     --- a/drivers/soundwire/intel.c
5251     +++ b/drivers/soundwire/intel.c
5252     @@ -842,8 +842,9 @@ static int intel_create_dai(struct sdw_cdns *cdns,
5253    
5254     /* TODO: Read supported rates/formats from hardware */
5255     for (i = off; i < (off + num); i++) {
5256     - dais[i].name = kasprintf(GFP_KERNEL, "SDW%d Pin%d",
5257     - cdns->instance, i);
5258     + dais[i].name = devm_kasprintf(cdns->dev, GFP_KERNEL,
5259     + "SDW%d Pin%d",
5260     + cdns->instance, i);
5261     if (!dais[i].name)
5262     return -ENOMEM;
5263    
5264     diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
5265     index 3e0e27731922..c7560d7d1627 100644
5266     --- a/drivers/spi/spi-fsl-dspi.c
5267     +++ b/drivers/spi/spi-fsl-dspi.c
5268     @@ -1184,20 +1184,7 @@ static int dspi_remove(struct platform_device *pdev)
5269    
5270     static void dspi_shutdown(struct platform_device *pdev)
5271     {
5272     - struct spi_controller *ctlr = platform_get_drvdata(pdev);
5273     - struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr);
5274     -
5275     - /* Disable RX and TX */
5276     - regmap_update_bits(dspi->regmap, SPI_MCR,
5277     - SPI_MCR_DIS_TXF | SPI_MCR_DIS_RXF,
5278     - SPI_MCR_DIS_TXF | SPI_MCR_DIS_RXF);
5279     -
5280     - /* Stop Running */
5281     - regmap_update_bits(dspi->regmap, SPI_MCR, SPI_MCR_HALT, SPI_MCR_HALT);
5282     -
5283     - dspi_release_dma(dspi);
5284     - clk_disable_unprepare(dspi->clk);
5285     - spi_unregister_controller(dspi->ctlr);
5286     + dspi_remove(pdev);
5287     }
5288    
5289     static struct platform_driver fsl_dspi_driver = {
5290     diff --git a/drivers/spi/spi-sprd-adi.c b/drivers/spi/spi-sprd-adi.c
5291     index 9613cfe3c0a2..09f983524d51 100644
5292     --- a/drivers/spi/spi-sprd-adi.c
5293     +++ b/drivers/spi/spi-sprd-adi.c
5294     @@ -384,9 +384,9 @@ static int sprd_adi_restart_handler(struct notifier_block *this,
5295     sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOCK, WDG_UNLOCK_KEY);
5296    
5297     /* Load the watchdog timeout value, 50ms is always enough. */
5298     + sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOAD_HIGH, 0);
5299     sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOAD_LOW,
5300     WDG_LOAD_VAL & WDG_LOAD_MASK);
5301     - sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOAD_HIGH, 0);
5302    
5303     /* Start the watchdog to reset system */
5304     sprd_adi_read(sadi, sadi->slave_pbase + REG_WDG_CTRL, &val);
5305     diff --git a/drivers/spi/spi-sun6i.c b/drivers/spi/spi-sun6i.c
5306     index ec7967be9e2f..956df79035d5 100644
5307     --- a/drivers/spi/spi-sun6i.c
5308     +++ b/drivers/spi/spi-sun6i.c
5309     @@ -198,7 +198,7 @@ static int sun6i_spi_transfer_one(struct spi_master *master,
5310     struct spi_transfer *tfr)
5311     {
5312     struct sun6i_spi *sspi = spi_master_get_devdata(master);
5313     - unsigned int mclk_rate, div, timeout;
5314     + unsigned int mclk_rate, div, div_cdr1, div_cdr2, timeout;
5315     unsigned int start, end, tx_time;
5316     unsigned int trig_level;
5317     unsigned int tx_len = 0;
5318     @@ -287,14 +287,12 @@ static int sun6i_spi_transfer_one(struct spi_master *master,
5319     * First try CDR2, and if we can't reach the expected
5320     * frequency, fall back to CDR1.
5321     */
5322     - div = mclk_rate / (2 * tfr->speed_hz);
5323     - if (div <= (SUN6I_CLK_CTL_CDR2_MASK + 1)) {
5324     - if (div > 0)
5325     - div--;
5326     -
5327     - reg = SUN6I_CLK_CTL_CDR2(div) | SUN6I_CLK_CTL_DRS;
5328     + div_cdr1 = DIV_ROUND_UP(mclk_rate, tfr->speed_hz);
5329     + div_cdr2 = DIV_ROUND_UP(div_cdr1, 2);
5330     + if (div_cdr2 <= (SUN6I_CLK_CTL_CDR2_MASK + 1)) {
5331     + reg = SUN6I_CLK_CTL_CDR2(div_cdr2 - 1) | SUN6I_CLK_CTL_DRS;
5332     } else {
5333     - div = ilog2(mclk_rate) - ilog2(tfr->speed_hz);
5334     + div = min(SUN6I_CLK_CTL_CDR1_MASK, order_base_2(div_cdr1));
5335     reg = SUN6I_CLK_CTL_CDR1(div);
5336     }
5337    
5338     diff --git a/drivers/staging/comedi/drivers/addi_apci_1500.c b/drivers/staging/comedi/drivers/addi_apci_1500.c
5339     index 45ad4ba92f94..689acd69a1b9 100644
5340     --- a/drivers/staging/comedi/drivers/addi_apci_1500.c
5341     +++ b/drivers/staging/comedi/drivers/addi_apci_1500.c
5342     @@ -456,9 +456,9 @@ static int apci1500_di_cfg_trig(struct comedi_device *dev,
5343     unsigned int lo_mask = data[5] << shift;
5344     unsigned int chan_mask = hi_mask | lo_mask;
5345     unsigned int old_mask = (1 << shift) - 1;
5346     - unsigned int pm = devpriv->pm[trig] & old_mask;
5347     - unsigned int pt = devpriv->pt[trig] & old_mask;
5348     - unsigned int pp = devpriv->pp[trig] & old_mask;
5349     + unsigned int pm;
5350     + unsigned int pt;
5351     + unsigned int pp;
5352    
5353     if (trig > 1) {
5354     dev_dbg(dev->class_dev,
5355     @@ -471,6 +471,10 @@ static int apci1500_di_cfg_trig(struct comedi_device *dev,
5356     return -EINVAL;
5357     }
5358    
5359     + pm = devpriv->pm[trig] & old_mask;
5360     + pt = devpriv->pt[trig] & old_mask;
5361     + pp = devpriv->pp[trig] & old_mask;
5362     +
5363     switch (data[2]) {
5364     case COMEDI_DIGITAL_TRIG_DISABLE:
5365     /* clear trigger configuration */
5366     diff --git a/drivers/thermal/cpu_cooling.c b/drivers/thermal/cpu_cooling.c
5367     index 6b9865c786ba..c37886a26712 100644
5368     --- a/drivers/thermal/cpu_cooling.c
5369     +++ b/drivers/thermal/cpu_cooling.c
5370     @@ -210,11 +210,11 @@ static u32 cpu_power_to_freq(struct cpufreq_cooling_device *cpufreq_cdev,
5371     int i;
5372     struct freq_table *freq_table = cpufreq_cdev->freq_table;
5373    
5374     - for (i = 1; i <= cpufreq_cdev->max_level; i++)
5375     - if (power > freq_table[i].power)
5376     + for (i = 0; i < cpufreq_cdev->max_level; i++)
5377     + if (power >= freq_table[i].power)
5378     break;
5379    
5380     - return freq_table[i - 1].frequency;
5381     + return freq_table[i].frequency;
5382     }
5383    
5384     /**
5385     diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c
5386     index bb6754a5342c..85511c1160b7 100644
5387     --- a/drivers/thermal/imx_thermal.c
5388     +++ b/drivers/thermal/imx_thermal.c
5389     @@ -656,7 +656,7 @@ MODULE_DEVICE_TABLE(of, of_imx_thermal_match);
5390     static int imx_thermal_register_legacy_cooling(struct imx_thermal_data *data)
5391     {
5392     struct device_node *np;
5393     - int ret;
5394     + int ret = 0;
5395    
5396     data->policy = cpufreq_cpu_get(0);
5397     if (!data->policy) {
5398     @@ -671,11 +671,12 @@ static int imx_thermal_register_legacy_cooling(struct imx_thermal_data *data)
5399     if (IS_ERR(data->cdev)) {
5400     ret = PTR_ERR(data->cdev);
5401     cpufreq_cpu_put(data->policy);
5402     - return ret;
5403     }
5404     }
5405    
5406     - return 0;
5407     + of_node_put(np);
5408     +
5409     + return ret;
5410     }
5411    
5412     static void imx_thermal_unregister_legacy_cooling(struct imx_thermal_data *data)
5413     diff --git a/drivers/thermal/intel/int340x_thermal/int3403_thermal.c b/drivers/thermal/intel/int340x_thermal/int3403_thermal.c
5414     index a7bbd8584ae2..e7b6f6f256a9 100644
5415     --- a/drivers/thermal/intel/int340x_thermal/int3403_thermal.c
5416     +++ b/drivers/thermal/intel/int340x_thermal/int3403_thermal.c
5417     @@ -74,7 +74,7 @@ static void int3403_notify(acpi_handle handle,
5418     THERMAL_TRIP_CHANGED);
5419     break;
5420     default:
5421     - dev_err(&priv->pdev->dev, "Unsupported event [0x%x]\n", event);
5422     + dev_dbg(&priv->pdev->dev, "Unsupported event [0x%x]\n", event);
5423     break;
5424     }
5425     }
5426     diff --git a/drivers/thermal/mtk_thermal.c b/drivers/thermal/mtk_thermal.c
5427     index d6fabd0a7da6..2783973b101c 100644
5428     --- a/drivers/thermal/mtk_thermal.c
5429     +++ b/drivers/thermal/mtk_thermal.c
5430     @@ -594,8 +594,7 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
5431     u32 raw;
5432    
5433     for (i = 0; i < conf->bank_data[bank->id].num_sensors; i++) {
5434     - raw = readl(mt->thermal_base +
5435     - conf->msr[conf->bank_data[bank->id].sensors[i]]);
5436     + raw = readl(mt->thermal_base + conf->msr[i]);
5437    
5438     temp = raw_to_mcelsius(mt,
5439     conf->bank_data[bank->id].sensors[i],
5440     @@ -736,8 +735,7 @@ static void mtk_thermal_init_bank(struct mtk_thermal *mt, int num,
5441    
5442     for (i = 0; i < conf->bank_data[num].num_sensors; i++)
5443     writel(conf->sensor_mux_values[conf->bank_data[num].sensors[i]],
5444     - mt->thermal_base +
5445     - conf->adcpnp[conf->bank_data[num].sensors[i]]);
5446     + mt->thermal_base + conf->adcpnp[i]);
5447    
5448     writel((1 << conf->bank_data[num].num_sensors) - 1,
5449     controller_base + TEMP_MONCTL0);
5450     diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c
5451     index e34525970682..5d483e996514 100644
5452     --- a/drivers/tty/serial/mxs-auart.c
5453     +++ b/drivers/tty/serial/mxs-auart.c
5454     @@ -1701,21 +1701,21 @@ static int mxs_auart_probe(struct platform_device *pdev)
5455     irq = platform_get_irq(pdev, 0);
5456     if (irq < 0) {
5457     ret = irq;
5458     - goto out_disable_clks;
5459     + goto out_iounmap;
5460     }
5461    
5462     s->port.irq = irq;
5463     ret = devm_request_irq(&pdev->dev, irq, mxs_auart_irq_handle, 0,
5464     dev_name(&pdev->dev), s);
5465     if (ret)
5466     - goto out_disable_clks;
5467     + goto out_iounmap;
5468    
5469     platform_set_drvdata(pdev, s);
5470    
5471     ret = mxs_auart_init_gpios(s, &pdev->dev);
5472     if (ret) {
5473     dev_err(&pdev->dev, "Failed to initialize GPIOs.\n");
5474     - goto out_disable_clks;
5475     + goto out_iounmap;
5476     }
5477    
5478     /*
5479     @@ -1723,7 +1723,7 @@ static int mxs_auart_probe(struct platform_device *pdev)
5480     */
5481     ret = mxs_auart_request_gpio_irq(s);
5482     if (ret)
5483     - goto out_disable_clks;
5484     + goto out_iounmap;
5485    
5486     auart_port[s->port.line] = s;
5487    
5488     @@ -1749,6 +1749,9 @@ out_free_qpio_irq:
5489     mxs_auart_free_gpio_irq(s);
5490     auart_port[pdev->id] = NULL;
5491    
5492     +out_iounmap:
5493     + iounmap(s->port.membase);
5494     +
5495     out_disable_clks:
5496     if (is_asm9260_auart(s)) {
5497     clk_disable_unprepare(s->clk);
5498     @@ -1764,6 +1767,7 @@ static int mxs_auart_remove(struct platform_device *pdev)
5499     uart_remove_one_port(&auart_driver, &s->port);
5500     auart_port[pdev->id] = NULL;
5501     mxs_auart_free_gpio_irq(s);
5502     + iounmap(s->port.membase);
5503     if (is_asm9260_auart(s)) {
5504     clk_disable_unprepare(s->clk);
5505     clk_disable_unprepare(s->clk_ahb);
5506     diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
5507     index 3cb9aacfe0b2..fe098cf14e6a 100644
5508     --- a/drivers/tty/serial/xilinx_uartps.c
5509     +++ b/drivers/tty/serial/xilinx_uartps.c
5510     @@ -1445,7 +1445,6 @@ static int cdns_uart_probe(struct platform_device *pdev)
5511     cdns_uart_uart_driver.nr = CDNS_UART_NR_PORTS;
5512     #ifdef CONFIG_SERIAL_XILINX_PS_UART_CONSOLE
5513     cdns_uart_uart_driver.cons = &cdns_uart_console;
5514     - cdns_uart_console.index = id;
5515     #endif
5516    
5517     rc = uart_register_driver(&cdns_uart_uart_driver);
5518     diff --git a/drivers/uio/uio_pdrv_genirq.c b/drivers/uio/uio_pdrv_genirq.c
5519     index 1303b165055b..538adf9c47bb 100644
5520     --- a/drivers/uio/uio_pdrv_genirq.c
5521     +++ b/drivers/uio/uio_pdrv_genirq.c
5522     @@ -152,9 +152,9 @@ static int uio_pdrv_genirq_probe(struct platform_device *pdev)
5523     priv->pdev = pdev;
5524    
5525     if (!uioinfo->irq) {
5526     - ret = platform_get_irq(pdev, 0);
5527     + ret = platform_get_irq_optional(pdev, 0);
5528     uioinfo->irq = ret;
5529     - if (ret == -ENXIO && pdev->dev.of_node)
5530     + if (ret == -ENXIO)
5531     uioinfo->irq = UIO_IRQ_NONE;
5532     else if (ret < 0) {
5533     dev_err(&pdev->dev, "failed to get IRQ\n");
5534     diff --git a/drivers/usb/c67x00/c67x00-sched.c b/drivers/usb/c67x00/c67x00-sched.c
5535     index 633c52de3bb3..9865750bc31e 100644
5536     --- a/drivers/usb/c67x00/c67x00-sched.c
5537     +++ b/drivers/usb/c67x00/c67x00-sched.c
5538     @@ -486,7 +486,7 @@ c67x00_giveback_urb(struct c67x00_hcd *c67x00, struct urb *urb, int status)
5539     c67x00_release_urb(c67x00, urb);
5540     usb_hcd_unlink_urb_from_ep(c67x00_hcd_to_hcd(c67x00), urb);
5541     spin_unlock(&c67x00->lock);
5542     - usb_hcd_giveback_urb(c67x00_hcd_to_hcd(c67x00), urb, urbp->status);
5543     + usb_hcd_giveback_urb(c67x00_hcd_to_hcd(c67x00), urb, status);
5544     spin_lock(&c67x00->lock);
5545     }
5546    
5547     diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
5548     index 98ee575ee500..b7da2a273c45 100644
5549     --- a/drivers/usb/chipidea/core.c
5550     +++ b/drivers/usb/chipidea/core.c
5551     @@ -1261,6 +1261,29 @@ static void ci_controller_suspend(struct ci_hdrc *ci)
5552     enable_irq(ci->irq);
5553     }
5554    
5555     +/*
5556     + * Handle the wakeup interrupt triggered by extcon connector
5557     + * We need to call ci_irq again for extcon since the first
5558     + * interrupt (wakeup int) only let the controller be out of
5559     + * low power mode, but not handle any interrupts.
5560     + */
5561     +static void ci_extcon_wakeup_int(struct ci_hdrc *ci)
5562     +{
5563     + struct ci_hdrc_cable *cable_id, *cable_vbus;
5564     + u32 otgsc = hw_read_otgsc(ci, ~0);
5565     +
5566     + cable_id = &ci->platdata->id_extcon;
5567     + cable_vbus = &ci->platdata->vbus_extcon;
5568     +
5569     + if (!IS_ERR(cable_id->edev) && ci->is_otg &&
5570     + (otgsc & OTGSC_IDIE) && (otgsc & OTGSC_IDIS))
5571     + ci_irq(ci->irq, ci);
5572     +
5573     + if (!IS_ERR(cable_vbus->edev) && ci->is_otg &&
5574     + (otgsc & OTGSC_BSVIE) && (otgsc & OTGSC_BSVIS))
5575     + ci_irq(ci->irq, ci);
5576     +}
5577     +
5578     static int ci_controller_resume(struct device *dev)
5579     {
5580     struct ci_hdrc *ci = dev_get_drvdata(dev);
5581     @@ -1293,6 +1316,7 @@ static int ci_controller_resume(struct device *dev)
5582     enable_irq(ci->irq);
5583     if (ci_otg_is_fsm_mode(ci))
5584     ci_otg_fsm_wakeup_by_srp(ci);
5585     + ci_extcon_wakeup_int(ci);
5586     }
5587    
5588     return 0;
5589     diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c
5590     index 15e55808cf4e..4e14c4f7fed7 100644
5591     --- a/drivers/usb/dwc2/platform.c
5592     +++ b/drivers/usb/dwc2/platform.c
5593     @@ -337,7 +337,8 @@ static void dwc2_driver_shutdown(struct platform_device *dev)
5594     {
5595     struct dwc2_hsotg *hsotg = platform_get_drvdata(dev);
5596    
5597     - disable_irq(hsotg->irq);
5598     + dwc2_disable_global_interrupts(hsotg);
5599     + synchronize_irq(hsotg->irq);
5600     }
5601    
5602     /**
5603     diff --git a/drivers/usb/gadget/function/f_uac1_legacy.c b/drivers/usb/gadget/function/f_uac1_legacy.c
5604     index 6677ae932de0..06ee6e901808 100644
5605     --- a/drivers/usb/gadget/function/f_uac1_legacy.c
5606     +++ b/drivers/usb/gadget/function/f_uac1_legacy.c
5607     @@ -336,7 +336,9 @@ static int f_audio_out_ep_complete(struct usb_ep *ep, struct usb_request *req)
5608    
5609     /* Copy buffer is full, add it to the play_queue */
5610     if (audio_buf_size - copy_buf->actual < req->actual) {
5611     + spin_lock_irq(&audio->lock);
5612     list_add_tail(&copy_buf->list, &audio->play_queue);
5613     + spin_unlock_irq(&audio->lock);
5614     schedule_work(&audio->playback_work);
5615     copy_buf = f_audio_buffer_alloc(audio_buf_size);
5616     if (IS_ERR(copy_buf))
5617     diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c
5618     index 58e5b015d40e..bebe814f55e6 100644
5619     --- a/drivers/usb/gadget/udc/atmel_usba_udc.c
5620     +++ b/drivers/usb/gadget/udc/atmel_usba_udc.c
5621     @@ -870,7 +870,7 @@ static int usba_ep_dequeue(struct usb_ep *_ep, struct usb_request *_req)
5622     u32 status;
5623    
5624     DBG(DBG_GADGET | DBG_QUEUE, "ep_dequeue: %s, req %p\n",
5625     - ep->ep.name, req);
5626     + ep->ep.name, _req);
5627    
5628     spin_lock_irqsave(&udc->lock, flags);
5629    
5630     diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
5631     index e9a49007cce4..e4fc3f66d43b 100644
5632     --- a/drivers/usb/host/ehci-platform.c
5633     +++ b/drivers/usb/host/ehci-platform.c
5634     @@ -455,10 +455,6 @@ static int ehci_platform_resume(struct device *dev)
5635    
5636     ehci_resume(hcd, priv->reset_on_resume);
5637    
5638     - pm_runtime_disable(dev);
5639     - pm_runtime_set_active(dev);
5640     - pm_runtime_enable(dev);
5641     -
5642     if (priv->quirk_poll)
5643     quirk_poll_init(priv);
5644    
5645     diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c
5646     index 4a8456f12a73..7addfc2cbadc 100644
5647     --- a/drivers/usb/host/ohci-platform.c
5648     +++ b/drivers/usb/host/ohci-platform.c
5649     @@ -299,11 +299,6 @@ static int ohci_platform_resume(struct device *dev)
5650     }
5651    
5652     ohci_resume(hcd, false);
5653     -
5654     - pm_runtime_disable(dev);
5655     - pm_runtime_set_active(dev);
5656     - pm_runtime_enable(dev);
5657     -
5658     return 0;
5659     }
5660     #endif /* CONFIG_PM_SLEEP */
5661     diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
5662     index 60d06e9b600f..52c625c02341 100644
5663     --- a/drivers/usb/host/xhci-plat.c
5664     +++ b/drivers/usb/host/xhci-plat.c
5665     @@ -410,15 +410,7 @@ static int __maybe_unused xhci_plat_resume(struct device *dev)
5666     if (ret)
5667     return ret;
5668    
5669     - ret = xhci_resume(xhci, 0);
5670     - if (ret)
5671     - return ret;
5672     -
5673     - pm_runtime_disable(dev);
5674     - pm_runtime_set_active(dev);
5675     - pm_runtime_enable(dev);
5676     -
5677     - return 0;
5678     + return xhci_resume(xhci, 0);
5679     }
5680    
5681     static int __maybe_unused xhci_plat_runtime_suspend(struct device *dev)
5682     diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
5683     index dcdd541b3291..390bc4b25045 100644
5684     --- a/drivers/usb/serial/ch341.c
5685     +++ b/drivers/usb/serial/ch341.c
5686     @@ -81,6 +81,7 @@
5687    
5688     static const struct usb_device_id id_table[] = {
5689     { USB_DEVICE(0x4348, 0x5523) },
5690     + { USB_DEVICE(0x1a86, 0x7522) },
5691     { USB_DEVICE(0x1a86, 0x7523) },
5692     { USB_DEVICE(0x1a86, 0x5523) },
5693     { },
5694     diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c
5695     index 216edd5826ca..ecda82198798 100644
5696     --- a/drivers/usb/serial/cypress_m8.c
5697     +++ b/drivers/usb/serial/cypress_m8.c
5698     @@ -59,6 +59,7 @@ static const struct usb_device_id id_table_earthmate[] = {
5699    
5700     static const struct usb_device_id id_table_cyphidcomrs232[] = {
5701     { USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) },
5702     + { USB_DEVICE(VENDOR_ID_SAI, PRODUCT_ID_CYPHIDCOM) },
5703     { USB_DEVICE(VENDOR_ID_POWERCOM, PRODUCT_ID_UPS) },
5704     { USB_DEVICE(VENDOR_ID_FRWD, PRODUCT_ID_CYPHIDCOM_FRWD) },
5705     { } /* Terminating entry */
5706     @@ -73,6 +74,7 @@ static const struct usb_device_id id_table_combined[] = {
5707     { USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB) },
5708     { USB_DEVICE(VENDOR_ID_DELORME, PRODUCT_ID_EARTHMATEUSB_LT20) },
5709     { USB_DEVICE(VENDOR_ID_CYPRESS, PRODUCT_ID_CYPHIDCOM) },
5710     + { USB_DEVICE(VENDOR_ID_SAI, PRODUCT_ID_CYPHIDCOM) },
5711     { USB_DEVICE(VENDOR_ID_POWERCOM, PRODUCT_ID_UPS) },
5712     { USB_DEVICE(VENDOR_ID_FRWD, PRODUCT_ID_CYPHIDCOM_FRWD) },
5713     { USB_DEVICE(VENDOR_ID_DAZZLE, PRODUCT_ID_CA42) },
5714     diff --git a/drivers/usb/serial/cypress_m8.h b/drivers/usb/serial/cypress_m8.h
5715     index 35e223751c0e..16b7410ad057 100644
5716     --- a/drivers/usb/serial/cypress_m8.h
5717     +++ b/drivers/usb/serial/cypress_m8.h
5718     @@ -25,6 +25,9 @@
5719     #define VENDOR_ID_CYPRESS 0x04b4
5720     #define PRODUCT_ID_CYPHIDCOM 0x5500
5721    
5722     +/* Simply Automated HID->COM UPB PIM (using Cypress PID 0x5500) */
5723     +#define VENDOR_ID_SAI 0x17dd
5724     +
5725     /* FRWD Dongle - a GPS sports watch */
5726     #define VENDOR_ID_FRWD 0x6737
5727     #define PRODUCT_ID_CYPHIDCOM_FRWD 0x0001
5728     diff --git a/drivers/usb/serial/iuu_phoenix.c b/drivers/usb/serial/iuu_phoenix.c
5729     index d5bff69b1769..b8dfeb4fb2ed 100644
5730     --- a/drivers/usb/serial/iuu_phoenix.c
5731     +++ b/drivers/usb/serial/iuu_phoenix.c
5732     @@ -697,14 +697,16 @@ static int iuu_uart_write(struct tty_struct *tty, struct usb_serial_port *port,
5733     struct iuu_private *priv = usb_get_serial_port_data(port);
5734     unsigned long flags;
5735    
5736     - if (count > 256)
5737     - return -ENOMEM;
5738     -
5739     spin_lock_irqsave(&priv->lock, flags);
5740    
5741     + count = min(count, 256 - priv->writelen);
5742     + if (count == 0)
5743     + goto out;
5744     +
5745     /* fill the buffer */
5746     memcpy(priv->writebuf + priv->writelen, buf, count);
5747     priv->writelen += count;
5748     +out:
5749     spin_unlock_irqrestore(&priv->lock, flags);
5750    
5751     return count;
5752     diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
5753     index 254a8bbeea67..9b7cee98ea60 100644
5754     --- a/drivers/usb/serial/option.c
5755     +++ b/drivers/usb/serial/option.c
5756     @@ -245,6 +245,7 @@ static void option_instat_callback(struct urb *urb);
5757     /* These Quectel products use Quectel's vendor ID */
5758     #define QUECTEL_PRODUCT_EC21 0x0121
5759     #define QUECTEL_PRODUCT_EC25 0x0125
5760     +#define QUECTEL_PRODUCT_EG95 0x0195
5761     #define QUECTEL_PRODUCT_BG96 0x0296
5762     #define QUECTEL_PRODUCT_EP06 0x0306
5763     #define QUECTEL_PRODUCT_EM12 0x0512
5764     @@ -1097,6 +1098,8 @@ static const struct usb_device_id option_ids[] = {
5765     .driver_info = RSVD(4) },
5766     { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25),
5767     .driver_info = RSVD(4) },
5768     + { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95),
5769     + .driver_info = RSVD(4) },
5770     { USB_DEVICE(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_BG96),
5771     .driver_info = RSVD(4) },
5772     { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EP06, 0xff, 0xff, 0xff),
5773     @@ -2028,6 +2031,9 @@ static const struct usb_device_id option_ids[] = {
5774     .driver_info = RSVD(4) | RSVD(5) },
5775     { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x0105, 0xff), /* Fibocom NL678 series */
5776     .driver_info = RSVD(6) },
5777     + { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1404, 0xff) }, /* GosunCn GM500 RNDIS */
5778     + { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1405, 0xff) }, /* GosunCn GM500 MBIM */
5779     + { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1406, 0xff) }, /* GosunCn GM500 ECM/NCM */
5780     { } /* Terminating entry */
5781     };
5782     MODULE_DEVICE_TABLE(usb, option_ids);
5783     diff --git a/drivers/virt/vboxguest/vboxguest_core.c b/drivers/virt/vboxguest/vboxguest_core.c
5784     index 2307b0329aec..95bfdb8ac8a2 100644
5785     --- a/drivers/virt/vboxguest/vboxguest_core.c
5786     +++ b/drivers/virt/vboxguest/vboxguest_core.c
5787     @@ -1443,7 +1443,7 @@ static int vbg_ioctl_change_guest_capabilities(struct vbg_dev *gdev,
5788     or_mask = caps->u.in.or_mask;
5789     not_mask = caps->u.in.not_mask;
5790    
5791     - if ((or_mask | not_mask) & ~VMMDEV_EVENT_VALID_EVENT_MASK)
5792     + if ((or_mask | not_mask) & ~VMMDEV_GUEST_CAPABILITIES_MASK)
5793     return -EINVAL;
5794    
5795     ret = vbg_set_session_capabilities(gdev, session, or_mask, not_mask,
5796     @@ -1519,7 +1519,8 @@ int vbg_core_ioctl(struct vbg_session *session, unsigned int req, void *data)
5797    
5798     /* For VMMDEV_REQUEST hdr->type != VBG_IOCTL_HDR_TYPE_DEFAULT */
5799     if (req_no_size == VBG_IOCTL_VMMDEV_REQUEST(0) ||
5800     - req == VBG_IOCTL_VMMDEV_REQUEST_BIG)
5801     + req == VBG_IOCTL_VMMDEV_REQUEST_BIG ||
5802     + req == VBG_IOCTL_VMMDEV_REQUEST_BIG_ALT)
5803     return vbg_ioctl_vmmrequest(gdev, session, data);
5804    
5805     if (hdr->type != VBG_IOCTL_HDR_TYPE_DEFAULT)
5806     @@ -1557,6 +1558,7 @@ int vbg_core_ioctl(struct vbg_session *session, unsigned int req, void *data)
5807     case VBG_IOCTL_HGCM_CALL(0):
5808     return vbg_ioctl_hgcm_call(gdev, session, f32bit, data);
5809     case VBG_IOCTL_LOG(0):
5810     + case VBG_IOCTL_LOG_ALT(0):
5811     return vbg_ioctl_log(data);
5812     }
5813    
5814     diff --git a/drivers/virt/vboxguest/vboxguest_core.h b/drivers/virt/vboxguest/vboxguest_core.h
5815     index 4188c12b839f..77c3a9c8255d 100644
5816     --- a/drivers/virt/vboxguest/vboxguest_core.h
5817     +++ b/drivers/virt/vboxguest/vboxguest_core.h
5818     @@ -15,6 +15,21 @@
5819     #include <linux/vboxguest.h>
5820     #include "vmmdev.h"
5821    
5822     +/*
5823     + * The mainline kernel version (this version) of the vboxguest module
5824     + * contained a bug where it defined VBGL_IOCTL_VMMDEV_REQUEST_BIG and
5825     + * VBGL_IOCTL_LOG using _IOC(_IOC_READ | _IOC_WRITE, 'V', ...) instead
5826     + * of _IO(V, ...) as the out of tree VirtualBox upstream version does.
5827     + *
5828     + * These _ALT definitions keep compatibility with the wrong defines the
5829     + * mainline kernel version used for a while.
5830     + * Note the VirtualBox userspace bits have always been built against
5831     + * VirtualBox upstream's headers, so this is likely not necessary. But
5832     + * we must never break our ABI so we keep these around to be 100% sure.
5833     + */
5834     +#define VBG_IOCTL_VMMDEV_REQUEST_BIG_ALT _IOC(_IOC_READ | _IOC_WRITE, 'V', 3, 0)
5835     +#define VBG_IOCTL_LOG_ALT(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 9, s)
5836     +
5837     struct vbg_session;
5838    
5839     /** VBox guest memory balloon. */
5840     diff --git a/drivers/virt/vboxguest/vboxguest_linux.c b/drivers/virt/vboxguest/vboxguest_linux.c
5841     index 6e8c0f1c1056..32c2c52f7e84 100644
5842     --- a/drivers/virt/vboxguest/vboxguest_linux.c
5843     +++ b/drivers/virt/vboxguest/vboxguest_linux.c
5844     @@ -131,7 +131,8 @@ static long vbg_misc_device_ioctl(struct file *filp, unsigned int req,
5845     * the need for a bounce-buffer and another copy later on.
5846     */
5847     is_vmmdev_req = (req & ~IOCSIZE_MASK) == VBG_IOCTL_VMMDEV_REQUEST(0) ||
5848     - req == VBG_IOCTL_VMMDEV_REQUEST_BIG;
5849     + req == VBG_IOCTL_VMMDEV_REQUEST_BIG ||
5850     + req == VBG_IOCTL_VMMDEV_REQUEST_BIG_ALT;
5851    
5852     if (is_vmmdev_req)
5853     buf = vbg_req_alloc(size, VBG_IOCTL_HDR_TYPE_DEFAULT,
5854     diff --git a/drivers/virt/vboxguest/vmmdev.h b/drivers/virt/vboxguest/vmmdev.h
5855     index 6337b8d75d96..21f408120e3f 100644
5856     --- a/drivers/virt/vboxguest/vmmdev.h
5857     +++ b/drivers/virt/vboxguest/vmmdev.h
5858     @@ -206,6 +206,8 @@ VMMDEV_ASSERT_SIZE(vmmdev_mask, 24 + 8);
5859     * not.
5860     */
5861     #define VMMDEV_GUEST_SUPPORTS_GRAPHICS BIT(2)
5862     +/* The mask of valid capabilities, for sanity checking. */
5863     +#define VMMDEV_GUEST_CAPABILITIES_MASK 0x00000007U
5864    
5865     /** struct vmmdev_hypervisorinfo - Hypervisor info structure. */
5866     struct vmmdev_hypervisorinfo {
5867     diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
5868     index fe1552cc8a0a..eafc49de4d7f 100644
5869     --- a/fs/cifs/transport.c
5870     +++ b/fs/cifs/transport.c
5871     @@ -528,7 +528,7 @@ wait_for_free_credits(struct TCP_Server_Info *server, const int num_credits,
5872     const int timeout, const int flags,
5873     unsigned int *instance)
5874     {
5875     - int rc;
5876     + long rc;
5877     int *credits;
5878     int optype;
5879     long int t;
5880     diff --git a/fs/fuse/file.c b/fs/fuse/file.c
5881     index 66214707a945..f8d8a8e34b80 100644
5882     --- a/fs/fuse/file.c
5883     +++ b/fs/fuse/file.c
5884     @@ -18,6 +18,7 @@
5885     #include <linux/swap.h>
5886     #include <linux/falloc.h>
5887     #include <linux/uio.h>
5888     +#include <linux/fs.h>
5889    
5890     static struct page **fuse_pages_alloc(unsigned int npages, gfp_t flags,
5891     struct fuse_page_desc **desc)
5892     @@ -2148,10 +2149,8 @@ static int fuse_writepages(struct address_space *mapping,
5893    
5894     err = write_cache_pages(mapping, wbc, fuse_writepages_fill, &data);
5895     if (data.wpa) {
5896     - /* Ignore errors if we can write at least one page */
5897     WARN_ON(!data.wpa->ia.ap.num_pages);
5898     fuse_writepages_send(&data);
5899     - err = 0;
5900     }
5901     if (data.ff)
5902     fuse_file_put(data.ff, false, false);
5903     @@ -2760,7 +2759,16 @@ long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
5904     struct iovec *iov = iov_page;
5905    
5906     iov->iov_base = (void __user *)arg;
5907     - iov->iov_len = _IOC_SIZE(cmd);
5908     +
5909     + switch (cmd) {
5910     + case FS_IOC_GETFLAGS:
5911     + case FS_IOC_SETFLAGS:
5912     + iov->iov_len = sizeof(int);
5913     + break;
5914     + default:
5915     + iov->iov_len = _IOC_SIZE(cmd);
5916     + break;
5917     + }
5918    
5919     if (_IOC_DIR(cmd) & _IOC_WRITE) {
5920     in_iov = iov;
5921     diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
5922     index 16aec32f7f3d..5dca643a257c 100644
5923     --- a/fs/fuse/inode.c
5924     +++ b/fs/fuse/inode.c
5925     @@ -121,10 +121,12 @@ static void fuse_evict_inode(struct inode *inode)
5926     }
5927     }
5928    
5929     -static int fuse_remount_fs(struct super_block *sb, int *flags, char *data)
5930     +static int fuse_reconfigure(struct fs_context *fc)
5931     {
5932     + struct super_block *sb = fc->root->d_sb;
5933     +
5934     sync_filesystem(sb);
5935     - if (*flags & SB_MANDLOCK)
5936     + if (fc->sb_flags & SB_MANDLOCK)
5937     return -EINVAL;
5938    
5939     return 0;
5940     @@ -473,6 +475,13 @@ static int fuse_parse_param(struct fs_context *fc, struct fs_parameter *param)
5941     struct fuse_fs_context *ctx = fc->fs_private;
5942     int opt;
5943    
5944     + /*
5945     + * Ignore options coming from mount(MS_REMOUNT) for backward
5946     + * compatibility.
5947     + */
5948     + if (fc->purpose == FS_CONTEXT_FOR_RECONFIGURE)
5949     + return 0;
5950     +
5951     opt = fs_parse(fc, &fuse_fs_parameters, param, &result);
5952     if (opt < 0)
5953     return opt;
5954     @@ -815,7 +824,6 @@ static const struct super_operations fuse_super_operations = {
5955     .evict_inode = fuse_evict_inode,
5956     .write_inode = fuse_write_inode,
5957     .drop_inode = generic_delete_inode,
5958     - .remount_fs = fuse_remount_fs,
5959     .put_super = fuse_put_super,
5960     .umount_begin = fuse_umount_begin,
5961     .statfs = fuse_statfs,
5962     @@ -1289,6 +1297,7 @@ static int fuse_get_tree(struct fs_context *fc)
5963     static const struct fs_context_operations fuse_context_ops = {
5964     .free = fuse_free_fc,
5965     .parse_param = fuse_parse_param,
5966     + .reconfigure = fuse_reconfigure,
5967     .get_tree = fuse_get_tree,
5968     };
5969    
5970     diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c
5971     index c26c864590cc..e0c55765b06d 100644
5972     --- a/fs/gfs2/ops_fstype.c
5973     +++ b/fs/gfs2/ops_fstype.c
5974     @@ -1168,7 +1168,17 @@ static int gfs2_fill_super(struct super_block *sb, struct fs_context *fc)
5975     goto fail_per_node;
5976     }
5977    
5978     - if (!sb_rdonly(sb)) {
5979     + if (sb_rdonly(sb)) {
5980     + struct gfs2_holder freeze_gh;
5981     +
5982     + error = gfs2_glock_nq_init(sdp->sd_freeze_gl, LM_ST_SHARED,
5983     + GL_EXACT, &freeze_gh);
5984     + if (error) {
5985     + fs_err(sdp, "can't make FS RO: %d\n", error);
5986     + goto fail_per_node;
5987     + }
5988     + gfs2_glock_dq_uninit(&freeze_gh);
5989     + } else {
5990     error = gfs2_make_fs_rw(sdp);
5991     if (error) {
5992     fs_err(sdp, "can't make FS RW: %d\n", error);
5993     diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
5994     index 33c17c69aeaa..1a1bd2fe6e98 100644
5995     --- a/fs/nfs/nfs4proc.c
5996     +++ b/fs/nfs/nfs4proc.c
5997     @@ -774,6 +774,14 @@ static void nfs4_slot_sequence_acked(struct nfs4_slot *slot,
5998     slot->seq_nr_last_acked = seqnr;
5999     }
6000    
6001     +static void nfs4_probe_sequence(struct nfs_client *client, const struct cred *cred,
6002     + struct nfs4_slot *slot)
6003     +{
6004     + struct rpc_task *task = _nfs41_proc_sequence(client, cred, slot, true);
6005     + if (!IS_ERR(task))
6006     + rpc_put_task_async(task);
6007     +}
6008     +
6009     static int nfs41_sequence_process(struct rpc_task *task,
6010     struct nfs4_sequence_res *res)
6011     {
6012     @@ -790,6 +798,7 @@ static int nfs41_sequence_process(struct rpc_task *task,
6013     goto out;
6014    
6015     session = slot->table->session;
6016     + clp = session->clp;
6017    
6018     trace_nfs4_sequence_done(session, res);
6019    
6020     @@ -804,7 +813,6 @@ static int nfs41_sequence_process(struct rpc_task *task,
6021     nfs4_slot_sequence_acked(slot, slot->seq_nr);
6022     /* Update the slot's sequence and clientid lease timer */
6023     slot->seq_done = 1;
6024     - clp = session->clp;
6025     do_renew_lease(clp, res->sr_timestamp);
6026     /* Check sequence flags */
6027     nfs41_handle_sequence_flag_errors(clp, res->sr_status_flags,
6028     @@ -852,10 +860,18 @@ static int nfs41_sequence_process(struct rpc_task *task,
6029     /*
6030     * Were one or more calls using this slot interrupted?
6031     * If the server never received the request, then our
6032     - * transmitted slot sequence number may be too high.
6033     + * transmitted slot sequence number may be too high. However,
6034     + * if the server did receive the request then it might
6035     + * accidentally give us a reply with a mismatched operation.
6036     + * We can sort this out by sending a lone sequence operation
6037     + * to the server on the same slot.
6038     */
6039     if ((s32)(slot->seq_nr - slot->seq_nr_last_acked) > 1) {
6040     slot->seq_nr--;
6041     + if (task->tk_msg.rpc_proc != &nfs4_procedures[NFSPROC4_CLNT_SEQUENCE]) {
6042     + nfs4_probe_sequence(clp, task->tk_msg.rpc_cred, slot);
6043     + res->sr_slot = NULL;
6044     + }
6045     goto retry_nowait;
6046     }
6047     /*
6048     diff --git a/fs/overlayfs/export.c b/fs/overlayfs/export.c
6049     index 73c9775215b3..11dd8177770d 100644
6050     --- a/fs/overlayfs/export.c
6051     +++ b/fs/overlayfs/export.c
6052     @@ -482,7 +482,7 @@ static struct dentry *ovl_lookup_real_inode(struct super_block *sb,
6053     if (IS_ERR_OR_NULL(this))
6054     return this;
6055    
6056     - if (WARN_ON(ovl_dentry_real_at(this, layer->idx) != real)) {
6057     + if (ovl_dentry_real_at(this, layer->idx) != real) {
6058     dput(this);
6059     this = ERR_PTR(-EIO);
6060     }
6061     diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c
6062     index 15e4fa288475..7a08a576f7b2 100644
6063     --- a/fs/overlayfs/file.c
6064     +++ b/fs/overlayfs/file.c
6065     @@ -21,13 +21,16 @@ static char ovl_whatisit(struct inode *inode, struct inode *realinode)
6066     return 'm';
6067     }
6068    
6069     +/* No atime modificaton nor notify on underlying */
6070     +#define OVL_OPEN_FLAGS (O_NOATIME | FMODE_NONOTIFY)
6071     +
6072     static struct file *ovl_open_realfile(const struct file *file,
6073     struct inode *realinode)
6074     {
6075     struct inode *inode = file_inode(file);
6076     struct file *realfile;
6077     const struct cred *old_cred;
6078     - int flags = file->f_flags | O_NOATIME | FMODE_NONOTIFY;
6079     + int flags = file->f_flags | OVL_OPEN_FLAGS;
6080    
6081     old_cred = ovl_override_creds(inode->i_sb);
6082     realfile = open_with_fake_path(&file->f_path, flags, realinode,
6083     @@ -48,8 +51,7 @@ static int ovl_change_flags(struct file *file, unsigned int flags)
6084     struct inode *inode = file_inode(file);
6085     int err;
6086    
6087     - /* No atime modificaton on underlying */
6088     - flags |= O_NOATIME | FMODE_NONOTIFY;
6089     + flags |= OVL_OPEN_FLAGS;
6090    
6091     /* If some flag changed that cannot be changed then something's amiss */
6092     if (WARN_ON((file->f_flags ^ flags) & ~OVL_SETFL_MASK))
6093     @@ -102,7 +104,7 @@ static int ovl_real_fdget_meta(const struct file *file, struct fd *real,
6094     }
6095    
6096     /* Did the flags change since open? */
6097     - if (unlikely((file->f_flags ^ real->file->f_flags) & ~O_NOATIME))
6098     + if (unlikely((file->f_flags ^ real->file->f_flags) & ~OVL_OPEN_FLAGS))
6099     return ovl_change_flags(real->file, file->f_flags);
6100    
6101     return 0;
6102     diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
6103     index 7621ff176d15..d6b724beb304 100644
6104     --- a/fs/overlayfs/super.c
6105     +++ b/fs/overlayfs/super.c
6106     @@ -1258,6 +1258,18 @@ static bool ovl_lower_uuid_ok(struct ovl_fs *ofs, const uuid_t *uuid)
6107     if (!ofs->config.nfs_export && !ofs->upper_mnt)
6108     return true;
6109    
6110     + /*
6111     + * We allow using single lower with null uuid for index and nfs_export
6112     + * for example to support those features with single lower squashfs.
6113     + * To avoid regressions in setups of overlay with re-formatted lower
6114     + * squashfs, do not allow decoding origin with lower null uuid unless
6115     + * user opted-in to one of the new features that require following the
6116     + * lower inode of non-dir upper.
6117     + */
6118     + if (!ofs->config.index && !ofs->config.metacopy && !ofs->config.xino &&
6119     + uuid_is_null(uuid))
6120     + return false;
6121     +
6122     for (i = 0; i < ofs->numlowerfs; i++) {
6123     /*
6124     * We use uuid to associate an overlay lower file handle with a
6125     @@ -1344,14 +1356,23 @@ static int ovl_get_lower_layers(struct super_block *sb, struct ovl_fs *ofs,
6126     if (err < 0)
6127     goto out;
6128    
6129     + /*
6130     + * Check if lower root conflicts with this overlay layers before
6131     + * checking if it is in-use as upperdir/workdir of "another"
6132     + * mount, because we do not bother to check in ovl_is_inuse() if
6133     + * the upperdir/workdir is in fact in-use by our
6134     + * upperdir/workdir.
6135     + */
6136     err = ovl_setup_trap(sb, stack[i].dentry, &trap, "lowerdir");
6137     if (err)
6138     goto out;
6139    
6140     if (ovl_is_inuse(stack[i].dentry)) {
6141     err = ovl_report_in_use(ofs, "lowerdir");
6142     - if (err)
6143     + if (err) {
6144     + iput(trap);
6145     goto out;
6146     + }
6147     }
6148    
6149     mnt = clone_private_mount(&stack[i]);
6150     diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
6151     index bff1def62eed..d5338b9ee550 100644
6152     --- a/include/linux/blkdev.h
6153     +++ b/include/linux/blkdev.h
6154     @@ -592,6 +592,7 @@ struct request_queue {
6155     u64 write_hints[BLK_MAX_WRITE_HINTS];
6156     };
6157    
6158     +/* Keep blk_queue_flag_name[] in sync with the definitions below */
6159     #define QUEUE_FLAG_STOPPED 0 /* queue is stopped */
6160     #define QUEUE_FLAG_DYING 1 /* queue being torn down */
6161     #define QUEUE_FLAG_NOMERGES 3 /* disable merge attempts */
6162     diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h
6163     index 430e219e3aba..1ccfa3779e18 100644
6164     --- a/include/linux/cgroup-defs.h
6165     +++ b/include/linux/cgroup-defs.h
6166     @@ -797,7 +797,9 @@ struct sock_cgroup_data {
6167     union {
6168     #ifdef __LITTLE_ENDIAN
6169     struct {
6170     - u8 is_data;
6171     + u8 is_data : 1;
6172     + u8 no_refcnt : 1;
6173     + u8 unused : 6;
6174     u8 padding;
6175     u16 prioidx;
6176     u32 classid;
6177     @@ -807,7 +809,9 @@ struct sock_cgroup_data {
6178     u32 classid;
6179     u16 prioidx;
6180     u8 padding;
6181     - u8 is_data;
6182     + u8 unused : 6;
6183     + u8 no_refcnt : 1;
6184     + u8 is_data : 1;
6185     } __packed;
6186     #endif
6187     u64 val;
6188     diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
6189     index 57577075d204..202852383ae9 100644
6190     --- a/include/linux/cgroup.h
6191     +++ b/include/linux/cgroup.h
6192     @@ -822,6 +822,7 @@ extern spinlock_t cgroup_sk_update_lock;
6193    
6194     void cgroup_sk_alloc_disable(void);
6195     void cgroup_sk_alloc(struct sock_cgroup_data *skcd);
6196     +void cgroup_sk_clone(struct sock_cgroup_data *skcd);
6197     void cgroup_sk_free(struct sock_cgroup_data *skcd);
6198    
6199     static inline struct cgroup *sock_cgroup_ptr(struct sock_cgroup_data *skcd)
6200     @@ -835,7 +836,7 @@ static inline struct cgroup *sock_cgroup_ptr(struct sock_cgroup_data *skcd)
6201     */
6202     v = READ_ONCE(skcd->val);
6203    
6204     - if (v & 1)
6205     + if (v & 3)
6206     return &cgrp_dfl_root.cgrp;
6207    
6208     return (struct cgroup *)(unsigned long)v ?: &cgrp_dfl_root.cgrp;
6209     @@ -847,6 +848,7 @@ static inline struct cgroup *sock_cgroup_ptr(struct sock_cgroup_data *skcd)
6210     #else /* CONFIG_CGROUP_DATA */
6211    
6212     static inline void cgroup_sk_alloc(struct sock_cgroup_data *skcd) {}
6213     +static inline void cgroup_sk_clone(struct sock_cgroup_data *skcd) {}
6214     static inline void cgroup_sk_free(struct sock_cgroup_data *skcd) {}
6215    
6216     #endif /* CONFIG_CGROUP_DATA */
6217     diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h
6218     index b05e855f1ddd..41a518336673 100644
6219     --- a/include/linux/if_vlan.h
6220     +++ b/include/linux/if_vlan.h
6221     @@ -25,6 +25,8 @@
6222     #define VLAN_ETH_DATA_LEN 1500 /* Max. octets in payload */
6223     #define VLAN_ETH_FRAME_LEN 1518 /* Max. octets in frame sans FCS */
6224    
6225     +#define VLAN_MAX_DEPTH 8 /* Max. number of nested VLAN tags parsed */
6226     +
6227     /*
6228     * struct vlan_hdr - vlan header
6229     * @h_vlan_TCI: priority and VLAN ID
6230     @@ -577,10 +579,10 @@ static inline int vlan_get_tag(const struct sk_buff *skb, u16 *vlan_tci)
6231     * Returns the EtherType of the packet, regardless of whether it is
6232     * vlan encapsulated (normal or hardware accelerated) or not.
6233     */
6234     -static inline __be16 __vlan_get_protocol(struct sk_buff *skb, __be16 type,
6235     +static inline __be16 __vlan_get_protocol(const struct sk_buff *skb, __be16 type,
6236     int *depth)
6237     {
6238     - unsigned int vlan_depth = skb->mac_len;
6239     + unsigned int vlan_depth = skb->mac_len, parse_depth = VLAN_MAX_DEPTH;
6240    
6241     /* if type is 802.1Q/AD then the header should already be
6242     * present at mac_len - VLAN_HLEN (if mac_len > 0), or at
6243     @@ -595,13 +597,12 @@ static inline __be16 __vlan_get_protocol(struct sk_buff *skb, __be16 type,
6244     vlan_depth = ETH_HLEN;
6245     }
6246     do {
6247     - struct vlan_hdr *vh;
6248     + struct vlan_hdr vhdr, *vh;
6249    
6250     - if (unlikely(!pskb_may_pull(skb,
6251     - vlan_depth + VLAN_HLEN)))
6252     + vh = skb_header_pointer(skb, vlan_depth, sizeof(vhdr), &vhdr);
6253     + if (unlikely(!vh || !--parse_depth))
6254     return 0;
6255    
6256     - vh = (struct vlan_hdr *)(skb->data + vlan_depth);
6257     type = vh->h_vlan_encapsulated_proto;
6258     vlan_depth += VLAN_HLEN;
6259     } while (eth_type_vlan(type));
6260     @@ -620,11 +621,25 @@ static inline __be16 __vlan_get_protocol(struct sk_buff *skb, __be16 type,
6261     * Returns the EtherType of the packet, regardless of whether it is
6262     * vlan encapsulated (normal or hardware accelerated) or not.
6263     */
6264     -static inline __be16 vlan_get_protocol(struct sk_buff *skb)
6265     +static inline __be16 vlan_get_protocol(const struct sk_buff *skb)
6266     {
6267     return __vlan_get_protocol(skb, skb->protocol, NULL);
6268     }
6269    
6270     +/* A getter for the SKB protocol field which will handle VLAN tags consistently
6271     + * whether VLAN acceleration is enabled or not.
6272     + */
6273     +static inline __be16 skb_protocol(const struct sk_buff *skb, bool skip_vlan)
6274     +{
6275     + if (!skip_vlan)
6276     + /* VLAN acceleration strips the VLAN header from the skb and
6277     + * moves it to skb->vlan_proto
6278     + */
6279     + return skb_vlan_tag_present(skb) ? skb->vlan_proto : skb->protocol;
6280     +
6281     + return vlan_get_protocol(skb);
6282     +}
6283     +
6284     static inline void vlan_set_encap_proto(struct sk_buff *skb,
6285     struct vlan_hdr *vhdr)
6286     {
6287     diff --git a/include/linux/input/elan-i2c-ids.h b/include/linux/input/elan-i2c-ids.h
6288     index 1ecb6b45812c..520858d12680 100644
6289     --- a/include/linux/input/elan-i2c-ids.h
6290     +++ b/include/linux/input/elan-i2c-ids.h
6291     @@ -67,8 +67,15 @@ static const struct acpi_device_id elan_acpi_id[] = {
6292     { "ELAN062B", 0 },
6293     { "ELAN062C", 0 },
6294     { "ELAN062D", 0 },
6295     + { "ELAN062E", 0 }, /* Lenovo V340 Whiskey Lake U */
6296     + { "ELAN062F", 0 }, /* Lenovo V340 Comet Lake U */
6297     { "ELAN0631", 0 },
6298     { "ELAN0632", 0 },
6299     + { "ELAN0633", 0 }, /* Lenovo S145 */
6300     + { "ELAN0634", 0 }, /* Lenovo V340 Ice lake */
6301     + { "ELAN0635", 0 }, /* Lenovo V1415-IIL */
6302     + { "ELAN0636", 0 }, /* Lenovo V1415-Dali */
6303     + { "ELAN0637", 0 }, /* Lenovo V1415-IGLR */
6304     { "ELAN1000", 0 },
6305     { }
6306     };
6307     diff --git a/include/linux/platform_data/ti-sysc.h b/include/linux/platform_data/ti-sysc.h
6308     index 2cbde6542849..5fcc9bc9e751 100644
6309     --- a/include/linux/platform_data/ti-sysc.h
6310     +++ b/include/linux/platform_data/ti-sysc.h
6311     @@ -49,6 +49,7 @@ struct sysc_regbits {
6312     s8 emufree_shift;
6313     };
6314    
6315     +#define SYSC_MODULE_QUIRK_RTC_UNLOCK BIT(22)
6316     #define SYSC_QUIRK_CLKDM_NOAUTO BIT(21)
6317     #define SYSC_QUIRK_FORCE_MSTANDBY BIT(20)
6318     #define SYSC_MODULE_QUIRK_AESS BIT(19)
6319     diff --git a/include/net/dst.h b/include/net/dst.h
6320     index 3448cf865ede..433f7c1ce8a9 100644
6321     --- a/include/net/dst.h
6322     +++ b/include/net/dst.h
6323     @@ -401,7 +401,15 @@ static inline struct neighbour *dst_neigh_lookup(const struct dst_entry *dst, co
6324     static inline struct neighbour *dst_neigh_lookup_skb(const struct dst_entry *dst,
6325     struct sk_buff *skb)
6326     {
6327     - struct neighbour *n = dst->ops->neigh_lookup(dst, skb, NULL);
6328     + struct neighbour *n = NULL;
6329     +
6330     + /* The packets from tunnel devices (eg bareudp) may have only
6331     + * metadata in the dst pointer of skb. Hence a pointer check of
6332     + * neigh_lookup is needed.
6333     + */
6334     + if (dst->ops->neigh_lookup)
6335     + n = dst->ops->neigh_lookup(dst, skb, NULL);
6336     +
6337     return IS_ERR(n) ? NULL : n;
6338     }
6339    
6340     diff --git a/include/net/genetlink.h b/include/net/genetlink.h
6341     index 9292f1c588b7..2d9e67a69cbe 100644
6342     --- a/include/net/genetlink.h
6343     +++ b/include/net/genetlink.h
6344     @@ -35,12 +35,6 @@ struct genl_info;
6345     * do additional, common, filtering and return an error
6346     * @post_doit: called after an operation's doit callback, it may
6347     * undo operations done by pre_doit, for example release locks
6348     - * @mcast_bind: a socket bound to the given multicast group (which
6349     - * is given as the offset into the groups array)
6350     - * @mcast_unbind: a socket was unbound from the given multicast group.
6351     - * Note that unbind() will not be called symmetrically if the
6352     - * generic netlink family is removed while there are still open
6353     - * sockets.
6354     * @attrbuf: buffer to store parsed attributes (private)
6355     * @mcgrps: multicast groups used by this family
6356     * @n_mcgrps: number of multicast groups
6357     @@ -64,8 +58,6 @@ struct genl_family {
6358     void (*post_doit)(const struct genl_ops *ops,
6359     struct sk_buff *skb,
6360     struct genl_info *info);
6361     - int (*mcast_bind)(struct net *net, int group);
6362     - void (*mcast_unbind)(struct net *net, int group);
6363     struct nlattr ** attrbuf; /* private */
6364     const struct genl_ops * ops;
6365     const struct genl_multicast_group *mcgrps;
6366     diff --git a/include/net/inet_ecn.h b/include/net/inet_ecn.h
6367     index 0f0d1efe06dd..e1eaf1780288 100644
6368     --- a/include/net/inet_ecn.h
6369     +++ b/include/net/inet_ecn.h
6370     @@ -4,6 +4,7 @@
6371    
6372     #include <linux/ip.h>
6373     #include <linux/skbuff.h>
6374     +#include <linux/if_vlan.h>
6375    
6376     #include <net/inet_sock.h>
6377     #include <net/dsfield.h>
6378     @@ -172,7 +173,7 @@ static inline void ipv6_copy_dscp(unsigned int dscp, struct ipv6hdr *inner)
6379    
6380     static inline int INET_ECN_set_ce(struct sk_buff *skb)
6381     {
6382     - switch (skb->protocol) {
6383     + switch (skb_protocol(skb, true)) {
6384     case cpu_to_be16(ETH_P_IP):
6385     if (skb_network_header(skb) + sizeof(struct iphdr) <=
6386     skb_tail_pointer(skb))
6387     @@ -191,7 +192,7 @@ static inline int INET_ECN_set_ce(struct sk_buff *skb)
6388    
6389     static inline int INET_ECN_set_ect1(struct sk_buff *skb)
6390     {
6391     - switch (skb->protocol) {
6392     + switch (skb_protocol(skb, true)) {
6393     case cpu_to_be16(ETH_P_IP):
6394     if (skb_network_header(skb) + sizeof(struct iphdr) <=
6395     skb_tail_pointer(skb))
6396     @@ -272,12 +273,16 @@ static inline int IP_ECN_decapsulate(const struct iphdr *oiph,
6397     {
6398     __u8 inner;
6399    
6400     - if (skb->protocol == htons(ETH_P_IP))
6401     + switch (skb_protocol(skb, true)) {
6402     + case htons(ETH_P_IP):
6403     inner = ip_hdr(skb)->tos;
6404     - else if (skb->protocol == htons(ETH_P_IPV6))
6405     + break;
6406     + case htons(ETH_P_IPV6):
6407     inner = ipv6_get_dsfield(ipv6_hdr(skb));
6408     - else
6409     + break;
6410     + default:
6411     return 0;
6412     + }
6413    
6414     return INET_ECN_decapsulate(skb, oiph->tos, inner);
6415     }
6416     @@ -287,12 +292,16 @@ static inline int IP6_ECN_decapsulate(const struct ipv6hdr *oipv6h,
6417     {
6418     __u8 inner;
6419    
6420     - if (skb->protocol == htons(ETH_P_IP))
6421     + switch (skb_protocol(skb, true)) {
6422     + case htons(ETH_P_IP):
6423     inner = ip_hdr(skb)->tos;
6424     - else if (skb->protocol == htons(ETH_P_IPV6))
6425     + break;
6426     + case htons(ETH_P_IPV6):
6427     inner = ipv6_get_dsfield(ipv6_hdr(skb));
6428     - else
6429     + break;
6430     + default:
6431     return 0;
6432     + }
6433    
6434     return INET_ECN_decapsulate(skb, ipv6_get_dsfield(oipv6h), inner);
6435     }
6436     diff --git a/include/net/pkt_sched.h b/include/net/pkt_sched.h
6437     index 6a70845bd9ab..cee1c084e9f4 100644
6438     --- a/include/net/pkt_sched.h
6439     +++ b/include/net/pkt_sched.h
6440     @@ -128,17 +128,6 @@ static inline void qdisc_run(struct Qdisc *q)
6441     }
6442     }
6443    
6444     -static inline __be16 tc_skb_protocol(const struct sk_buff *skb)
6445     -{
6446     - /* We need to take extra care in case the skb came via
6447     - * vlan accelerated path. In that case, use skb->vlan_proto
6448     - * as the original vlan header was already stripped.
6449     - */
6450     - if (skb_vlan_tag_present(skb))
6451     - return skb->vlan_proto;
6452     - return skb->protocol;
6453     -}
6454     -
6455     /* Calculate maximal size of packet seen by hard_start_xmit
6456     routine of this device.
6457     */
6458     diff --git a/include/trace/events/rxrpc.h b/include/trace/events/rxrpc.h
6459     index ba9efdc848f9..059b6e45a028 100644
6460     --- a/include/trace/events/rxrpc.h
6461     +++ b/include/trace/events/rxrpc.h
6462     @@ -400,7 +400,7 @@ enum rxrpc_tx_point {
6463     EM(rxrpc_cong_begin_retransmission, " Retrans") \
6464     EM(rxrpc_cong_cleared_nacks, " Cleared") \
6465     EM(rxrpc_cong_new_low_nack, " NewLowN") \
6466     - EM(rxrpc_cong_no_change, "") \
6467     + EM(rxrpc_cong_no_change, " -") \
6468     EM(rxrpc_cong_progress, " Progres") \
6469     EM(rxrpc_cong_retransmit_again, " ReTxAgn") \
6470     EM(rxrpc_cong_rtt_window_end, " RttWinE") \
6471     diff --git a/include/uapi/linux/vboxguest.h b/include/uapi/linux/vboxguest.h
6472     index 9cec58a6a5ea..f79d7abe27db 100644
6473     --- a/include/uapi/linux/vboxguest.h
6474     +++ b/include/uapi/linux/vboxguest.h
6475     @@ -103,7 +103,7 @@ VMMDEV_ASSERT_SIZE(vbg_ioctl_driver_version_info, 24 + 20);
6476    
6477    
6478     /* IOCTL to perform a VMM Device request larger then 1KB. */
6479     -#define VBG_IOCTL_VMMDEV_REQUEST_BIG _IOC(_IOC_READ | _IOC_WRITE, 'V', 3, 0)
6480     +#define VBG_IOCTL_VMMDEV_REQUEST_BIG _IO('V', 3)
6481    
6482    
6483     /** VBG_IOCTL_HGCM_CONNECT data structure. */
6484     @@ -198,7 +198,7 @@ struct vbg_ioctl_log {
6485     } u;
6486     };
6487    
6488     -#define VBG_IOCTL_LOG(s) _IOC(_IOC_READ | _IOC_WRITE, 'V', 9, s)
6489     +#define VBG_IOCTL_LOG(s) _IO('V', 9)
6490    
6491    
6492     /** VBG_IOCTL_WAIT_FOR_EVENTS data structure. */
6493     diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
6494     index 7c9e97553a00..35faf082a709 100644
6495     --- a/kernel/cgroup/cgroup.c
6496     +++ b/kernel/cgroup/cgroup.c
6497     @@ -6379,18 +6379,8 @@ void cgroup_sk_alloc_disable(void)
6498    
6499     void cgroup_sk_alloc(struct sock_cgroup_data *skcd)
6500     {
6501     - if (cgroup_sk_alloc_disabled)
6502     - return;
6503     -
6504     - /* Socket clone path */
6505     - if (skcd->val) {
6506     - /*
6507     - * We might be cloning a socket which is left in an empty
6508     - * cgroup and the cgroup might have already been rmdir'd.
6509     - * Don't use cgroup_get_live().
6510     - */
6511     - cgroup_get(sock_cgroup_ptr(skcd));
6512     - cgroup_bpf_get(sock_cgroup_ptr(skcd));
6513     + if (cgroup_sk_alloc_disabled) {
6514     + skcd->no_refcnt = 1;
6515     return;
6516     }
6517    
6518     @@ -6415,10 +6405,27 @@ void cgroup_sk_alloc(struct sock_cgroup_data *skcd)
6519     rcu_read_unlock();
6520     }
6521    
6522     +void cgroup_sk_clone(struct sock_cgroup_data *skcd)
6523     +{
6524     + if (skcd->val) {
6525     + if (skcd->no_refcnt)
6526     + return;
6527     + /*
6528     + * We might be cloning a socket which is left in an empty
6529     + * cgroup and the cgroup might have already been rmdir'd.
6530     + * Don't use cgroup_get_live().
6531     + */
6532     + cgroup_get(sock_cgroup_ptr(skcd));
6533     + cgroup_bpf_get(sock_cgroup_ptr(skcd));
6534     + }
6535     +}
6536     +
6537     void cgroup_sk_free(struct sock_cgroup_data *skcd)
6538     {
6539     struct cgroup *cgrp = sock_cgroup_ptr(skcd);
6540    
6541     + if (skcd->no_refcnt)
6542     + return;
6543     cgroup_bpf_put(cgrp);
6544     cgroup_put(cgrp);
6545     }
6546     diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
6547     index b304c17d53a3..df73685de114 100644
6548     --- a/kernel/irq/manage.c
6549     +++ b/kernel/irq/manage.c
6550     @@ -194,9 +194,9 @@ void irq_set_thread_affinity(struct irq_desc *desc)
6551     set_bit(IRQTF_AFFINITY, &action->thread_flags);
6552     }
6553    
6554     +#ifdef CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK
6555     static void irq_validate_effective_affinity(struct irq_data *data)
6556     {
6557     -#ifdef CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK
6558     const struct cpumask *m = irq_data_get_effective_affinity_mask(data);
6559     struct irq_chip *chip = irq_data_get_irq_chip(data);
6560    
6561     @@ -204,9 +204,19 @@ static void irq_validate_effective_affinity(struct irq_data *data)
6562     return;
6563     pr_warn_once("irq_chip %s did not update eff. affinity mask of irq %u\n",
6564     chip->name, data->irq);
6565     -#endif
6566     }
6567    
6568     +static inline void irq_init_effective_affinity(struct irq_data *data,
6569     + const struct cpumask *mask)
6570     +{
6571     + cpumask_copy(irq_data_get_effective_affinity_mask(data), mask);
6572     +}
6573     +#else
6574     +static inline void irq_validate_effective_affinity(struct irq_data *data) { }
6575     +static inline void irq_init_effective_affinity(struct irq_data *data,
6576     + const struct cpumask *mask) { }
6577     +#endif
6578     +
6579     int irq_do_set_affinity(struct irq_data *data, const struct cpumask *mask,
6580     bool force)
6581     {
6582     @@ -265,6 +275,26 @@ static int irq_try_set_affinity(struct irq_data *data,
6583     return ret;
6584     }
6585    
6586     +static bool irq_set_affinity_deactivated(struct irq_data *data,
6587     + const struct cpumask *mask, bool force)
6588     +{
6589     + struct irq_desc *desc = irq_data_to_desc(data);
6590     +
6591     + /*
6592     + * If the interrupt is not yet activated, just store the affinity
6593     + * mask and do not call the chip driver at all. On activation the
6594     + * driver has to make sure anyway that the interrupt is in a
6595     + * useable state so startup works.
6596     + */
6597     + if (!IS_ENABLED(CONFIG_IRQ_DOMAIN_HIERARCHY) || irqd_is_activated(data))
6598     + return false;
6599     +
6600     + cpumask_copy(desc->irq_common_data.affinity, mask);
6601     + irq_init_effective_affinity(data, mask);
6602     + irqd_set(data, IRQD_AFFINITY_SET);
6603     + return true;
6604     +}
6605     +
6606     int irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask,
6607     bool force)
6608     {
6609     @@ -275,6 +305,9 @@ int irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask,
6610     if (!chip || !chip->irq_set_affinity)
6611     return -EINVAL;
6612    
6613     + if (irq_set_affinity_deactivated(data, mask, force))
6614     + return 0;
6615     +
6616     if (irq_can_move_pcntxt(data) && !irqd_is_setaffinity_pending(data)) {
6617     ret = irq_try_set_affinity(data, mask, force);
6618     } else {
6619     diff --git a/kernel/sched/core.c b/kernel/sched/core.c
6620     index 8b3e99d095ae..38ae3cf9d173 100644
6621     --- a/kernel/sched/core.c
6622     +++ b/kernel/sched/core.c
6623     @@ -2889,6 +2889,7 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p)
6624     * Silence PROVE_RCU.
6625     */
6626     raw_spin_lock_irqsave(&p->pi_lock, flags);
6627     + rseq_migrate(p);
6628     /*
6629     * We're setting the CPU for the first time, we don't migrate,
6630     * so use __set_task_cpu().
6631     @@ -2953,6 +2954,7 @@ void wake_up_new_task(struct task_struct *p)
6632     * as we're not fully set-up yet.
6633     */
6634     p->recent_used_cpu = task_cpu(p);
6635     + rseq_migrate(p);
6636     __set_task_cpu(p, select_task_rq(p, task_cpu(p), SD_BALANCE_FORK, 0));
6637     #endif
6638     rq = __task_rq_lock(p, &rf);
6639     diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
6640     index 2f81e4ae844e..9b16080093be 100644
6641     --- a/kernel/sched/fair.c
6642     +++ b/kernel/sched/fair.c
6643     @@ -3824,7 +3824,11 @@ static inline void update_misfit_status(struct task_struct *p, struct rq *rq)
6644     return;
6645     }
6646    
6647     - rq->misfit_task_load = task_h_load(p);
6648     + /*
6649     + * Make sure that misfit_task_load will not be null even if
6650     + * task_h_load() returns 0.
6651     + */
6652     + rq->misfit_task_load = max_t(unsigned long, task_h_load(p), 1);
6653     }
6654    
6655     #else /* CONFIG_SMP */
6656     @@ -7407,7 +7411,15 @@ static int detach_tasks(struct lb_env *env)
6657     if (!can_migrate_task(p, env))
6658     goto next;
6659    
6660     - load = task_h_load(p);
6661     + /*
6662     + * Depending of the number of CPUs and tasks and the
6663     + * cgroup hierarchy, task_h_load() can return a null
6664     + * value. Make sure that env->imbalance decreases
6665     + * otherwise detach_tasks() will stop only after
6666     + * detaching up to loop_max tasks.
6667     + */
6668     + load = max_t(unsigned long, task_h_load(p), 1);
6669     +
6670    
6671     if (sched_feat(LB_MIN) && load < 16 && !env->sd->nr_balance_failed)
6672     goto next;
6673     diff --git a/kernel/time/timer.c b/kernel/time/timer.c
6674     index 4820823515e9..1e9b81a930c0 100644
6675     --- a/kernel/time/timer.c
6676     +++ b/kernel/time/timer.c
6677     @@ -522,8 +522,8 @@ static int calc_wheel_index(unsigned long expires, unsigned long clk)
6678     * Force expire obscene large timeouts to expire at the
6679     * capacity limit of the wheel.
6680     */
6681     - if (expires >= WHEEL_TIMEOUT_CUTOFF)
6682     - expires = WHEEL_TIMEOUT_MAX;
6683     + if (delta >= WHEEL_TIMEOUT_CUTOFF)
6684     + expires = clk + WHEEL_TIMEOUT_MAX;
6685    
6686     idx = calc_index(expires, LVL_DEPTH - 1);
6687     }
6688     @@ -585,7 +585,15 @@ trigger_dyntick_cpu(struct timer_base *base, struct timer_list *timer)
6689     * Set the next expiry time and kick the CPU so it can reevaluate the
6690     * wheel:
6691     */
6692     - base->next_expiry = timer->expires;
6693     + if (time_before(timer->expires, base->clk)) {
6694     + /*
6695     + * Prevent from forward_timer_base() moving the base->clk
6696     + * backward
6697     + */
6698     + base->next_expiry = base->clk;
6699     + } else {
6700     + base->next_expiry = timer->expires;
6701     + }
6702     wake_up_nohz_cpu(base->cpu);
6703     }
6704    
6705     @@ -897,10 +905,13 @@ static inline void forward_timer_base(struct timer_base *base)
6706     * If the next expiry value is > jiffies, then we fast forward to
6707     * jiffies otherwise we forward to the next expiry value.
6708     */
6709     - if (time_after(base->next_expiry, jnow))
6710     + if (time_after(base->next_expiry, jnow)) {
6711     base->clk = jnow;
6712     - else
6713     + } else {
6714     + if (WARN_ON_ONCE(time_before(base->next_expiry, base->clk)))
6715     + return;
6716     base->clk = base->next_expiry;
6717     + }
6718     #endif
6719     }
6720    
6721     diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
6722     index ad12fe3fca8c..ee2902b51d45 100644
6723     --- a/net/bridge/br_multicast.c
6724     +++ b/net/bridge/br_multicast.c
6725     @@ -1007,7 +1007,7 @@ static int br_ip6_multicast_mld2_report(struct net_bridge *br,
6726     nsrcs_offset = len + offsetof(struct mld2_grec, grec_nsrcs);
6727    
6728     if (skb_transport_offset(skb) + ipv6_transport_len(skb) <
6729     - nsrcs_offset + sizeof(_nsrcs))
6730     + nsrcs_offset + sizeof(__nsrcs))
6731     return -EINVAL;
6732    
6733     _nsrcs = skb_header_pointer(skb, nsrcs_offset,
6734     diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
6735     index e513b8876d13..a8481da37f1a 100644
6736     --- a/net/ceph/osd_client.c
6737     +++ b/net/ceph/osd_client.c
6738     @@ -445,6 +445,7 @@ static void target_copy(struct ceph_osd_request_target *dest,
6739     dest->size = src->size;
6740     dest->min_size = src->min_size;
6741     dest->sort_bitwise = src->sort_bitwise;
6742     + dest->recovery_deletes = src->recovery_deletes;
6743    
6744     dest->flags = src->flags;
6745     dest->paused = src->paused;
6746     diff --git a/net/core/filter.c b/net/core/filter.c
6747     index a0a492f7cf9c..bd1e46d61d8a 100644
6748     --- a/net/core/filter.c
6749     +++ b/net/core/filter.c
6750     @@ -5730,12 +5730,16 @@ BPF_CALL_1(bpf_skb_ecn_set_ce, struct sk_buff *, skb)
6751     {
6752     unsigned int iphdr_len;
6753    
6754     - if (skb->protocol == cpu_to_be16(ETH_P_IP))
6755     + switch (skb_protocol(skb, true)) {
6756     + case cpu_to_be16(ETH_P_IP):
6757     iphdr_len = sizeof(struct iphdr);
6758     - else if (skb->protocol == cpu_to_be16(ETH_P_IPV6))
6759     + break;
6760     + case cpu_to_be16(ETH_P_IPV6):
6761     iphdr_len = sizeof(struct ipv6hdr);
6762     - else
6763     + break;
6764     + default:
6765     return 0;
6766     + }
6767    
6768     if (skb_headlen(skb) < iphdr_len)
6769     return 0;
6770     diff --git a/net/core/sock.c b/net/core/sock.c
6771     index 078791a6649a..33a232974374 100644
6772     --- a/net/core/sock.c
6773     +++ b/net/core/sock.c
6774     @@ -1837,7 +1837,7 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority)
6775     /* sk->sk_memcg will be populated at accept() time */
6776     newsk->sk_memcg = NULL;
6777    
6778     - cgroup_sk_alloc(&newsk->sk_cgrp_data);
6779     + cgroup_sk_clone(&newsk->sk_cgrp_data);
6780    
6781     rcu_read_lock();
6782     filter = rcu_dereference(sk->sk_filter);
6783     diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
6784     index ac95ba78b903..73f46cb5e51d 100644
6785     --- a/net/ipv4/icmp.c
6786     +++ b/net/ipv4/icmp.c
6787     @@ -427,7 +427,7 @@ static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb)
6788    
6789     ipcm_init(&ipc);
6790     inet->tos = ip_hdr(skb)->tos;
6791     - sk->sk_mark = mark;
6792     + ipc.sockc.mark = mark;
6793     daddr = ipc.addr = ip_hdr(skb)->saddr;
6794     saddr = fib_compute_spec_dst(skb);
6795    
6796     @@ -709,10 +709,10 @@ void __icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info,
6797     icmp_param.skb = skb_in;
6798     icmp_param.offset = skb_network_offset(skb_in);
6799     inet_sk(sk)->tos = tos;
6800     - sk->sk_mark = mark;
6801     ipcm_init(&ipc);
6802     ipc.addr = iph->saddr;
6803     ipc.opt = &icmp_param.replyopts.opt;
6804     + ipc.sockc.mark = mark;
6805    
6806     rt = icmp_route_lookup(net, &fl4, skb_in, iph, saddr, tos, mark,
6807     type, code, &icmp_param);
6808     diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
6809     index b268ee1c1b44..b36c4a3159e5 100644
6810     --- a/net/ipv4/ip_output.c
6811     +++ b/net/ipv4/ip_output.c
6812     @@ -1704,7 +1704,7 @@ void ip_send_unicast_reply(struct sock *sk, struct sk_buff *skb,
6813     sk->sk_protocol = ip_hdr(skb)->protocol;
6814     sk->sk_bound_dev_if = arg->bound_dev_if;
6815     sk->sk_sndbuf = sysctl_wmem_default;
6816     - sk->sk_mark = fl4.flowi4_mark;
6817     + ipc.sockc.mark = fl4.flowi4_mark;
6818     err = ip_append_data(sk, &fl4, ip_reply_glue_bits, arg->iov->iov_base,
6819     len, 0, &ipc, &rt, MSG_DONTWAIT);
6820     if (unlikely(err)) {
6821     diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
6822     index 535427292194..df6fbefe44d4 100644
6823     --- a/net/ipv4/ping.c
6824     +++ b/net/ipv4/ping.c
6825     @@ -786,6 +786,9 @@ static int ping_v4_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
6826     inet_sk_flowi_flags(sk), faddr, saddr, 0, 0,
6827     sk->sk_uid);
6828    
6829     + fl4.fl4_icmp_type = user_icmph.type;
6830     + fl4.fl4_icmp_code = user_icmph.code;
6831     +
6832     security_sk_classify_flow(sk, flowi4_to_flowi(&fl4));
6833     rt = ip_route_output_flow(net, &fl4, sk);
6834     if (IS_ERR(rt)) {
6835     diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
6836     index fe3cdeddd097..840901154210 100644
6837     --- a/net/ipv4/tcp.c
6838     +++ b/net/ipv4/tcp.c
6839     @@ -2631,6 +2631,9 @@ int tcp_disconnect(struct sock *sk, int flags)
6840     tp->window_clamp = 0;
6841     tp->delivered = 0;
6842     tp->delivered_ce = 0;
6843     + if (icsk->icsk_ca_ops->release)
6844     + icsk->icsk_ca_ops->release(sk);
6845     + memset(icsk->icsk_ca_priv, 0, sizeof(icsk->icsk_ca_priv));
6846     tcp_set_ca_state(sk, TCP_CA_Open);
6847     tp->is_sack_reneg = 0;
6848     tcp_clear_retrans(tp);
6849     @@ -3085,10 +3088,7 @@ static int do_tcp_setsockopt(struct sock *sk, int level,
6850     #ifdef CONFIG_TCP_MD5SIG
6851     case TCP_MD5SIG:
6852     case TCP_MD5SIG_EXT:
6853     - if ((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN))
6854     - err = tp->af_specific->md5_parse(sk, optname, optval, optlen);
6855     - else
6856     - err = -EINVAL;
6857     + err = tp->af_specific->md5_parse(sk, optname, optval, optlen);
6858     break;
6859     #endif
6860     case TCP_USER_TIMEOUT:
6861     @@ -3844,10 +3844,13 @@ EXPORT_SYMBOL(tcp_md5_hash_skb_data);
6862    
6863     int tcp_md5_hash_key(struct tcp_md5sig_pool *hp, const struct tcp_md5sig_key *key)
6864     {
6865     + u8 keylen = READ_ONCE(key->keylen); /* paired with WRITE_ONCE() in tcp_md5_do_add */
6866     struct scatterlist sg;
6867    
6868     - sg_init_one(&sg, key->key, key->keylen);
6869     - ahash_request_set_crypt(hp->md5_req, &sg, NULL, key->keylen);
6870     + sg_init_one(&sg, key->key, keylen);
6871     + ahash_request_set_crypt(hp->md5_req, &sg, NULL, keylen);
6872     +
6873     + /* tcp_md5_do_add() might change key->key under us */
6874     return crypto_ahash_update(hp->md5_req);
6875     }
6876     EXPORT_SYMBOL(tcp_md5_hash_key);
6877     diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c
6878     index c445a81d144e..d7a1f2ef6c52 100644
6879     --- a/net/ipv4/tcp_cong.c
6880     +++ b/net/ipv4/tcp_cong.c
6881     @@ -197,7 +197,7 @@ static void tcp_reinit_congestion_control(struct sock *sk,
6882     icsk->icsk_ca_setsockopt = 1;
6883     memset(icsk->icsk_ca_priv, 0, sizeof(icsk->icsk_ca_priv));
6884    
6885     - if (sk->sk_state != TCP_CLOSE)
6886     + if (!((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN)))
6887     tcp_init_congestion_control(sk);
6888     }
6889    
6890     diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
6891     index 3e63dc9c3eba..6d331307beca 100644
6892     --- a/net/ipv4/tcp_input.c
6893     +++ b/net/ipv4/tcp_input.c
6894     @@ -4564,6 +4564,7 @@ static void tcp_data_queue_ofo(struct sock *sk, struct sk_buff *skb)
6895    
6896     if (unlikely(tcp_try_rmem_schedule(sk, skb, skb->truesize))) {
6897     NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPOFODROP);
6898     + sk->sk_data_ready(sk);
6899     tcp_drop(sk, skb);
6900     return;
6901     }
6902     @@ -4807,6 +4808,7 @@ queue_and_out:
6903     sk_forced_mem_schedule(sk, skb->truesize);
6904     else if (tcp_try_rmem_schedule(sk, skb, skb->truesize)) {
6905     NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPRCVQDROP);
6906     + sk->sk_data_ready(sk);
6907     goto drop;
6908     }
6909    
6910     diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
6911     index eda64871f983..35f963690a70 100644
6912     --- a/net/ipv4/tcp_ipv4.c
6913     +++ b/net/ipv4/tcp_ipv4.c
6914     @@ -1077,9 +1077,18 @@ int tcp_md5_do_add(struct sock *sk, const union tcp_md5_addr *addr,
6915    
6916     key = tcp_md5_do_lookup_exact(sk, addr, family, prefixlen);
6917     if (key) {
6918     - /* Pre-existing entry - just update that one. */
6919     + /* Pre-existing entry - just update that one.
6920     + * Note that the key might be used concurrently.
6921     + */
6922     memcpy(key->key, newkey, newkeylen);
6923     - key->keylen = newkeylen;
6924     +
6925     + /* Pairs with READ_ONCE() in tcp_md5_hash_key().
6926     + * Also note that a reader could catch new key->keylen value
6927     + * but old key->key[], this is the reason we use __GFP_ZERO
6928     + * at sock_kmalloc() time below these lines.
6929     + */
6930     + WRITE_ONCE(key->keylen, newkeylen);
6931     +
6932     return 0;
6933     }
6934    
6935     @@ -1095,7 +1104,7 @@ int tcp_md5_do_add(struct sock *sk, const union tcp_md5_addr *addr,
6936     rcu_assign_pointer(tp->md5sig_info, md5sig);
6937     }
6938    
6939     - key = sock_kmalloc(sk, sizeof(*key), gfp);
6940     + key = sock_kmalloc(sk, sizeof(*key), gfp | __GFP_ZERO);
6941     if (!key)
6942     return -ENOMEM;
6943     if (!tcp_alloc_md5sig_pool()) {
6944     diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
6945     index c8d03c1b4c6b..5dc7485c4076 100644
6946     --- a/net/ipv4/tcp_output.c
6947     +++ b/net/ipv4/tcp_output.c
6948     @@ -662,7 +662,8 @@ static unsigned int tcp_synack_options(const struct sock *sk,
6949     unsigned int mss, struct sk_buff *skb,
6950     struct tcp_out_options *opts,
6951     const struct tcp_md5sig_key *md5,
6952     - struct tcp_fastopen_cookie *foc)
6953     + struct tcp_fastopen_cookie *foc,
6954     + enum tcp_synack_type synack_type)
6955     {
6956     struct inet_request_sock *ireq = inet_rsk(req);
6957     unsigned int remaining = MAX_TCP_OPTION_SPACE;
6958     @@ -677,7 +678,8 @@ static unsigned int tcp_synack_options(const struct sock *sk,
6959     * rather than TS in order to fit in better with old,
6960     * buggy kernels, but that was deemed to be unnecessary.
6961     */
6962     - ireq->tstamp_ok &= !ireq->sack_ok;
6963     + if (synack_type != TCP_SYNACK_COOKIE)
6964     + ireq->tstamp_ok &= !ireq->sack_ok;
6965     }
6966     #endif
6967    
6968     @@ -3326,7 +3328,7 @@ struct sk_buff *tcp_make_synack(const struct sock *sk, struct dst_entry *dst,
6969     #endif
6970     skb_set_hash(skb, tcp_rsk(req)->txhash, PKT_HASH_TYPE_L4);
6971     tcp_header_size = tcp_synack_options(sk, req, mss, skb, &opts, md5,
6972     - foc) + sizeof(*th);
6973     + foc, synack_type) + sizeof(*th);
6974    
6975     skb_push(skb, tcp_header_size);
6976     skb_reset_transport_header(skb);
6977     diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
6978     index 62c997201970..7d3a3894f785 100644
6979     --- a/net/ipv6/icmp.c
6980     +++ b/net/ipv6/icmp.c
6981     @@ -535,7 +535,6 @@ static void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info,
6982     if (!sk)
6983     goto out_bh_enable;
6984    
6985     - sk->sk_mark = mark;
6986     np = inet6_sk(sk);
6987    
6988     if (!icmpv6_xrlim_allow(sk, type, &fl6))
6989     @@ -552,6 +551,7 @@ static void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info,
6990     fl6.flowi6_oif = np->ucast_oif;
6991    
6992     ipcm6_init_sk(&ipc6, np);
6993     + ipc6.sockc.mark = mark;
6994     fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel);
6995    
6996     dst = icmpv6_route_lookup(net, skb, sk, &fl6);
6997     @@ -720,7 +720,6 @@ static void icmpv6_echo_reply(struct sk_buff *skb)
6998     sk = icmpv6_xmit_lock(net);
6999     if (!sk)
7000     goto out_bh_enable;
7001     - sk->sk_mark = mark;
7002     np = inet6_sk(sk);
7003    
7004     if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr))
7005     @@ -748,6 +747,7 @@ static void icmpv6_echo_reply(struct sk_buff *skb)
7006     ipcm6_init_sk(&ipc6, np);
7007     ipc6.hlimit = ip6_sk_dst_hoplimit(np, &fl6, dst);
7008     ipc6.tclass = ipv6_get_dsfield(ipv6_hdr(skb));
7009     + ipc6.sockc.mark = mark;
7010    
7011     if (ip6_append_data(sk, icmpv6_getfrag, &msg,
7012     skb->len + sizeof(struct icmp6hdr),
7013     diff --git a/net/ipv6/route.c b/net/ipv6/route.c
7014     index 3b4af0a8bca6..94ade43d5a45 100644
7015     --- a/net/ipv6/route.c
7016     +++ b/net/ipv6/route.c
7017     @@ -431,9 +431,12 @@ void fib6_select_path(const struct net *net, struct fib6_result *res,
7018     struct fib6_info *sibling, *next_sibling;
7019     struct fib6_info *match = res->f6i;
7020    
7021     - if ((!match->fib6_nsiblings && !match->nh) || have_oif_match)
7022     + if (!match->nh && (!match->fib6_nsiblings || have_oif_match))
7023     goto out;
7024    
7025     + if (match->nh && have_oif_match && res->nh)
7026     + return;
7027     +
7028     /* We might have already computed the hash for ICMPv6 errors. In such
7029     * case it will always be non-zero. Otherwise now is the time to do it.
7030     */
7031     @@ -3406,7 +3409,7 @@ static bool fib6_is_reject(u32 flags, struct net_device *dev, int addr_type)
7032     if ((flags & RTF_REJECT) ||
7033     (dev && (dev->flags & IFF_LOOPBACK) &&
7034     !(addr_type & IPV6_ADDR_LOOPBACK) &&
7035     - !(flags & RTF_LOCAL)))
7036     + !(flags & (RTF_ANYCAST | RTF_LOCAL))))
7037     return true;
7038    
7039     return false;
7040     diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c
7041     index 6dc3bfa12b1e..95805a6331be 100644
7042     --- a/net/l2tp/l2tp_core.c
7043     +++ b/net/l2tp/l2tp_core.c
7044     @@ -1030,6 +1030,7 @@ static void l2tp_xmit_core(struct l2tp_session *session, struct sk_buff *skb,
7045    
7046     /* Queue the packet to IP for output */
7047     skb->ignore_df = 1;
7048     + skb_dst_drop(skb);
7049     #if IS_ENABLED(CONFIG_IPV6)
7050     if (l2tp_sk_is_v6(tunnel->sock))
7051     error = inet6_csk_xmit(tunnel->sock, skb, NULL);
7052     @@ -1101,10 +1102,6 @@ int l2tp_xmit_skb(struct l2tp_session *session, struct sk_buff *skb, int hdr_len
7053     goto out_unlock;
7054     }
7055    
7056     - /* Get routing info from the tunnel socket */
7057     - skb_dst_drop(skb);
7058     - skb_dst_set(skb, sk_dst_check(sk, 0));
7059     -
7060     inet = inet_sk(sk);
7061     fl = &inet->cork.fl;
7062     switch (tunnel->encap) {
7063     diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c
7064     index c74f44dfaa22..5abb7f9b7ee5 100644
7065     --- a/net/llc/af_llc.c
7066     +++ b/net/llc/af_llc.c
7067     @@ -273,6 +273,10 @@ static int llc_ui_autobind(struct socket *sock, struct sockaddr_llc *addr)
7068    
7069     if (!sock_flag(sk, SOCK_ZAPPED))
7070     goto out;
7071     + if (!addr->sllc_arphrd)
7072     + addr->sllc_arphrd = ARPHRD_ETHER;
7073     + if (addr->sllc_arphrd != ARPHRD_ETHER)
7074     + goto out;
7075     rc = -ENODEV;
7076     if (sk->sk_bound_dev_if) {
7077     llc->dev = dev_get_by_index(&init_net, sk->sk_bound_dev_if);
7078     @@ -328,7 +332,9 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
7079     if (unlikely(!sock_flag(sk, SOCK_ZAPPED) || addrlen != sizeof(*addr)))
7080     goto out;
7081     rc = -EAFNOSUPPORT;
7082     - if (unlikely(addr->sllc_family != AF_LLC))
7083     + if (!addr->sllc_arphrd)
7084     + addr->sllc_arphrd = ARPHRD_ETHER;
7085     + if (unlikely(addr->sllc_family != AF_LLC || addr->sllc_arphrd != ARPHRD_ETHER))
7086     goto out;
7087     dprintk("%s: binding %02X\n", __func__, addr->sllc_sap);
7088     rc = -ENODEV;
7089     @@ -336,8 +342,6 @@ static int llc_ui_bind(struct socket *sock, struct sockaddr *uaddr, int addrlen)
7090     if (sk->sk_bound_dev_if) {
7091     llc->dev = dev_get_by_index_rcu(&init_net, sk->sk_bound_dev_if);
7092     if (llc->dev) {
7093     - if (!addr->sllc_arphrd)
7094     - addr->sllc_arphrd = llc->dev->type;
7095     if (is_zero_ether_addr(addr->sllc_mac))
7096     memcpy(addr->sllc_mac, llc->dev->dev_addr,
7097     IFHWADDRLEN);
7098     diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c
7099     index efccd1ac9a66..102b8d6b5612 100644
7100     --- a/net/netlink/genetlink.c
7101     +++ b/net/netlink/genetlink.c
7102     @@ -989,60 +989,11 @@ static struct genl_family genl_ctrl __ro_after_init = {
7103     .netnsok = true,
7104     };
7105    
7106     -static int genl_bind(struct net *net, int group)
7107     -{
7108     - struct genl_family *f;
7109     - int err = -ENOENT;
7110     - unsigned int id;
7111     -
7112     - down_read(&cb_lock);
7113     -
7114     - idr_for_each_entry(&genl_fam_idr, f, id) {
7115     - if (group >= f->mcgrp_offset &&
7116     - group < f->mcgrp_offset + f->n_mcgrps) {
7117     - int fam_grp = group - f->mcgrp_offset;
7118     -
7119     - if (!f->netnsok && net != &init_net)
7120     - err = -ENOENT;
7121     - else if (f->mcast_bind)
7122     - err = f->mcast_bind(net, fam_grp);
7123     - else
7124     - err = 0;
7125     - break;
7126     - }
7127     - }
7128     - up_read(&cb_lock);
7129     -
7130     - return err;
7131     -}
7132     -
7133     -static void genl_unbind(struct net *net, int group)
7134     -{
7135     - struct genl_family *f;
7136     - unsigned int id;
7137     -
7138     - down_read(&cb_lock);
7139     -
7140     - idr_for_each_entry(&genl_fam_idr, f, id) {
7141     - if (group >= f->mcgrp_offset &&
7142     - group < f->mcgrp_offset + f->n_mcgrps) {
7143     - int fam_grp = group - f->mcgrp_offset;
7144     -
7145     - if (f->mcast_unbind)
7146     - f->mcast_unbind(net, fam_grp);
7147     - break;
7148     - }
7149     - }
7150     - up_read(&cb_lock);
7151     -}
7152     -
7153     static int __net_init genl_pernet_init(struct net *net)
7154     {
7155     struct netlink_kernel_cfg cfg = {
7156     .input = genl_rcv,
7157     .flags = NL_CFG_F_NONROOT_RECV,
7158     - .bind = genl_bind,
7159     - .unbind = genl_unbind,
7160     };
7161    
7162     /* we'll bump the group number right afterwards */
7163     diff --git a/net/sched/act_connmark.c b/net/sched/act_connmark.c
7164     index 2b43cacf82af..1a8f2f85ea1a 100644
7165     --- a/net/sched/act_connmark.c
7166     +++ b/net/sched/act_connmark.c
7167     @@ -43,17 +43,20 @@ static int tcf_connmark_act(struct sk_buff *skb, const struct tc_action *a,
7168     tcf_lastuse_update(&ca->tcf_tm);
7169     bstats_update(&ca->tcf_bstats, skb);
7170    
7171     - if (skb->protocol == htons(ETH_P_IP)) {
7172     + switch (skb_protocol(skb, true)) {
7173     + case htons(ETH_P_IP):
7174     if (skb->len < sizeof(struct iphdr))
7175     goto out;
7176    
7177     proto = NFPROTO_IPV4;
7178     - } else if (skb->protocol == htons(ETH_P_IPV6)) {
7179     + break;
7180     + case htons(ETH_P_IPV6):
7181     if (skb->len < sizeof(struct ipv6hdr))
7182     goto out;
7183    
7184     proto = NFPROTO_IPV6;
7185     - } else {
7186     + break;
7187     + default:
7188     goto out;
7189     }
7190    
7191     diff --git a/net/sched/act_csum.c b/net/sched/act_csum.c
7192     index d3cfad88dc3a..428b1ae00123 100644
7193     --- a/net/sched/act_csum.c
7194     +++ b/net/sched/act_csum.c
7195     @@ -587,7 +587,7 @@ static int tcf_csum_act(struct sk_buff *skb, const struct tc_action *a,
7196     goto drop;
7197    
7198     update_flags = params->update_flags;
7199     - protocol = tc_skb_protocol(skb);
7200     + protocol = skb_protocol(skb, false);
7201     again:
7202     switch (protocol) {
7203     case cpu_to_be16(ETH_P_IP):
7204     diff --git a/net/sched/act_ct.c b/net/sched/act_ct.c
7205     index 0586546c20d7..e0060aefbf9d 100644
7206     --- a/net/sched/act_ct.c
7207     +++ b/net/sched/act_ct.c
7208     @@ -100,7 +100,7 @@ static u8 tcf_ct_skb_nf_family(struct sk_buff *skb)
7209     {
7210     u8 family = NFPROTO_UNSPEC;
7211    
7212     - switch (skb->protocol) {
7213     + switch (skb_protocol(skb, true)) {
7214     case htons(ETH_P_IP):
7215     family = NFPROTO_IPV4;
7216     break;
7217     @@ -222,6 +222,7 @@ static int ct_nat_execute(struct sk_buff *skb, struct nf_conn *ct,
7218     const struct nf_nat_range2 *range,
7219     enum nf_nat_manip_type maniptype)
7220     {
7221     + __be16 proto = skb_protocol(skb, true);
7222     int hooknum, err = NF_ACCEPT;
7223    
7224     /* See HOOK2MANIP(). */
7225     @@ -233,14 +234,13 @@ static int ct_nat_execute(struct sk_buff *skb, struct nf_conn *ct,
7226     switch (ctinfo) {
7227     case IP_CT_RELATED:
7228     case IP_CT_RELATED_REPLY:
7229     - if (skb->protocol == htons(ETH_P_IP) &&
7230     + if (proto == htons(ETH_P_IP) &&
7231     ip_hdr(skb)->protocol == IPPROTO_ICMP) {
7232     if (!nf_nat_icmp_reply_translation(skb, ct, ctinfo,
7233     hooknum))
7234     err = NF_DROP;
7235     goto out;
7236     - } else if (IS_ENABLED(CONFIG_IPV6) &&
7237     - skb->protocol == htons(ETH_P_IPV6)) {
7238     + } else if (IS_ENABLED(CONFIG_IPV6) && proto == htons(ETH_P_IPV6)) {
7239     __be16 frag_off;
7240     u8 nexthdr = ipv6_hdr(skb)->nexthdr;
7241     int hdrlen = ipv6_skip_exthdr(skb,
7242     @@ -993,4 +993,3 @@ MODULE_AUTHOR("Yossi Kuperman <yossiku@mellanox.com>");
7243     MODULE_AUTHOR("Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>");
7244     MODULE_DESCRIPTION("Connection tracking action");
7245     MODULE_LICENSE("GPL v2");
7246     -
7247     diff --git a/net/sched/act_ctinfo.c b/net/sched/act_ctinfo.c
7248     index f45995a6237a..a91fcee810ef 100644
7249     --- a/net/sched/act_ctinfo.c
7250     +++ b/net/sched/act_ctinfo.c
7251     @@ -96,19 +96,22 @@ static int tcf_ctinfo_act(struct sk_buff *skb, const struct tc_action *a,
7252     action = READ_ONCE(ca->tcf_action);
7253    
7254     wlen = skb_network_offset(skb);
7255     - if (tc_skb_protocol(skb) == htons(ETH_P_IP)) {
7256     + switch (skb_protocol(skb, true)) {
7257     + case htons(ETH_P_IP):
7258     wlen += sizeof(struct iphdr);
7259     if (!pskb_may_pull(skb, wlen))
7260     goto out;
7261    
7262     proto = NFPROTO_IPV4;
7263     - } else if (tc_skb_protocol(skb) == htons(ETH_P_IPV6)) {
7264     + break;
7265     + case htons(ETH_P_IPV6):
7266     wlen += sizeof(struct ipv6hdr);
7267     if (!pskb_may_pull(skb, wlen))
7268     goto out;
7269    
7270     proto = NFPROTO_IPV6;
7271     - } else {
7272     + break;
7273     + default:
7274     goto out;
7275     }
7276    
7277     diff --git a/net/sched/act_mpls.c b/net/sched/act_mpls.c
7278     index db570d2bd0e0..f786775699b5 100644
7279     --- a/net/sched/act_mpls.c
7280     +++ b/net/sched/act_mpls.c
7281     @@ -82,7 +82,7 @@ static int tcf_mpls_act(struct sk_buff *skb, const struct tc_action *a,
7282     goto drop;
7283     break;
7284     case TCA_MPLS_ACT_PUSH:
7285     - new_lse = tcf_mpls_get_lse(NULL, p, !eth_p_mpls(skb->protocol));
7286     + new_lse = tcf_mpls_get_lse(NULL, p, !eth_p_mpls(skb_protocol(skb, true)));
7287     if (skb_mpls_push(skb, new_lse, p->tcfm_proto, mac_len,
7288     skb->dev && skb->dev->type == ARPHRD_ETHER))
7289     goto drop;
7290     diff --git a/net/sched/act_skbedit.c b/net/sched/act_skbedit.c
7291     index 6a8d3337c577..f98b2791ecec 100644
7292     --- a/net/sched/act_skbedit.c
7293     +++ b/net/sched/act_skbedit.c
7294     @@ -41,7 +41,7 @@ static int tcf_skbedit_act(struct sk_buff *skb, const struct tc_action *a,
7295     if (params->flags & SKBEDIT_F_INHERITDSFIELD) {
7296     int wlen = skb_network_offset(skb);
7297    
7298     - switch (tc_skb_protocol(skb)) {
7299     + switch (skb_protocol(skb, true)) {
7300     case htons(ETH_P_IP):
7301     wlen += sizeof(struct iphdr);
7302     if (!pskb_may_pull(skb, wlen))
7303     diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
7304     index 68c8fc6f535c..d7604417367d 100644
7305     --- a/net/sched/cls_api.c
7306     +++ b/net/sched/cls_api.c
7307     @@ -1571,7 +1571,7 @@ int tcf_classify(struct sk_buff *skb, const struct tcf_proto *tp,
7308     reclassify:
7309     #endif
7310     for (; tp; tp = rcu_dereference_bh(tp->next)) {
7311     - __be16 protocol = tc_skb_protocol(skb);
7312     + __be16 protocol = skb_protocol(skb, false);
7313     int err;
7314    
7315     if (tp->protocol != protocol &&
7316     diff --git a/net/sched/cls_flow.c b/net/sched/cls_flow.c
7317     index 80ae7b9fa90a..ab53a93b2f2b 100644
7318     --- a/net/sched/cls_flow.c
7319     +++ b/net/sched/cls_flow.c
7320     @@ -80,7 +80,7 @@ static u32 flow_get_dst(const struct sk_buff *skb, const struct flow_keys *flow)
7321     if (dst)
7322     return ntohl(dst);
7323    
7324     - return addr_fold(skb_dst(skb)) ^ (__force u16) tc_skb_protocol(skb);
7325     + return addr_fold(skb_dst(skb)) ^ (__force u16)skb_protocol(skb, true);
7326     }
7327    
7328     static u32 flow_get_proto(const struct sk_buff *skb,
7329     @@ -104,7 +104,7 @@ static u32 flow_get_proto_dst(const struct sk_buff *skb,
7330     if (flow->ports.ports)
7331     return ntohs(flow->ports.dst);
7332    
7333     - return addr_fold(skb_dst(skb)) ^ (__force u16) tc_skb_protocol(skb);
7334     + return addr_fold(skb_dst(skb)) ^ (__force u16)skb_protocol(skb, true);
7335     }
7336    
7337     static u32 flow_get_iif(const struct sk_buff *skb)
7338     @@ -151,7 +151,7 @@ static u32 flow_get_nfct(const struct sk_buff *skb)
7339     static u32 flow_get_nfct_src(const struct sk_buff *skb,
7340     const struct flow_keys *flow)
7341     {
7342     - switch (tc_skb_protocol(skb)) {
7343     + switch (skb_protocol(skb, true)) {
7344     case htons(ETH_P_IP):
7345     return ntohl(CTTUPLE(skb, src.u3.ip));
7346     case htons(ETH_P_IPV6):
7347     @@ -164,7 +164,7 @@ fallback:
7348     static u32 flow_get_nfct_dst(const struct sk_buff *skb,
7349     const struct flow_keys *flow)
7350     {
7351     - switch (tc_skb_protocol(skb)) {
7352     + switch (skb_protocol(skb, true)) {
7353     case htons(ETH_P_IP):
7354     return ntohl(CTTUPLE(skb, dst.u3.ip));
7355     case htons(ETH_P_IPV6):
7356     diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c
7357     index 1d270540e74d..c5a0f2c2635e 100644
7358     --- a/net/sched/cls_flower.c
7359     +++ b/net/sched/cls_flower.c
7360     @@ -310,7 +310,7 @@ static int fl_classify(struct sk_buff *skb, const struct tcf_proto *tp,
7361     /* skb_flow_dissect() does not set n_proto in case an unknown
7362     * protocol, so do it rather here.
7363     */
7364     - skb_key.basic.n_proto = skb->protocol;
7365     + skb_key.basic.n_proto = skb_protocol(skb, false);
7366     skb_flow_dissect_tunnel_info(skb, &mask->dissector, &skb_key);
7367     skb_flow_dissect_ct(skb, &mask->dissector, &skb_key,
7368     fl_ct_info_to_flower_map,
7369     diff --git a/net/sched/em_ipset.c b/net/sched/em_ipset.c
7370     index df00566d327d..c95cf86fb431 100644
7371     --- a/net/sched/em_ipset.c
7372     +++ b/net/sched/em_ipset.c
7373     @@ -59,7 +59,7 @@ static int em_ipset_match(struct sk_buff *skb, struct tcf_ematch *em,
7374     };
7375     int ret, network_offset;
7376    
7377     - switch (tc_skb_protocol(skb)) {
7378     + switch (skb_protocol(skb, true)) {
7379     case htons(ETH_P_IP):
7380     state.pf = NFPROTO_IPV4;
7381     if (!pskb_network_may_pull(skb, sizeof(struct iphdr)))
7382     diff --git a/net/sched/em_ipt.c b/net/sched/em_ipt.c
7383     index 9fff6480acc6..e2c157df3f8b 100644
7384     --- a/net/sched/em_ipt.c
7385     +++ b/net/sched/em_ipt.c
7386     @@ -212,7 +212,7 @@ static int em_ipt_match(struct sk_buff *skb, struct tcf_ematch *em,
7387     struct nf_hook_state state;
7388     int ret;
7389    
7390     - switch (tc_skb_protocol(skb)) {
7391     + switch (skb_protocol(skb, true)) {
7392     case htons(ETH_P_IP):
7393     if (!pskb_network_may_pull(skb, sizeof(struct iphdr)))
7394     return 0;
7395     diff --git a/net/sched/em_meta.c b/net/sched/em_meta.c
7396     index 3177dcb17316..ad007cdcec97 100644
7397     --- a/net/sched/em_meta.c
7398     +++ b/net/sched/em_meta.c
7399     @@ -195,7 +195,7 @@ META_COLLECTOR(int_priority)
7400     META_COLLECTOR(int_protocol)
7401     {
7402     /* Let userspace take care of the byte ordering */
7403     - dst->value = tc_skb_protocol(skb);
7404     + dst->value = skb_protocol(skb, false);
7405     }
7406    
7407     META_COLLECTOR(int_pkttype)
7408     diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c
7409     index f4f9b8cdbffb..6385995dc700 100644
7410     --- a/net/sched/sch_atm.c
7411     +++ b/net/sched/sch_atm.c
7412     @@ -553,16 +553,16 @@ static int atm_tc_init(struct Qdisc *sch, struct nlattr *opt,
7413     if (!p->link.q)
7414     p->link.q = &noop_qdisc;
7415     pr_debug("atm_tc_init: link (%p) qdisc %p\n", &p->link, p->link.q);
7416     + p->link.vcc = NULL;
7417     + p->link.sock = NULL;
7418     + p->link.common.classid = sch->handle;
7419     + p->link.ref = 1;
7420    
7421     err = tcf_block_get(&p->link.block, &p->link.filter_list, sch,
7422     extack);
7423     if (err)
7424     return err;
7425    
7426     - p->link.vcc = NULL;
7427     - p->link.sock = NULL;
7428     - p->link.common.classid = sch->handle;
7429     - p->link.ref = 1;
7430     tasklet_init(&p->task, sch_atm_dequeue, (unsigned long)sch);
7431     return 0;
7432     }
7433     diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c
7434     index 5d605bab9afc..896c0562cb42 100644
7435     --- a/net/sched/sch_cake.c
7436     +++ b/net/sched/sch_cake.c
7437     @@ -592,7 +592,7 @@ static void cake_update_flowkeys(struct flow_keys *keys,
7438     struct nf_conntrack_tuple tuple = {};
7439     bool rev = !skb->_nfct;
7440    
7441     - if (tc_skb_protocol(skb) != htons(ETH_P_IP))
7442     + if (skb_protocol(skb, true) != htons(ETH_P_IP))
7443     return;
7444    
7445     if (!nf_ct_get_tuple_skb(&tuple, skb))
7446     @@ -1521,7 +1521,7 @@ static u8 cake_handle_diffserv(struct sk_buff *skb, bool wash)
7447     u16 *buf, buf_;
7448     u8 dscp;
7449    
7450     - switch (tc_skb_protocol(skb)) {
7451     + switch (skb_protocol(skb, true)) {
7452     case htons(ETH_P_IP):
7453     buf = skb_header_pointer(skb, offset, sizeof(buf_), &buf_);
7454     if (unlikely(!buf))
7455     diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c
7456     index 05605b30bef3..2b88710994d7 100644
7457     --- a/net/sched/sch_dsmark.c
7458     +++ b/net/sched/sch_dsmark.c
7459     @@ -210,7 +210,7 @@ static int dsmark_enqueue(struct sk_buff *skb, struct Qdisc *sch,
7460     if (p->set_tc_index) {
7461     int wlen = skb_network_offset(skb);
7462    
7463     - switch (tc_skb_protocol(skb)) {
7464     + switch (skb_protocol(skb, true)) {
7465     case htons(ETH_P_IP):
7466     wlen += sizeof(struct iphdr);
7467     if (!pskb_may_pull(skb, wlen) ||
7468     @@ -303,7 +303,7 @@ static struct sk_buff *dsmark_dequeue(struct Qdisc *sch)
7469     index = skb->tc_index & (p->indices - 1);
7470     pr_debug("index %d->%d\n", skb->tc_index, index);
7471    
7472     - switch (tc_skb_protocol(skb)) {
7473     + switch (skb_protocol(skb, true)) {
7474     case htons(ETH_P_IP):
7475     ipv4_change_dsfield(ip_hdr(skb), p->mv[index].mask,
7476     p->mv[index].value);
7477     @@ -320,7 +320,7 @@ static struct sk_buff *dsmark_dequeue(struct Qdisc *sch)
7478     */
7479     if (p->mv[index].mask != 0xff || p->mv[index].value)
7480     pr_warn("%s: unsupported protocol %d\n",
7481     - __func__, ntohs(tc_skb_protocol(skb)));
7482     + __func__, ntohs(skb_protocol(skb, true)));
7483     break;
7484     }
7485    
7486     diff --git a/net/sched/sch_teql.c b/net/sched/sch_teql.c
7487     index 689ef6f3ded8..2f1f0a378408 100644
7488     --- a/net/sched/sch_teql.c
7489     +++ b/net/sched/sch_teql.c
7490     @@ -239,7 +239,7 @@ __teql_resolve(struct sk_buff *skb, struct sk_buff *skb_res,
7491     char haddr[MAX_ADDR_LEN];
7492    
7493     neigh_ha_snapshot(haddr, n, dev);
7494     - err = dev_hard_header(skb, dev, ntohs(tc_skb_protocol(skb)),
7495     + err = dev_hard_header(skb, dev, ntohs(skb_protocol(skb, false)),
7496     haddr, NULL, skb->len);
7497    
7498     if (err < 0)
7499     diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c
7500     index c56e6cfc4a62..21970185485f 100644
7501     --- a/net/sunrpc/xprtrdma/rpc_rdma.c
7502     +++ b/net/sunrpc/xprtrdma/rpc_rdma.c
7503     @@ -71,7 +71,7 @@ static unsigned int rpcrdma_max_call_header_size(unsigned int maxsegs)
7504     size = RPCRDMA_HDRLEN_MIN;
7505    
7506     /* Maximum Read list size */
7507     - size = maxsegs * rpcrdma_readchunk_maxsz * sizeof(__be32);
7508     + size += maxsegs * rpcrdma_readchunk_maxsz * sizeof(__be32);
7509    
7510     /* Minimal Read chunk size */
7511     size += sizeof(__be32); /* segment count */
7512     @@ -96,7 +96,7 @@ static unsigned int rpcrdma_max_reply_header_size(unsigned int maxsegs)
7513     size = RPCRDMA_HDRLEN_MIN;
7514    
7515     /* Maximum Write list size */
7516     - size = sizeof(__be32); /* segment count */
7517     + size += sizeof(__be32); /* segment count */
7518     size += maxsegs * rpcrdma_segment_maxsz * sizeof(__be32);
7519     size += sizeof(__be32); /* list discriminator */
7520    
7521     diff --git a/security/apparmor/match.c b/security/apparmor/match.c
7522     index 6ccd3734a841..43669403f755 100644
7523     --- a/security/apparmor/match.c
7524     +++ b/security/apparmor/match.c
7525     @@ -97,6 +97,9 @@ static struct table_header *unpack_table(char *blob, size_t bsize)
7526     th.td_flags == YYTD_DATA8))
7527     goto out;
7528    
7529     + /* if we have a table it must have some entries */
7530     + if (th.td_lolen == 0)
7531     + goto out;
7532     tsize = table_size(th.td_lolen, th.td_flags);
7533     if (bsize < tsize)
7534     goto out;
7535     @@ -198,6 +201,8 @@ static int verify_dfa(struct aa_dfa *dfa)
7536    
7537     state_count = dfa->tables[YYTD_ID_BASE]->td_lolen;
7538     trans_count = dfa->tables[YYTD_ID_NXT]->td_lolen;
7539     + if (state_count == 0)
7540     + goto out;
7541     for (i = 0; i < state_count; i++) {
7542     if (!(BASE_TABLE(dfa)[i] & MATCH_FLAG_DIFF_ENCODE) &&
7543     (DEFAULT_TABLE(dfa)[i] >= state_count))
7544     diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
7545     index 160e00e8007a..6ffdf3d2d526 100644
7546     --- a/sound/pci/hda/patch_realtek.c
7547     +++ b/sound/pci/hda/patch_realtek.c
7548     @@ -6117,6 +6117,8 @@ enum {
7549     ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS,
7550     ALC269VC_FIXUP_ACER_HEADSET_MIC,
7551     ALC269VC_FIXUP_ACER_MIC_NO_PRESENCE,
7552     + ALC289_FIXUP_ASUS_G401,
7553     + ALC256_FIXUP_ACER_MIC_NO_PRESENCE,
7554     };
7555    
7556     static const struct hda_fixup alc269_fixups[] = {
7557     @@ -7082,7 +7084,7 @@ static const struct hda_fixup alc269_fixups[] = {
7558     { }
7559     },
7560     .chained = true,
7561     - .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
7562     + .chain_id = ALC269_FIXUP_HEADSET_MIC
7563     },
7564     [ALC294_FIXUP_ASUS_HEADSET_MIC] = {
7565     .type = HDA_FIXUP_PINS,
7566     @@ -7091,7 +7093,7 @@ static const struct hda_fixup alc269_fixups[] = {
7567     { }
7568     },
7569     .chained = true,
7570     - .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
7571     + .chain_id = ALC269_FIXUP_HEADSET_MIC
7572     },
7573     [ALC294_FIXUP_ASUS_SPK] = {
7574     .type = HDA_FIXUP_VERBS,
7575     @@ -7099,6 +7101,8 @@ static const struct hda_fixup alc269_fixups[] = {
7576     /* Set EAPD high */
7577     { 0x20, AC_VERB_SET_COEF_INDEX, 0x40 },
7578     { 0x20, AC_VERB_SET_PROC_COEF, 0x8800 },
7579     + { 0x20, AC_VERB_SET_COEF_INDEX, 0x0f },
7580     + { 0x20, AC_VERB_SET_PROC_COEF, 0x7774 },
7581     { }
7582     },
7583     .chained = true,
7584     @@ -7324,6 +7328,22 @@ static const struct hda_fixup alc269_fixups[] = {
7585     .chained = true,
7586     .chain_id = ALC269_FIXUP_HEADSET_MIC
7587     },
7588     + [ALC289_FIXUP_ASUS_G401] = {
7589     + .type = HDA_FIXUP_PINS,
7590     + .v.pins = (const struct hda_pintbl[]) {
7591     + { 0x19, 0x03a11020 }, /* headset mic with jack detect */
7592     + { }
7593     + },
7594     + },
7595     + [ALC256_FIXUP_ACER_MIC_NO_PRESENCE] = {
7596     + .type = HDA_FIXUP_PINS,
7597     + .v.pins = (const struct hda_pintbl[]) {
7598     + { 0x19, 0x02a11120 }, /* use as headset mic, without its own jack detect */
7599     + { }
7600     + },
7601     + .chained = true,
7602     + .chain_id = ALC256_FIXUP_ASUS_HEADSET_MODE
7603     + },
7604     };
7605    
7606     static const struct snd_pci_quirk alc269_fixup_tbl[] = {
7607     @@ -7352,6 +7372,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
7608     SND_PCI_QUIRK(0x1025, 0x1308, "Acer Aspire Z24-890", ALC286_FIXUP_ACER_AIO_HEADSET_MIC),
7609     SND_PCI_QUIRK(0x1025, 0x132a, "Acer TravelMate B114-21", ALC233_FIXUP_ACER_HEADSET_MIC),
7610     SND_PCI_QUIRK(0x1025, 0x1330, "Acer TravelMate X514-51T", ALC255_FIXUP_ACER_HEADSET_MIC),
7611     + SND_PCI_QUIRK(0x1025, 0x1430, "Acer TravelMate B311R-31", ALC256_FIXUP_ACER_MIC_NO_PRESENCE),
7612     SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z),
7613     SND_PCI_QUIRK(0x1028, 0x054b, "Dell XPS one 2710", ALC275_FIXUP_DELL_XPS),
7614     SND_PCI_QUIRK(0x1028, 0x05bd, "Dell Latitude E6440", ALC292_FIXUP_DELL_E7X),
7615     @@ -7495,6 +7516,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
7616     SND_PCI_QUIRK(0x1043, 0x17d1, "ASUS UX431FL", ALC294_FIXUP_ASUS_DUAL_SPK),
7617     SND_PCI_QUIRK(0x1043, 0x18b1, "Asus MJ401TA", ALC256_FIXUP_ASUS_HEADSET_MIC),
7618     SND_PCI_QUIRK(0x1043, 0x18f1, "Asus FX505DT", ALC256_FIXUP_ASUS_HEADSET_MIC),
7619     + SND_PCI_QUIRK(0x1043, 0x194e, "ASUS UX563FD", ALC294_FIXUP_ASUS_HPE),
7620     SND_PCI_QUIRK(0x1043, 0x19ce, "ASUS B9450FA", ALC294_FIXUP_ASUS_HPE),
7621     SND_PCI_QUIRK(0x1043, 0x19e1, "ASUS UX581LV", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE),
7622     SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
7623     @@ -7504,6 +7526,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
7624     SND_PCI_QUIRK(0x1043, 0x1bbd, "ASUS Z550MA", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE),
7625     SND_PCI_QUIRK(0x1043, 0x1c23, "Asus X55U", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
7626     SND_PCI_QUIRK(0x1043, 0x1ccd, "ASUS X555UB", ALC256_FIXUP_ASUS_MIC),
7627     + SND_PCI_QUIRK(0x1043, 0x1f11, "ASUS Zephyrus G14", ALC289_FIXUP_ASUS_G401),
7628     SND_PCI_QUIRK(0x1043, 0x3030, "ASUS ZN270IE", ALC256_FIXUP_ASUS_AIO_GPIO2),
7629     SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC),
7630     SND_PCI_QUIRK(0x1043, 0x834a, "ASUS S101", ALC269_FIXUP_STEREO_DMIC),
7631     diff --git a/sound/usb/card.c b/sound/usb/card.c
7632     index f9a64e9526f5..230d862cfa3a 100644
7633     --- a/sound/usb/card.c
7634     +++ b/sound/usb/card.c
7635     @@ -659,10 +659,14 @@ static int usb_audio_probe(struct usb_interface *intf,
7636     goto __error;
7637     }
7638    
7639     - /* we are allowed to call snd_card_register() many times */
7640     - err = snd_card_register(chip->card);
7641     - if (err < 0)
7642     - goto __error;
7643     + /* we are allowed to call snd_card_register() many times, but first
7644     + * check to see if a device needs to skip it or do anything special
7645     + */
7646     + if (!snd_usb_registration_quirk(chip, ifnum)) {
7647     + err = snd_card_register(chip->card);
7648     + if (err < 0)
7649     + goto __error;
7650     + }
7651    
7652     if (quirk && quirk->shares_media_device) {
7653     /* don't want to fail when snd_media_device_create() fails */
7654     diff --git a/sound/usb/clock.c b/sound/usb/clock.c
7655     index a48313dfa967..b118cf97607f 100644
7656     --- a/sound/usb/clock.c
7657     +++ b/sound/usb/clock.c
7658     @@ -151,16 +151,15 @@ static int uac_clock_selector_set_val(struct snd_usb_audio *chip, int selector_i
7659     return ret;
7660     }
7661    
7662     -/*
7663     - * Assume the clock is valid if clock source supports only one single sample
7664     - * rate, the terminal is connected directly to it (there is no clock selector)
7665     - * and clock type is internal. This is to deal with some Denon DJ controllers
7666     - * that always reports that clock is invalid.
7667     - */
7668     static bool uac_clock_source_is_valid_quirk(struct snd_usb_audio *chip,
7669     struct audioformat *fmt,
7670     int source_id)
7671     {
7672     + bool ret = false;
7673     + int count;
7674     + unsigned char data;
7675     + struct usb_device *dev = chip->dev;
7676     +
7677     if (fmt->protocol == UAC_VERSION_2) {
7678     struct uac_clock_source_descriptor *cs_desc =
7679     snd_usb_find_clock_source(chip->ctrl_intf, source_id);
7680     @@ -168,13 +167,51 @@ static bool uac_clock_source_is_valid_quirk(struct snd_usb_audio *chip,
7681     if (!cs_desc)
7682     return false;
7683    
7684     - return (fmt->nr_rates == 1 &&
7685     - (fmt->clock & 0xff) == cs_desc->bClockID &&
7686     - (cs_desc->bmAttributes & 0x3) !=
7687     - UAC_CLOCK_SOURCE_TYPE_EXT);
7688     + /*
7689     + * Assume the clock is valid if clock source supports only one
7690     + * single sample rate, the terminal is connected directly to it
7691     + * (there is no clock selector) and clock type is internal.
7692     + * This is to deal with some Denon DJ controllers that always
7693     + * reports that clock is invalid.
7694     + */
7695     + if (fmt->nr_rates == 1 &&
7696     + (fmt->clock & 0xff) == cs_desc->bClockID &&
7697     + (cs_desc->bmAttributes & 0x3) !=
7698     + UAC_CLOCK_SOURCE_TYPE_EXT)
7699     + return true;
7700     + }
7701     +
7702     + /*
7703     + * MOTU MicroBook IIc
7704     + * Sample rate changes takes more than 2 seconds for this device. Clock
7705     + * validity request returns false during that period.
7706     + */
7707     + if (chip->usb_id == USB_ID(0x07fd, 0x0004)) {
7708     + count = 0;
7709     +
7710     + while ((!ret) && (count < 50)) {
7711     + int err;
7712     +
7713     + msleep(100);
7714     +
7715     + err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), UAC2_CS_CUR,
7716     + USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN,
7717     + UAC2_CS_CONTROL_CLOCK_VALID << 8,
7718     + snd_usb_ctrl_intf(chip) | (source_id << 8),
7719     + &data, sizeof(data));
7720     + if (err < 0) {
7721     + dev_warn(&dev->dev,
7722     + "%s(): cannot get clock validity for id %d\n",
7723     + __func__, source_id);
7724     + return false;
7725     + }
7726     +
7727     + ret = !!data;
7728     + count++;
7729     + }
7730     }
7731    
7732     - return false;
7733     + return ret;
7734     }
7735    
7736     static bool uac_clock_source_is_valid(struct snd_usb_audio *chip,
7737     diff --git a/sound/usb/line6/capture.c b/sound/usb/line6/capture.c
7738     index 82abef3fe90d..4b6e99e055dc 100644
7739     --- a/sound/usb/line6/capture.c
7740     +++ b/sound/usb/line6/capture.c
7741     @@ -287,6 +287,8 @@ int line6_create_audio_in_urbs(struct snd_line6_pcm *line6pcm)
7742     urb->interval = LINE6_ISO_INTERVAL;
7743     urb->error_count = 0;
7744     urb->complete = audio_in_callback;
7745     + if (usb_urb_ep_type_check(urb))
7746     + return -EINVAL;
7747     }
7748    
7749     return 0;
7750     diff --git a/sound/usb/line6/driver.c b/sound/usb/line6/driver.c
7751     index 4f096685ed65..0caf53f5764c 100644
7752     --- a/sound/usb/line6/driver.c
7753     +++ b/sound/usb/line6/driver.c
7754     @@ -820,7 +820,7 @@ void line6_disconnect(struct usb_interface *interface)
7755     if (WARN_ON(usbdev != line6->usbdev))
7756     return;
7757    
7758     - cancel_delayed_work(&line6->startup_work);
7759     + cancel_delayed_work_sync(&line6->startup_work);
7760    
7761     if (line6->urb_listen != NULL)
7762     line6_stop_listen(line6);
7763     diff --git a/sound/usb/line6/playback.c b/sound/usb/line6/playback.c
7764     index 2e8ead3f9bc2..797ced329b79 100644
7765     --- a/sound/usb/line6/playback.c
7766     +++ b/sound/usb/line6/playback.c
7767     @@ -432,6 +432,8 @@ int line6_create_audio_out_urbs(struct snd_line6_pcm *line6pcm)
7768     urb->interval = LINE6_ISO_INTERVAL;
7769     urb->error_count = 0;
7770     urb->complete = audio_out_callback;
7771     + if (usb_urb_ep_type_check(urb))
7772     + return -EINVAL;
7773     }
7774    
7775     return 0;
7776     diff --git a/sound/usb/midi.c b/sound/usb/midi.c
7777     index b737f0ec77d0..0cb4142b05f6 100644
7778     --- a/sound/usb/midi.c
7779     +++ b/sound/usb/midi.c
7780     @@ -1499,6 +1499,8 @@ void snd_usbmidi_disconnect(struct list_head *p)
7781     spin_unlock_irq(&umidi->disc_lock);
7782     up_write(&umidi->disc_rwsem);
7783    
7784     + del_timer_sync(&umidi->error_timer);
7785     +
7786     for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i) {
7787     struct snd_usb_midi_endpoint *ep = &umidi->endpoints[i];
7788     if (ep->out)
7789     @@ -1525,7 +1527,6 @@ void snd_usbmidi_disconnect(struct list_head *p)
7790     ep->in = NULL;
7791     }
7792     }
7793     - del_timer_sync(&umidi->error_timer);
7794     }
7795     EXPORT_SYMBOL(snd_usbmidi_disconnect);
7796    
7797     @@ -2282,16 +2283,22 @@ void snd_usbmidi_input_stop(struct list_head *p)
7798     }
7799     EXPORT_SYMBOL(snd_usbmidi_input_stop);
7800    
7801     -static void snd_usbmidi_input_start_ep(struct snd_usb_midi_in_endpoint *ep)
7802     +static void snd_usbmidi_input_start_ep(struct snd_usb_midi *umidi,
7803     + struct snd_usb_midi_in_endpoint *ep)
7804     {
7805     unsigned int i;
7806     + unsigned long flags;
7807    
7808     if (!ep)
7809     return;
7810     for (i = 0; i < INPUT_URBS; ++i) {
7811     struct urb *urb = ep->urbs[i];
7812     - urb->dev = ep->umidi->dev;
7813     - snd_usbmidi_submit_urb(urb, GFP_KERNEL);
7814     + spin_lock_irqsave(&umidi->disc_lock, flags);
7815     + if (!atomic_read(&urb->use_count)) {
7816     + urb->dev = ep->umidi->dev;
7817     + snd_usbmidi_submit_urb(urb, GFP_ATOMIC);
7818     + }
7819     + spin_unlock_irqrestore(&umidi->disc_lock, flags);
7820     }
7821     }
7822    
7823     @@ -2307,7 +2314,7 @@ void snd_usbmidi_input_start(struct list_head *p)
7824     if (umidi->input_running || !umidi->opened[1])
7825     return;
7826     for (i = 0; i < MIDI_MAX_ENDPOINTS; ++i)
7827     - snd_usbmidi_input_start_ep(umidi->endpoints[i].in);
7828     + snd_usbmidi_input_start_ep(umidi, umidi->endpoints[i].in);
7829     umidi->input_running = 1;
7830     }
7831     EXPORT_SYMBOL(snd_usbmidi_input_start);
7832     diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
7833     index d5706b8b68a1..086244c70743 100644
7834     --- a/sound/usb/pcm.c
7835     +++ b/sound/usb/pcm.c
7836     @@ -344,7 +344,12 @@ static int set_sync_ep_implicit_fb_quirk(struct snd_usb_substream *subs,
7837     ep = 0x81;
7838     ifnum = 1;
7839     goto add_sync_ep_from_ifnum;
7840     - case USB_ID(0x07fd, 0x0004): /* MOTU MicroBook II */
7841     + case USB_ID(0x07fd, 0x0004): /* MOTU MicroBook II/IIc */
7842     + /* MicroBook IIc */
7843     + if (altsd->bInterfaceClass == USB_CLASS_AUDIO)
7844     + return 0;
7845     +
7846     + /* MicroBook II */
7847     ep = 0x84;
7848     ifnum = 0;
7849     goto add_sync_ep_from_ifnum;
7850     diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
7851     index 8d1805d9e5a7..562179492a33 100644
7852     --- a/sound/usb/quirks-table.h
7853     +++ b/sound/usb/quirks-table.h
7854     @@ -2776,90 +2776,6 @@ YAMAHA_DEVICE(0x7010, "UB99"),
7855     .type = QUIRK_MIDI_NOVATION
7856     }
7857     },
7858     -{
7859     - /*
7860     - * Focusrite Scarlett Solo 2nd generation
7861     - * Reports that playback should use Synch: Synchronous
7862     - * while still providing a feedback endpoint. Synchronous causes
7863     - * snapping on some sample rates.
7864     - * Force it to use Synch: Asynchronous.
7865     - */
7866     - USB_DEVICE(0x1235, 0x8205),
7867     - .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
7868     - .ifnum = QUIRK_ANY_INTERFACE,
7869     - .type = QUIRK_COMPOSITE,
7870     - .data = (const struct snd_usb_audio_quirk[]) {
7871     - {
7872     - .ifnum = 1,
7873     - .type = QUIRK_AUDIO_FIXED_ENDPOINT,
7874     - .data = & (const struct audioformat) {
7875     - .formats = SNDRV_PCM_FMTBIT_S32_LE,
7876     - .channels = 2,
7877     - .iface = 1,
7878     - .altsetting = 1,
7879     - .altset_idx = 1,
7880     - .attributes = 0,
7881     - .endpoint = 0x01,
7882     - .ep_attr = USB_ENDPOINT_XFER_ISOC |
7883     - USB_ENDPOINT_SYNC_ASYNC,
7884     - .protocol = UAC_VERSION_2,
7885     - .rates = SNDRV_PCM_RATE_44100 |
7886     - SNDRV_PCM_RATE_48000 |
7887     - SNDRV_PCM_RATE_88200 |
7888     - SNDRV_PCM_RATE_96000 |
7889     - SNDRV_PCM_RATE_176400 |
7890     - SNDRV_PCM_RATE_192000,
7891     - .rate_min = 44100,
7892     - .rate_max = 192000,
7893     - .nr_rates = 6,
7894     - .rate_table = (unsigned int[]) {
7895     - 44100, 48000, 88200,
7896     - 96000, 176400, 192000
7897     - },
7898     - .clock = 41
7899     - }
7900     - },
7901     - {
7902     - .ifnum = 2,
7903     - .type = QUIRK_AUDIO_FIXED_ENDPOINT,
7904     - .data = & (const struct audioformat) {
7905     - .formats = SNDRV_PCM_FMTBIT_S32_LE,
7906     - .channels = 2,
7907     - .iface = 2,
7908     - .altsetting = 1,
7909     - .altset_idx = 1,
7910     - .attributes = 0,
7911     - .endpoint = 0x82,
7912     - .ep_attr = USB_ENDPOINT_XFER_ISOC |
7913     - USB_ENDPOINT_SYNC_ASYNC |
7914     - USB_ENDPOINT_USAGE_IMPLICIT_FB,
7915     - .protocol = UAC_VERSION_2,
7916     - .rates = SNDRV_PCM_RATE_44100 |
7917     - SNDRV_PCM_RATE_48000 |
7918     - SNDRV_PCM_RATE_88200 |
7919     - SNDRV_PCM_RATE_96000 |
7920     - SNDRV_PCM_RATE_176400 |
7921     - SNDRV_PCM_RATE_192000,
7922     - .rate_min = 44100,
7923     - .rate_max = 192000,
7924     - .nr_rates = 6,
7925     - .rate_table = (unsigned int[]) {
7926     - 44100, 48000, 88200,
7927     - 96000, 176400, 192000
7928     - },
7929     - .clock = 41
7930     - }
7931     - },
7932     - {
7933     - .ifnum = 3,
7934     - .type = QUIRK_IGNORE_INTERFACE
7935     - },
7936     - {
7937     - .ifnum = -1
7938     - }
7939     - }
7940     - }
7941     -},
7942    
7943     /* Access Music devices */
7944     {
7945     @@ -3492,7 +3408,7 @@ AU0828_DEVICE(0x2040, 0x7270, "Hauppauge", "HVR-950Q"),
7946     },
7947     /* MOTU Microbook II */
7948     {
7949     - USB_DEVICE(0x07fd, 0x0004),
7950     + USB_DEVICE_VENDOR_SPEC(0x07fd, 0x0004),
7951     .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
7952     .vendor_name = "MOTU",
7953     .product_name = "MicroBookII",
7954     diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
7955     index bf5083a20b6d..a8bb953cc468 100644
7956     --- a/sound/usb/quirks.c
7957     +++ b/sound/usb/quirks.c
7958     @@ -1316,7 +1316,15 @@ int snd_usb_apply_boot_quirk(struct usb_device *dev,
7959     case USB_ID(0x2466, 0x8010): /* Fractal Audio Axe-Fx 3 */
7960     return snd_usb_axefx3_boot_quirk(dev);
7961     case USB_ID(0x07fd, 0x0004): /* MOTU MicroBook II */
7962     - return snd_usb_motu_microbookii_boot_quirk(dev);
7963     + /*
7964     + * For some reason interface 3 with vendor-spec class is
7965     + * detected on MicroBook IIc.
7966     + */
7967     + if (get_iface_desc(intf->altsetting)->bInterfaceClass ==
7968     + USB_CLASS_VENDOR_SPEC &&
7969     + get_iface_desc(intf->altsetting)->bInterfaceNumber < 3)
7970     + return snd_usb_motu_microbookii_boot_quirk(dev);
7971     + break;
7972     }
7973    
7974     return 0;
7975     @@ -1764,5 +1772,62 @@ void snd_usb_audioformat_attributes_quirk(struct snd_usb_audio *chip,
7976     else
7977     fp->ep_attr |= USB_ENDPOINT_SYNC_SYNC;
7978     break;
7979     + case USB_ID(0x07fd, 0x0004): /* MOTU MicroBook IIc */
7980     + /*
7981     + * MaxPacketsOnly attribute is erroneously set in endpoint
7982     + * descriptors. As a result this card produces noise with
7983     + * all sample rates other than 96 KHz.
7984     + */
7985     + fp->attributes &= ~UAC_EP_CS_ATTR_FILL_MAX;
7986     + break;
7987     + case USB_ID(0x1235, 0x8202): /* Focusrite Scarlett 2i2 2nd gen */
7988     + case USB_ID(0x1235, 0x8205): /* Focusrite Scarlett Solo 2nd gen */
7989     + /*
7990     + * Reports that playback should use Synch: Synchronous
7991     + * while still providing a feedback endpoint.
7992     + * Synchronous causes snapping on some sample rates.
7993     + * Force it to use Synch: Asynchronous.
7994     + */
7995     + if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
7996     + fp->ep_attr &= ~USB_ENDPOINT_SYNCTYPE;
7997     + fp->ep_attr |= USB_ENDPOINT_SYNC_ASYNC;
7998     + }
7999     + break;
8000     }
8001     }
8002     +
8003     +/*
8004     + * registration quirk:
8005     + * the registration is skipped if a device matches with the given ID,
8006     + * unless the interface reaches to the defined one. This is for delaying
8007     + * the registration until the last known interface, so that the card and
8008     + * devices appear at the same time.
8009     + */
8010     +
8011     +struct registration_quirk {
8012     + unsigned int usb_id; /* composed via USB_ID() */
8013     + unsigned int interface; /* the interface to trigger register */
8014     +};
8015     +
8016     +#define REG_QUIRK_ENTRY(vendor, product, iface) \
8017     + { .usb_id = USB_ID(vendor, product), .interface = (iface) }
8018     +
8019     +static const struct registration_quirk registration_quirks[] = {
8020     + REG_QUIRK_ENTRY(0x0951, 0x16d8, 2), /* Kingston HyperX AMP */
8021     + REG_QUIRK_ENTRY(0x0951, 0x16ed, 2), /* Kingston HyperX Cloud Alpha S */
8022     + REG_QUIRK_ENTRY(0x0951, 0x16ea, 2), /* Kingston HyperX Cloud Flight S */
8023     + { 0 } /* terminator */
8024     +};
8025     +
8026     +/* return true if skipping registration */
8027     +bool snd_usb_registration_quirk(struct snd_usb_audio *chip, int iface)
8028     +{
8029     + const struct registration_quirk *q;
8030     +
8031     + for (q = registration_quirks; q->usb_id; q++)
8032     + if (chip->usb_id == q->usb_id)
8033     + return iface != q->interface;
8034     +
8035     + /* Register as normal */
8036     + return false;
8037     +}
8038     diff --git a/sound/usb/quirks.h b/sound/usb/quirks.h
8039     index df0355843a4c..c76cf24a640a 100644
8040     --- a/sound/usb/quirks.h
8041     +++ b/sound/usb/quirks.h
8042     @@ -51,4 +51,6 @@ void snd_usb_audioformat_attributes_quirk(struct snd_usb_audio *chip,
8043     struct audioformat *fp,
8044     int stream);
8045    
8046     +bool snd_usb_registration_quirk(struct snd_usb_audio *chip, int iface);
8047     +
8048     #endif /* __USBAUDIO_QUIRKS_H */
8049     diff --git a/tools/perf/util/stat.c b/tools/perf/util/stat.c
8050     index ebdd130557fb..5156aa971fbb 100644
8051     --- a/tools/perf/util/stat.c
8052     +++ b/tools/perf/util/stat.c
8053     @@ -367,8 +367,10 @@ int perf_stat_process_counter(struct perf_stat_config *config,
8054     * interval mode, otherwise overall avg running
8055     * averages will be shown for each interval.
8056     */
8057     - if (config->interval)
8058     - init_stats(ps->res_stats);
8059     + if (config->interval) {
8060     + for (i = 0; i < 3; i++)
8061     + init_stats(&ps->res_stats[i]);
8062     + }
8063    
8064     if (counter->per_pkg)
8065     zero_per_pkg(counter);
8066     diff --git a/tools/testing/selftests/net/fib_nexthops.sh b/tools/testing/selftests/net/fib_nexthops.sh
8067     index 6560ed796ac4..09830b88ec8c 100755
8068     --- a/tools/testing/selftests/net/fib_nexthops.sh
8069     +++ b/tools/testing/selftests/net/fib_nexthops.sh
8070     @@ -512,6 +512,19 @@ ipv6_fcnal_runtime()
8071     run_cmd "$IP nexthop add id 86 via 2001:db8:91::2 dev veth1"
8072     run_cmd "$IP ro add 2001:db8:101::1/128 nhid 81"
8073    
8074     + # rpfilter and default route
8075     + $IP nexthop flush >/dev/null 2>&1
8076     + run_cmd "ip netns exec me ip6tables -t mangle -I PREROUTING 1 -m rpfilter --invert -j DROP"
8077     + run_cmd "$IP nexthop add id 91 via 2001:db8:91::2 dev veth1"
8078     + run_cmd "$IP nexthop add id 92 via 2001:db8:92::2 dev veth3"
8079     + run_cmd "$IP nexthop add id 93 group 91/92"
8080     + run_cmd "$IP -6 ro add default nhid 91"
8081     + run_cmd "ip netns exec me ping -c1 -w1 2001:db8:101::1"
8082     + log_test $? 0 "Nexthop with default route and rpfilter"
8083     + run_cmd "$IP -6 ro replace default nhid 93"
8084     + run_cmd "ip netns exec me ping -c1 -w1 2001:db8:101::1"
8085     + log_test $? 0 "Nexthop with multipath default route and rpfilter"
8086     +
8087     # TO-DO:
8088     # existing route with old nexthop; append route with new nexthop
8089     # existing route with old nexthop; replace route with new