Magellan Linux

Contents of /trunk/kernel-alx/patches-5.4/0116-5.4.17-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3497 - (show annotations) (download)
Mon May 11 14:36:19 2020 UTC (3 years, 11 months ago) by niro
File size: 136466 byte(s)
-linux-5.4.17
1 diff --git a/Makefile b/Makefile
2 index e16d2e58ed4b..a363a539a092 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 5
8 PATCHLEVEL = 4
9 -SUBLEVEL = 16
10 +SUBLEVEL = 17
11 EXTRAVERSION =
12 NAME = Kleptomaniac Octopus
13
14 diff --git a/arch/arc/plat-eznps/Kconfig b/arch/arc/plat-eznps/Kconfig
15 index a376a50d3fea..a931d0a256d0 100644
16 --- a/arch/arc/plat-eznps/Kconfig
17 +++ b/arch/arc/plat-eznps/Kconfig
18 @@ -7,7 +7,7 @@
19 menuconfig ARC_PLAT_EZNPS
20 bool "\"EZchip\" ARC dev platform"
21 select CPU_BIG_ENDIAN
22 - select CLKSRC_NPS
23 + select CLKSRC_NPS if !PHYS_ADDR_T_64BIT
24 select EZNPS_GIC
25 select EZCHIP_NPS_MANAGEMENT_ENET if ETHERNET
26 help
27 diff --git a/arch/arm/configs/aspeed_g5_defconfig b/arch/arm/configs/aspeed_g5_defconfig
28 index 597536cc9573..b87508c7056c 100644
29 --- a/arch/arm/configs/aspeed_g5_defconfig
30 +++ b/arch/arm/configs/aspeed_g5_defconfig
31 @@ -139,6 +139,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=6
32 CONFIG_SERIAL_8250_EXTENDED=y
33 CONFIG_SERIAL_8250_ASPEED_VUART=y
34 CONFIG_SERIAL_8250_SHARE_IRQ=y
35 +CONFIG_SERIAL_8250_DW=y
36 CONFIG_SERIAL_OF_PLATFORM=y
37 CONFIG_ASPEED_KCS_IPMI_BMC=y
38 CONFIG_ASPEED_BT_IPMI_BMC=y
39 diff --git a/arch/arm64/kvm/debug.c b/arch/arm64/kvm/debug.c
40 index 43487f035385..7a7e425616b5 100644
41 --- a/arch/arm64/kvm/debug.c
42 +++ b/arch/arm64/kvm/debug.c
43 @@ -101,7 +101,7 @@ void kvm_arm_reset_debug_ptr(struct kvm_vcpu *vcpu)
44 void kvm_arm_setup_debug(struct kvm_vcpu *vcpu)
45 {
46 bool trap_debug = !(vcpu->arch.flags & KVM_ARM64_DEBUG_DIRTY);
47 - unsigned long mdscr;
48 + unsigned long mdscr, orig_mdcr_el2 = vcpu->arch.mdcr_el2;
49
50 trace_kvm_arm_setup_debug(vcpu, vcpu->guest_debug);
51
52 @@ -197,6 +197,10 @@ void kvm_arm_setup_debug(struct kvm_vcpu *vcpu)
53 if (vcpu_read_sys_reg(vcpu, MDSCR_EL1) & (DBG_MDSCR_KDE | DBG_MDSCR_MDE))
54 vcpu->arch.flags |= KVM_ARM64_DEBUG_DIRTY;
55
56 + /* Write mdcr_el2 changes since vcpu_load on VHE systems */
57 + if (has_vhe() && orig_mdcr_el2 != vcpu->arch.mdcr_el2)
58 + write_sysreg(vcpu->arch.mdcr_el2, mdcr_el2);
59 +
60 trace_kvm_arm_set_dreg32("MDCR_EL2", vcpu->arch.mdcr_el2);
61 trace_kvm_arm_set_dreg32("MDSCR_EL1", vcpu_read_sys_reg(vcpu, MDSCR_EL1));
62 }
63 diff --git a/arch/um/include/asm/common.lds.S b/arch/um/include/asm/common.lds.S
64 index d7086b985f27..4049f2c46387 100644
65 --- a/arch/um/include/asm/common.lds.S
66 +++ b/arch/um/include/asm/common.lds.S
67 @@ -83,8 +83,8 @@
68 __preinit_array_end = .;
69 }
70 .init_array : {
71 - /* dummy - we call this ourselves */
72 __init_array_start = .;
73 + *(.init_array)
74 __init_array_end = .;
75 }
76 .fini_array : {
77 diff --git a/arch/um/kernel/dyn.lds.S b/arch/um/kernel/dyn.lds.S
78 index c69d69ee96be..f5001481010c 100644
79 --- a/arch/um/kernel/dyn.lds.S
80 +++ b/arch/um/kernel/dyn.lds.S
81 @@ -103,6 +103,7 @@ SECTIONS
82 be empty, which isn't pretty. */
83 . = ALIGN(32 / 8);
84 .preinit_array : { *(.preinit_array) }
85 + .init_array : { *(.init_array) }
86 .fini_array : { *(.fini_array) }
87 .data : {
88 INIT_TASK_DATA(KERNEL_STACK_SIZE)
89 diff --git a/crypto/af_alg.c b/crypto/af_alg.c
90 index 0dceaabc6321..3d8e53010cda 100644
91 --- a/crypto/af_alg.c
92 +++ b/crypto/af_alg.c
93 @@ -134,11 +134,13 @@ void af_alg_release_parent(struct sock *sk)
94 sk = ask->parent;
95 ask = alg_sk(sk);
96
97 - lock_sock(sk);
98 + local_bh_disable();
99 + bh_lock_sock(sk);
100 ask->nokey_refcnt -= nokey;
101 if (!last)
102 last = !--ask->refcnt;
103 - release_sock(sk);
104 + bh_unlock_sock(sk);
105 + local_bh_enable();
106
107 if (last)
108 sock_put(sk);
109 diff --git a/crypto/pcrypt.c b/crypto/pcrypt.c
110 index 543792e0ebf0..81bbea7f2ba6 100644
111 --- a/crypto/pcrypt.c
112 +++ b/crypto/pcrypt.c
113 @@ -362,11 +362,12 @@ err:
114
115 static void __exit pcrypt_exit(void)
116 {
117 + crypto_unregister_template(&pcrypt_tmpl);
118 +
119 pcrypt_fini_padata(pencrypt);
120 pcrypt_fini_padata(pdecrypt);
121
122 kset_unregister(pcrypt_kset);
123 - crypto_unregister_template(&pcrypt_tmpl);
124 }
125
126 subsys_initcall(pcrypt_init);
127 diff --git a/drivers/android/binder.c b/drivers/android/binder.c
128 index 976a69420c16..254f87b627fe 100644
129 --- a/drivers/android/binder.c
130 +++ b/drivers/android/binder.c
131 @@ -5203,10 +5203,11 @@ err_bad_arg:
132
133 static int binder_open(struct inode *nodp, struct file *filp)
134 {
135 - struct binder_proc *proc;
136 + struct binder_proc *proc, *itr;
137 struct binder_device *binder_dev;
138 struct binderfs_info *info;
139 struct dentry *binder_binderfs_dir_entry_proc = NULL;
140 + bool existing_pid = false;
141
142 binder_debug(BINDER_DEBUG_OPEN_CLOSE, "%s: %d:%d\n", __func__,
143 current->group_leader->pid, current->pid);
144 @@ -5239,19 +5240,24 @@ static int binder_open(struct inode *nodp, struct file *filp)
145 filp->private_data = proc;
146
147 mutex_lock(&binder_procs_lock);
148 + hlist_for_each_entry(itr, &binder_procs, proc_node) {
149 + if (itr->pid == proc->pid) {
150 + existing_pid = true;
151 + break;
152 + }
153 + }
154 hlist_add_head(&proc->proc_node, &binder_procs);
155 mutex_unlock(&binder_procs_lock);
156
157 - if (binder_debugfs_dir_entry_proc) {
158 + if (binder_debugfs_dir_entry_proc && !existing_pid) {
159 char strbuf[11];
160
161 snprintf(strbuf, sizeof(strbuf), "%u", proc->pid);
162 /*
163 - * proc debug entries are shared between contexts, so
164 - * this will fail if the process tries to open the driver
165 - * again with a different context. The priting code will
166 - * anyway print all contexts that a given PID has, so this
167 - * is not a problem.
168 + * proc debug entries are shared between contexts.
169 + * Only create for the first PID to avoid debugfs log spamming
170 + * The printing code will anyway print all contexts for a given
171 + * PID so this is not a problem.
172 */
173 proc->debugfs_entry = debugfs_create_file(strbuf, 0444,
174 binder_debugfs_dir_entry_proc,
175 @@ -5259,19 +5265,16 @@ static int binder_open(struct inode *nodp, struct file *filp)
176 &proc_fops);
177 }
178
179 - if (binder_binderfs_dir_entry_proc) {
180 + if (binder_binderfs_dir_entry_proc && !existing_pid) {
181 char strbuf[11];
182 struct dentry *binderfs_entry;
183
184 snprintf(strbuf, sizeof(strbuf), "%u", proc->pid);
185 /*
186 * Similar to debugfs, the process specific log file is shared
187 - * between contexts. If the file has already been created for a
188 - * process, the following binderfs_create_file() call will
189 - * fail with error code EEXIST if another context of the same
190 - * process invoked binder_open(). This is ok since same as
191 - * debugfs, the log file will contain information on all
192 - * contexts of a given PID.
193 + * between contexts. Only create for the first PID.
194 + * This is ok since same as debugfs, the log file will contain
195 + * information on all contexts of a given PID.
196 */
197 binderfs_entry = binderfs_create_file(binder_binderfs_dir_entry_proc,
198 strbuf, &proc_fops, (void *)(unsigned long)proc->pid);
199 @@ -5281,10 +5284,8 @@ static int binder_open(struct inode *nodp, struct file *filp)
200 int error;
201
202 error = PTR_ERR(binderfs_entry);
203 - if (error != -EEXIST) {
204 - pr_warn("Unable to create file %s in binderfs (error %d)\n",
205 - strbuf, error);
206 - }
207 + pr_warn("Unable to create file %s in binderfs (error %d)\n",
208 + strbuf, error);
209 }
210 }
211
212 diff --git a/drivers/atm/eni.c b/drivers/atm/eni.c
213 index b23d1e4bad33..9d0d65efcd94 100644
214 --- a/drivers/atm/eni.c
215 +++ b/drivers/atm/eni.c
216 @@ -374,7 +374,7 @@ static int do_rx_dma(struct atm_vcc *vcc,struct sk_buff *skb,
217 here = (eni_vcc->descr+skip) & (eni_vcc->words-1);
218 dma[j++] = (here << MID_DMA_COUNT_SHIFT) | (vcc->vci
219 << MID_DMA_VCI_SHIFT) | MID_DT_JK;
220 - j++;
221 + dma[j++] = 0;
222 }
223 here = (eni_vcc->descr+size+skip) & (eni_vcc->words-1);
224 if (!eff) size += skip;
225 @@ -447,7 +447,7 @@ static int do_rx_dma(struct atm_vcc *vcc,struct sk_buff *skb,
226 if (size != eff) {
227 dma[j++] = (here << MID_DMA_COUNT_SHIFT) |
228 (vcc->vci << MID_DMA_VCI_SHIFT) | MID_DT_JK;
229 - j++;
230 + dma[j++] = 0;
231 }
232 if (!j || j > 2*RX_DMA_BUF) {
233 printk(KERN_CRIT DEV_LABEL "!j or j too big!!!\n");
234 diff --git a/drivers/base/component.c b/drivers/base/component.c
235 index 532a3a5d8f63..1fdbd6ff2058 100644
236 --- a/drivers/base/component.c
237 +++ b/drivers/base/component.c
238 @@ -102,11 +102,11 @@ static int component_devices_show(struct seq_file *s, void *data)
239 seq_printf(s, "%-40s %20s\n", "device name", "status");
240 seq_puts(s, "-------------------------------------------------------------\n");
241 for (i = 0; i < match->num; i++) {
242 - struct device *d = (struct device *)match->compare[i].data;
243 + struct component *component = match->compare[i].component;
244
245 - seq_printf(s, "%-40s %20s\n", dev_name(d),
246 - match->compare[i].component ?
247 - "registered" : "not registered");
248 + seq_printf(s, "%-40s %20s\n",
249 + component ? dev_name(component->dev) : "(unknown)",
250 + component ? (component->bound ? "bound" : "not bound") : "not registered");
251 }
252 mutex_unlock(&component_mutex);
253
254 diff --git a/drivers/base/test/test_async_driver_probe.c b/drivers/base/test/test_async_driver_probe.c
255 index f4b1d8e54daf..3bb7beb127a9 100644
256 --- a/drivers/base/test/test_async_driver_probe.c
257 +++ b/drivers/base/test/test_async_driver_probe.c
258 @@ -44,7 +44,8 @@ static int test_probe(struct platform_device *pdev)
259 * performing an async init on that node.
260 */
261 if (dev->driver->probe_type == PROBE_PREFER_ASYNCHRONOUS) {
262 - if (dev_to_node(dev) != numa_node_id()) {
263 + if (IS_ENABLED(CONFIG_NUMA) &&
264 + dev_to_node(dev) != numa_node_id()) {
265 dev_warn(dev, "NUMA node mismatch %d != %d\n",
266 dev_to_node(dev), numa_node_id());
267 atomic_inc(&warnings);
268 diff --git a/drivers/bluetooth/btbcm.c b/drivers/bluetooth/btbcm.c
269 index 2d2e6d862068..f02a4bdc0ca7 100644
270 --- a/drivers/bluetooth/btbcm.c
271 +++ b/drivers/bluetooth/btbcm.c
272 @@ -440,6 +440,12 @@ int btbcm_finalize(struct hci_dev *hdev)
273
274 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks);
275
276 + /* Some devices ship with the controller default address.
277 + * Allow the bootloader to set a valid address through the
278 + * device tree.
279 + */
280 + set_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks);
281 +
282 return 0;
283 }
284 EXPORT_SYMBOL_GPL(btbcm_finalize);
285 diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
286 index 04cf767d0708..4e7ef35f1c8f 100644
287 --- a/drivers/bluetooth/btusb.c
288 +++ b/drivers/bluetooth/btusb.c
289 @@ -2585,7 +2585,7 @@ static void btusb_mtk_wmt_recv(struct urb *urb)
290 * and being processed the events from there then.
291 */
292 if (test_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags)) {
293 - data->evt_skb = skb_clone(skb, GFP_KERNEL);
294 + data->evt_skb = skb_clone(skb, GFP_ATOMIC);
295 if (!data->evt_skb)
296 goto err_out;
297 }
298 diff --git a/drivers/bus/ti-sysc.c b/drivers/bus/ti-sysc.c
299 index abbf281ee337..d9846265a5cd 100644
300 --- a/drivers/bus/ti-sysc.c
301 +++ b/drivers/bus/ti-sysc.c
302 @@ -923,6 +923,9 @@ set_midle:
303 return -EINVAL;
304 }
305
306 + if (ddata->cfg.quirks & SYSC_QUIRK_SWSUP_MSTANDBY)
307 + best_mode = SYSC_IDLE_NO;
308 +
309 reg &= ~(SYSC_IDLE_MASK << regbits->midle_shift);
310 reg |= best_mode << regbits->midle_shift;
311 sysc_write(ddata, ddata->offsets[SYSC_SYSCONFIG], reg);
312 @@ -984,6 +987,10 @@ static int sysc_disable_module(struct device *dev)
313 return ret;
314 }
315
316 + if (ddata->cfg.quirks & (SYSC_QUIRK_SWSUP_MSTANDBY) ||
317 + ddata->cfg.quirks & (SYSC_QUIRK_FORCE_MSTANDBY))
318 + best_mode = SYSC_IDLE_FORCE;
319 +
320 reg &= ~(SYSC_IDLE_MASK << regbits->midle_shift);
321 reg |= best_mode << regbits->midle_shift;
322 sysc_write(ddata, ddata->offsets[SYSC_SYSCONFIG], reg);
323 @@ -1242,6 +1249,8 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {
324 SYSC_QUIRK_SWSUP_SIDLE),
325
326 /* Quirks that need to be set based on detected module */
327 + SYSC_QUIRK("aess", 0, 0, 0x10, -1, 0x40000000, 0xffffffff,
328 + SYSC_MODULE_QUIRK_AESS),
329 SYSC_QUIRK("hdq1w", 0, 0, 0x14, 0x18, 0x00000006, 0xffffffff,
330 SYSC_MODULE_QUIRK_HDQ1W),
331 SYSC_QUIRK("hdq1w", 0, 0, 0x14, 0x18, 0x0000000a, 0xffffffff,
332 @@ -1257,6 +1266,10 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {
333 SYSC_QUIRK("gpu", 0x50000000, 0x14, -1, -1, 0x00010201, 0xffffffff, 0),
334 SYSC_QUIRK("gpu", 0x50000000, 0xfe00, 0xfe10, -1, 0x40000000 , 0xffffffff,
335 SYSC_MODULE_QUIRK_SGX),
336 + SYSC_QUIRK("usb_otg_hs", 0, 0x400, 0x404, 0x408, 0x00000050,
337 + 0xffffffff, SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY),
338 + SYSC_QUIRK("usb_otg_hs", 0, 0, 0x10, -1, 0x4ea2080d, 0xffffffff,
339 + SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_SWSUP_MSTANDBY),
340 SYSC_QUIRK("wdt", 0, 0, 0x10, 0x14, 0x502a0500, 0xfffff0f0,
341 SYSC_MODULE_QUIRK_WDT),
342 /* Watchdog on am3 and am4 */
343 @@ -1266,7 +1279,6 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {
344 #ifdef DEBUG
345 SYSC_QUIRK("adc", 0, 0, 0x10, -1, 0x47300001, 0xffffffff, 0),
346 SYSC_QUIRK("atl", 0, 0, -1, -1, 0x0a070100, 0xffffffff, 0),
347 - SYSC_QUIRK("aess", 0, 0, 0x10, -1, 0x40000000, 0xffffffff, 0),
348 SYSC_QUIRK("cm", 0, 0, -1, -1, 0x40000301, 0xffffffff, 0),
349 SYSC_QUIRK("control", 0, 0, 0x10, -1, 0x40000900, 0xffffffff, 0),
350 SYSC_QUIRK("cpgmac", 0, 0x1200, 0x1208, 0x1204, 0x4edb1902,
351 @@ -1315,8 +1327,6 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = {
352 SYSC_QUIRK("usbhstll", 0, 0, 0x10, 0x14, 0x00000008, 0xffffffff, 0),
353 SYSC_QUIRK("usb_host_hs", 0, 0, 0x10, 0x14, 0x50700100, 0xffffffff, 0),
354 SYSC_QUIRK("usb_host_hs", 0, 0, 0x10, -1, 0x50700101, 0xffffffff, 0),
355 - SYSC_QUIRK("usb_otg_hs", 0, 0x400, 0x404, 0x408, 0x00000050,
356 - 0xffffffff, 0),
357 SYSC_QUIRK("vfpe", 0, 0, 0x104, -1, 0x4d001200, 0xffffffff, 0),
358 #endif
359 };
360 @@ -1400,6 +1410,14 @@ static void sysc_clk_enable_quirk_hdq1w(struct sysc *ddata)
361 sysc_write(ddata, offset, val);
362 }
363
364 +/* AESS (Audio Engine SubSystem) needs autogating set after enable */
365 +static void sysc_module_enable_quirk_aess(struct sysc *ddata)
366 +{
367 + int offset = 0x7c; /* AESS_AUTO_GATING_ENABLE */
368 +
369 + sysc_write(ddata, offset, 1);
370 +}
371 +
372 /* I2C needs extra enable bit toggling for reset */
373 static void sysc_clk_quirk_i2c(struct sysc *ddata, bool enable)
374 {
375 @@ -1482,6 +1500,9 @@ static void sysc_init_module_quirks(struct sysc *ddata)
376 return;
377 }
378
379 + if (ddata->cfg.quirks & SYSC_MODULE_QUIRK_AESS)
380 + ddata->module_enable_quirk = sysc_module_enable_quirk_aess;
381 +
382 if (ddata->cfg.quirks & SYSC_MODULE_QUIRK_SGX)
383 ddata->module_enable_quirk = sysc_module_enable_quirk_sgx;
384
385 diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c
386 index db22777d59b4..62930351ccd9 100644
387 --- a/drivers/crypto/caam/ctrl.c
388 +++ b/drivers/crypto/caam/ctrl.c
389 @@ -685,11 +685,9 @@ static int caam_probe(struct platform_device *pdev)
390 of_node_put(np);
391
392 if (!ctrlpriv->mc_en)
393 - clrsetbits_32(&ctrl->mcr, MCFGR_AWCACHE_MASK | MCFGR_LONG_PTR,
394 + clrsetbits_32(&ctrl->mcr, MCFGR_AWCACHE_MASK,
395 MCFGR_AWCACHE_CACH | MCFGR_AWCACHE_BUFF |
396 - MCFGR_WDENABLE | MCFGR_LARGE_BURST |
397 - (sizeof(dma_addr_t) == sizeof(u64) ?
398 - MCFGR_LONG_PTR : 0));
399 + MCFGR_WDENABLE | MCFGR_LARGE_BURST);
400
401 handle_imx6_err005766(&ctrl->mcr);
402
403 diff --git a/drivers/crypto/chelsio/chcr_algo.c b/drivers/crypto/chelsio/chcr_algo.c
404 index 38ee38b37ae6..01dd418bdadc 100644
405 --- a/drivers/crypto/chelsio/chcr_algo.c
406 +++ b/drivers/crypto/chelsio/chcr_algo.c
407 @@ -3194,9 +3194,6 @@ static int chcr_gcm_setauthsize(struct crypto_aead *tfm, unsigned int authsize)
408 aeadctx->mayverify = VERIFY_SW;
409 break;
410 default:
411 -
412 - crypto_tfm_set_flags((struct crypto_tfm *) tfm,
413 - CRYPTO_TFM_RES_BAD_KEY_LEN);
414 return -EINVAL;
415 }
416 return crypto_aead_setauthsize(aeadctx->sw_cipher, authsize);
417 @@ -3221,8 +3218,6 @@ static int chcr_4106_4309_setauthsize(struct crypto_aead *tfm,
418 aeadctx->mayverify = VERIFY_HW;
419 break;
420 default:
421 - crypto_tfm_set_flags((struct crypto_tfm *)tfm,
422 - CRYPTO_TFM_RES_BAD_KEY_LEN);
423 return -EINVAL;
424 }
425 return crypto_aead_setauthsize(aeadctx->sw_cipher, authsize);
426 @@ -3263,8 +3258,6 @@ static int chcr_ccm_setauthsize(struct crypto_aead *tfm,
427 aeadctx->mayverify = VERIFY_HW;
428 break;
429 default:
430 - crypto_tfm_set_flags((struct crypto_tfm *)tfm,
431 - CRYPTO_TFM_RES_BAD_KEY_LEN);
432 return -EINVAL;
433 }
434 return crypto_aead_setauthsize(aeadctx->sw_cipher, authsize);
435 @@ -3289,8 +3282,7 @@ static int chcr_ccm_common_setkey(struct crypto_aead *aead,
436 ck_size = CHCR_KEYCTX_CIPHER_KEY_SIZE_256;
437 mk_size = CHCR_KEYCTX_MAC_KEY_SIZE_256;
438 } else {
439 - crypto_tfm_set_flags((struct crypto_tfm *)aead,
440 - CRYPTO_TFM_RES_BAD_KEY_LEN);
441 + crypto_aead_set_flags(aead, CRYPTO_TFM_RES_BAD_KEY_LEN);
442 aeadctx->enckey_len = 0;
443 return -EINVAL;
444 }
445 @@ -3328,8 +3320,7 @@ static int chcr_aead_rfc4309_setkey(struct crypto_aead *aead, const u8 *key,
446 int error;
447
448 if (keylen < 3) {
449 - crypto_tfm_set_flags((struct crypto_tfm *)aead,
450 - CRYPTO_TFM_RES_BAD_KEY_LEN);
451 + crypto_aead_set_flags(aead, CRYPTO_TFM_RES_BAD_KEY_LEN);
452 aeadctx->enckey_len = 0;
453 return -EINVAL;
454 }
455 @@ -3379,8 +3370,7 @@ static int chcr_gcm_setkey(struct crypto_aead *aead, const u8 *key,
456 } else if (keylen == AES_KEYSIZE_256) {
457 ck_size = CHCR_KEYCTX_CIPHER_KEY_SIZE_256;
458 } else {
459 - crypto_tfm_set_flags((struct crypto_tfm *)aead,
460 - CRYPTO_TFM_RES_BAD_KEY_LEN);
461 + crypto_aead_set_flags(aead, CRYPTO_TFM_RES_BAD_KEY_LEN);
462 pr_err("GCM: Invalid key length %d\n", keylen);
463 ret = -EINVAL;
464 goto out;
465 diff --git a/drivers/crypto/vmx/aes_xts.c b/drivers/crypto/vmx/aes_xts.c
466 index d59e736882f6..9fee1b1532a4 100644
467 --- a/drivers/crypto/vmx/aes_xts.c
468 +++ b/drivers/crypto/vmx/aes_xts.c
469 @@ -84,6 +84,9 @@ static int p8_aes_xts_crypt(struct skcipher_request *req, int enc)
470 u8 tweak[AES_BLOCK_SIZE];
471 int ret;
472
473 + if (req->cryptlen < AES_BLOCK_SIZE)
474 + return -EINVAL;
475 +
476 if (!crypto_simd_usable() || (req->cryptlen % XTS_BLOCK_SIZE) != 0) {
477 struct skcipher_request *subreq = skcipher_request_ctx(req);
478
479 diff --git a/drivers/extcon/extcon-intel-cht-wc.c b/drivers/extcon/extcon-intel-cht-wc.c
480 index 9d32150e68db..771f6f4cf92e 100644
481 --- a/drivers/extcon/extcon-intel-cht-wc.c
482 +++ b/drivers/extcon/extcon-intel-cht-wc.c
483 @@ -338,6 +338,7 @@ static int cht_wc_extcon_probe(struct platform_device *pdev)
484 struct intel_soc_pmic *pmic = dev_get_drvdata(pdev->dev.parent);
485 struct cht_wc_extcon_data *ext;
486 unsigned long mask = ~(CHT_WC_PWRSRC_VBUS | CHT_WC_PWRSRC_USBID_MASK);
487 + int pwrsrc_sts, id;
488 int irq, ret;
489
490 irq = platform_get_irq(pdev, 0);
491 @@ -387,8 +388,19 @@ static int cht_wc_extcon_probe(struct platform_device *pdev)
492 goto disable_sw_control;
493 }
494
495 - /* Route D+ and D- to PMIC for initial charger detection */
496 - cht_wc_extcon_set_phymux(ext, MUX_SEL_PMIC);
497 + ret = regmap_read(ext->regmap, CHT_WC_PWRSRC_STS, &pwrsrc_sts);
498 + if (ret) {
499 + dev_err(ext->dev, "Error reading pwrsrc status: %d\n", ret);
500 + goto disable_sw_control;
501 + }
502 +
503 + /*
504 + * If no USB host or device connected, route D+ and D- to PMIC for
505 + * initial charger detection
506 + */
507 + id = cht_wc_extcon_get_id(ext, pwrsrc_sts);
508 + if (id != INTEL_USB_ID_GND)
509 + cht_wc_extcon_set_phymux(ext, MUX_SEL_PMIC);
510
511 /* Get initial state */
512 cht_wc_extcon_pwrsrc_event(ext);
513 diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
514 index ceb908f7dbe5..f9263426af03 100644
515 --- a/drivers/gpio/Kconfig
516 +++ b/drivers/gpio/Kconfig
517 @@ -1120,6 +1120,7 @@ config GPIO_MADERA
518 config GPIO_MAX77620
519 tristate "GPIO support for PMIC MAX77620 and MAX20024"
520 depends on MFD_MAX77620
521 + select GPIOLIB_IRQCHIP
522 help
523 GPIO driver for MAX77620 and MAX20024 PMIC from Maxim Semiconductor.
524 MAX77620 PMIC has 8 pins that can be configured as GPIOs. The
525 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
526 index 33a1099e2f33..bb9a2771a0f9 100644
527 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
528 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
529 @@ -1023,6 +1023,7 @@ static const struct pci_device_id pciidlist[] = {
530
531 /* Navi12 */
532 {0x1002, 0x7360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI12|AMD_EXP_HW_SUPPORT},
533 + {0x1002, 0x7362, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_NAVI12|AMD_EXP_HW_SUPPORT},
534
535 {0, 0, 0}
536 };
537 diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
538 index 4e9c15c409ba..360c87ba4595 100644
539 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
540 +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
541 @@ -3266,27 +3266,21 @@ get_output_color_space(const struct dc_crtc_timing *dc_crtc_timing)
542 return color_space;
543 }
544
545 -static void reduce_mode_colour_depth(struct dc_crtc_timing *timing_out)
546 -{
547 - if (timing_out->display_color_depth <= COLOR_DEPTH_888)
548 - return;
549 -
550 - timing_out->display_color_depth--;
551 -}
552 -
553 -static void adjust_colour_depth_from_display_info(struct dc_crtc_timing *timing_out,
554 - const struct drm_display_info *info)
555 +static bool adjust_colour_depth_from_display_info(
556 + struct dc_crtc_timing *timing_out,
557 + const struct drm_display_info *info)
558 {
559 + enum dc_color_depth depth = timing_out->display_color_depth;
560 int normalized_clk;
561 - if (timing_out->display_color_depth <= COLOR_DEPTH_888)
562 - return;
563 do {
564 normalized_clk = timing_out->pix_clk_100hz / 10;
565 /* YCbCr 4:2:0 requires additional adjustment of 1/2 */
566 if (timing_out->pixel_encoding == PIXEL_ENCODING_YCBCR420)
567 normalized_clk /= 2;
568 /* Adjusting pix clock following on HDMI spec based on colour depth */
569 - switch (timing_out->display_color_depth) {
570 + switch (depth) {
571 + case COLOR_DEPTH_888:
572 + break;
573 case COLOR_DEPTH_101010:
574 normalized_clk = (normalized_clk * 30) / 24;
575 break;
576 @@ -3297,14 +3291,15 @@ static void adjust_colour_depth_from_display_info(struct dc_crtc_timing *timing_
577 normalized_clk = (normalized_clk * 48) / 24;
578 break;
579 default:
580 - return;
581 + /* The above depths are the only ones valid for HDMI. */
582 + return false;
583 }
584 - if (normalized_clk <= info->max_tmds_clock)
585 - return;
586 - reduce_mode_colour_depth(timing_out);
587 -
588 - } while (timing_out->display_color_depth > COLOR_DEPTH_888);
589 -
590 + if (normalized_clk <= info->max_tmds_clock) {
591 + timing_out->display_color_depth = depth;
592 + return true;
593 + }
594 + } while (--depth > COLOR_DEPTH_666);
595 + return false;
596 }
597
598 static void fill_stream_properties_from_drm_display_mode(
599 @@ -3370,8 +3365,14 @@ static void fill_stream_properties_from_drm_display_mode(
600
601 stream->out_transfer_func->type = TF_TYPE_PREDEFINED;
602 stream->out_transfer_func->tf = TRANSFER_FUNCTION_SRGB;
603 - if (stream->signal == SIGNAL_TYPE_HDMI_TYPE_A)
604 - adjust_colour_depth_from_display_info(timing_out, info);
605 + if (stream->signal == SIGNAL_TYPE_HDMI_TYPE_A) {
606 + if (!adjust_colour_depth_from_display_info(timing_out, info) &&
607 + drm_mode_is_420_also(info, mode_in) &&
608 + timing_out->pixel_encoding != PIXEL_ENCODING_YCBCR420) {
609 + timing_out->pixel_encoding = PIXEL_ENCODING_YCBCR420;
610 + adjust_colour_depth_from_display_info(timing_out, info);
611 + }
612 + }
613 }
614
615 static void fill_audio_info(struct audio_info *audio_info,
616 diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
617 index 8063b1d567b1..e6e4c841fb06 100644
618 --- a/drivers/hid/hid-asus.c
619 +++ b/drivers/hid/hid-asus.c
620 @@ -261,7 +261,8 @@ static int asus_event(struct hid_device *hdev, struct hid_field *field,
621 struct hid_usage *usage, __s32 value)
622 {
623 if ((usage->hid & HID_USAGE_PAGE) == 0xff310000 &&
624 - (usage->hid & HID_USAGE) != 0x00 && !usage->type) {
625 + (usage->hid & HID_USAGE) != 0x00 &&
626 + (usage->hid & HID_USAGE) != 0xff && !usage->type) {
627 hid_warn(hdev, "Unmapped Asus vendor usagepage code 0x%02x\n",
628 usage->hid & HID_USAGE);
629 }
630 diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
631 index 6273e7178e78..5fc82029a03b 100644
632 --- a/drivers/hid/hid-ids.h
633 +++ b/drivers/hid/hid-ids.h
634 @@ -631,6 +631,7 @@
635 #define USB_VENDOR_ID_ITE 0x048d
636 #define USB_DEVICE_ID_ITE_LENOVO_YOGA 0x8386
637 #define USB_DEVICE_ID_ITE_LENOVO_YOGA2 0x8350
638 +#define I2C_DEVICE_ID_ITE_LENOVO_LEGION_Y720 0x837a
639 #define USB_DEVICE_ID_ITE_LENOVO_YOGA900 0x8396
640 #define USB_DEVICE_ID_ITE8595 0x8595
641
642 @@ -730,6 +731,7 @@
643 #define USB_DEVICE_ID_LG_MULTITOUCH 0x0064
644 #define USB_DEVICE_ID_LG_MELFAS_MT 0x6007
645 #define I2C_DEVICE_ID_LG_8001 0x8001
646 +#define I2C_DEVICE_ID_LG_7010 0x7010
647
648 #define USB_VENDOR_ID_LOGITECH 0x046d
649 #define USB_DEVICE_ID_LOGITECH_AUDIOHUB 0x0a0e
650 @@ -1098,6 +1100,7 @@
651 #define USB_DEVICE_ID_SYNAPTICS_LTS2 0x1d10
652 #define USB_DEVICE_ID_SYNAPTICS_HD 0x0ac3
653 #define USB_DEVICE_ID_SYNAPTICS_QUAD_HD 0x1ac3
654 +#define USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5_012 0x2968
655 #define USB_DEVICE_ID_SYNAPTICS_TP_V103 0x5710
656 #define USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5 0x81a7
657
658 diff --git a/drivers/hid/hid-ite.c b/drivers/hid/hid-ite.c
659 index a45f2352618d..c436e12feb23 100644
660 --- a/drivers/hid/hid-ite.c
661 +++ b/drivers/hid/hid-ite.c
662 @@ -40,6 +40,9 @@ static int ite_event(struct hid_device *hdev, struct hid_field *field,
663 static const struct hid_device_id ite_devices[] = {
664 { HID_USB_DEVICE(USB_VENDOR_ID_ITE, USB_DEVICE_ID_ITE8595) },
665 { HID_USB_DEVICE(USB_VENDOR_ID_258A, USB_DEVICE_ID_258A_6A88) },
666 + /* ITE8595 USB kbd ctlr, with Synaptics touchpad connected to it. */
667 + { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS,
668 + USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5_012) },
669 { }
670 };
671 MODULE_DEVICE_TABLE(hid, ite_devices);
672 diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
673 index 3cfeb1629f79..362805ddf377 100644
674 --- a/drivers/hid/hid-multitouch.c
675 +++ b/drivers/hid/hid-multitouch.c
676 @@ -1019,7 +1019,7 @@ static int mt_process_slot(struct mt_device *td, struct input_dev *input,
677 tool = MT_TOOL_DIAL;
678 else if (unlikely(!confidence_state)) {
679 tool = MT_TOOL_PALM;
680 - if (!active &&
681 + if (!active && mt &&
682 input_mt_is_active(&mt->slots[slotnum])) {
683 /*
684 * The non-confidence was reported for
685 @@ -1985,6 +1985,9 @@ static const struct hid_device_id mt_devices[] = {
686 { .driver_data = MT_CLS_LG,
687 HID_USB_DEVICE(USB_VENDOR_ID_LG,
688 USB_DEVICE_ID_LG_MELFAS_MT) },
689 + { .driver_data = MT_CLS_LG,
690 + HID_DEVICE(BUS_I2C, HID_GROUP_GENERIC,
691 + USB_VENDOR_ID_LG, I2C_DEVICE_ID_LG_7010) },
692
693 /* MosArt panels */
694 { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
695 diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
696 index 9a35af1e2662..fa58a7cbb3ff 100644
697 --- a/drivers/hid/hid-quirks.c
698 +++ b/drivers/hid/hid-quirks.c
699 @@ -174,6 +174,7 @@ static const struct hid_device_id hid_quirks[] = {
700 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET), HID_QUIRK_MULTI_INPUT },
701 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD2, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
702 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
703 + { HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE), HID_QUIRK_MULTI_INPUT },
704
705 { 0 }
706 };
707 diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c
708 index 8dae0f9b819e..6286204d4c56 100644
709 --- a/drivers/hid/hid-steam.c
710 +++ b/drivers/hid/hid-steam.c
711 @@ -768,8 +768,12 @@ static int steam_probe(struct hid_device *hdev,
712
713 if (steam->quirks & STEAM_QUIRK_WIRELESS) {
714 hid_info(hdev, "Steam wireless receiver connected");
715 + /* If using a wireless adaptor ask for connection status */
716 + steam->connected = false;
717 steam_request_conn_status(steam);
718 } else {
719 + /* A wired connection is always present */
720 + steam->connected = true;
721 ret = steam_register(steam);
722 if (ret) {
723 hid_err(hdev,
724 diff --git a/drivers/hid/i2c-hid/i2c-hid-core.c b/drivers/hid/i2c-hid/i2c-hid-core.c
725 index ac44bf752ff1..479934f7d241 100644
726 --- a/drivers/hid/i2c-hid/i2c-hid-core.c
727 +++ b/drivers/hid/i2c-hid/i2c-hid-core.c
728 @@ -49,6 +49,8 @@
729 #define I2C_HID_QUIRK_NO_IRQ_AFTER_RESET BIT(1)
730 #define I2C_HID_QUIRK_BOGUS_IRQ BIT(4)
731 #define I2C_HID_QUIRK_RESET_ON_RESUME BIT(5)
732 +#define I2C_HID_QUIRK_BAD_INPUT_SIZE BIT(6)
733 +
734
735 /* flags */
736 #define I2C_HID_STARTED 0
737 @@ -177,6 +179,8 @@ static const struct i2c_hid_quirks {
738 I2C_HID_QUIRK_BOGUS_IRQ },
739 { USB_VENDOR_ID_ALPS_JP, HID_ANY_ID,
740 I2C_HID_QUIRK_RESET_ON_RESUME },
741 + { USB_VENDOR_ID_ITE, I2C_DEVICE_ID_ITE_LENOVO_LEGION_Y720,
742 + I2C_HID_QUIRK_BAD_INPUT_SIZE },
743 { 0, 0 }
744 };
745
746 @@ -498,9 +502,15 @@ static void i2c_hid_get_input(struct i2c_hid *ihid)
747 }
748
749 if ((ret_size > size) || (ret_size < 2)) {
750 - dev_err(&ihid->client->dev, "%s: incomplete report (%d/%d)\n",
751 - __func__, size, ret_size);
752 - return;
753 + if (ihid->quirks & I2C_HID_QUIRK_BAD_INPUT_SIZE) {
754 + ihid->inbuf[0] = size & 0xff;
755 + ihid->inbuf[1] = size >> 8;
756 + ret_size = size;
757 + } else {
758 + dev_err(&ihid->client->dev, "%s: incomplete report (%d/%d)\n",
759 + __func__, size, ret_size);
760 + return;
761 + }
762 }
763
764 i2c_hid_dbg(ihid, "input: %*ph\n", ret_size, ihid->inbuf);
765 diff --git a/drivers/hid/intel-ish-hid/ipc/hw-ish.h b/drivers/hid/intel-ish-hid/ipc/hw-ish.h
766 index 6c1e6110867f..1fb294ca463e 100644
767 --- a/drivers/hid/intel-ish-hid/ipc/hw-ish.h
768 +++ b/drivers/hid/intel-ish-hid/ipc/hw-ish.h
769 @@ -24,7 +24,9 @@
770 #define ICL_MOBILE_DEVICE_ID 0x34FC
771 #define SPT_H_DEVICE_ID 0xA135
772 #define CML_LP_DEVICE_ID 0x02FC
773 +#define CMP_H_DEVICE_ID 0x06FC
774 #define EHL_Ax_DEVICE_ID 0x4BB3
775 +#define TGL_LP_DEVICE_ID 0xA0FC
776
777 #define REVISION_ID_CHT_A0 0x6
778 #define REVISION_ID_CHT_Ax_SI 0x0
779 diff --git a/drivers/hid/intel-ish-hid/ipc/pci-ish.c b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
780 index 784dcc8c7022..f491d8b4e24c 100644
781 --- a/drivers/hid/intel-ish-hid/ipc/pci-ish.c
782 +++ b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
783 @@ -34,7 +34,9 @@ static const struct pci_device_id ish_pci_tbl[] = {
784 {PCI_DEVICE(PCI_VENDOR_ID_INTEL, ICL_MOBILE_DEVICE_ID)},
785 {PCI_DEVICE(PCI_VENDOR_ID_INTEL, SPT_H_DEVICE_ID)},
786 {PCI_DEVICE(PCI_VENDOR_ID_INTEL, CML_LP_DEVICE_ID)},
787 + {PCI_DEVICE(PCI_VENDOR_ID_INTEL, CMP_H_DEVICE_ID)},
788 {PCI_DEVICE(PCI_VENDOR_ID_INTEL, EHL_Ax_DEVICE_ID)},
789 + {PCI_DEVICE(PCI_VENDOR_ID_INTEL, TGL_LP_DEVICE_ID)},
790 {0, }
791 };
792 MODULE_DEVICE_TABLE(pci, ish_pci_tbl);
793 diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
794 index ccb74529bc78..d99a9d407671 100644
795 --- a/drivers/hid/wacom_wac.c
796 +++ b/drivers/hid/wacom_wac.c
797 @@ -2096,14 +2096,16 @@ static void wacom_wac_pad_event(struct hid_device *hdev, struct hid_field *field
798 (hdev->product == 0x34d || hdev->product == 0x34e || /* MobileStudio Pro */
799 hdev->product == 0x357 || hdev->product == 0x358 || /* Intuos Pro 2 */
800 hdev->product == 0x392 || /* Intuos Pro 2 */
801 - hdev->product == 0x398 || hdev->product == 0x399)) { /* MobileStudio Pro */
802 + hdev->product == 0x398 || hdev->product == 0x399 || /* MobileStudio Pro */
803 + hdev->product == 0x3AA)) { /* MobileStudio Pro */
804 value = (field->logical_maximum - value);
805
806 if (hdev->product == 0x357 || hdev->product == 0x358 ||
807 hdev->product == 0x392)
808 value = wacom_offset_rotation(input, usage, value, 3, 16);
809 else if (hdev->product == 0x34d || hdev->product == 0x34e ||
810 - hdev->product == 0x398 || hdev->product == 0x399)
811 + hdev->product == 0x398 || hdev->product == 0x399 ||
812 + hdev->product == 0x3AA)
813 value = wacom_offset_rotation(input, usage, value, 1, 2);
814 }
815 else {
816 diff --git a/drivers/iio/adc/stm32-dfsdm-adc.c b/drivers/iio/adc/stm32-dfsdm-adc.c
817 index e493242c266e..0339ecdd06bd 100644
818 --- a/drivers/iio/adc/stm32-dfsdm-adc.c
819 +++ b/drivers/iio/adc/stm32-dfsdm-adc.c
820 @@ -1204,6 +1204,8 @@ static int stm32_dfsdm_single_conv(struct iio_dev *indio_dev,
821
822 stm32_dfsdm_stop_conv(adc);
823
824 + stm32_dfsdm_process_data(adc, res);
825 +
826 stop_dfsdm:
827 stm32_dfsdm_stop_dfsdm(adc->dfsdm);
828
829 diff --git a/drivers/iio/gyro/st_gyro_core.c b/drivers/iio/gyro/st_gyro_core.c
830 index c0acbb5d2ffb..b21f72dd473c 100644
831 --- a/drivers/iio/gyro/st_gyro_core.c
832 +++ b/drivers/iio/gyro/st_gyro_core.c
833 @@ -139,7 +139,6 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
834 [2] = LSM330DLC_GYRO_DEV_NAME,
835 [3] = L3G4IS_GYRO_DEV_NAME,
836 [4] = LSM330_GYRO_DEV_NAME,
837 - [5] = LSM9DS0_GYRO_DEV_NAME,
838 },
839 .ch = (struct iio_chan_spec *)st_gyro_16bit_channels,
840 .odr = {
841 @@ -209,6 +208,80 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = {
842 .multi_read_bit = true,
843 .bootime = 2,
844 },
845 + {
846 + .wai = 0xd4,
847 + .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
848 + .sensors_supported = {
849 + [0] = LSM9DS0_GYRO_DEV_NAME,
850 + },
851 + .ch = (struct iio_chan_spec *)st_gyro_16bit_channels,
852 + .odr = {
853 + .addr = 0x20,
854 + .mask = GENMASK(7, 6),
855 + .odr_avl = {
856 + { .hz = 95, .value = 0x00, },
857 + { .hz = 190, .value = 0x01, },
858 + { .hz = 380, .value = 0x02, },
859 + { .hz = 760, .value = 0x03, },
860 + },
861 + },
862 + .pw = {
863 + .addr = 0x20,
864 + .mask = BIT(3),
865 + .value_on = ST_SENSORS_DEFAULT_POWER_ON_VALUE,
866 + .value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE,
867 + },
868 + .enable_axis = {
869 + .addr = ST_SENSORS_DEFAULT_AXIS_ADDR,
870 + .mask = ST_SENSORS_DEFAULT_AXIS_MASK,
871 + },
872 + .fs = {
873 + .addr = 0x23,
874 + .mask = GENMASK(5, 4),
875 + .fs_avl = {
876 + [0] = {
877 + .num = ST_GYRO_FS_AVL_245DPS,
878 + .value = 0x00,
879 + .gain = IIO_DEGREE_TO_RAD(8750),
880 + },
881 + [1] = {
882 + .num = ST_GYRO_FS_AVL_500DPS,
883 + .value = 0x01,
884 + .gain = IIO_DEGREE_TO_RAD(17500),
885 + },
886 + [2] = {
887 + .num = ST_GYRO_FS_AVL_2000DPS,
888 + .value = 0x02,
889 + .gain = IIO_DEGREE_TO_RAD(70000),
890 + },
891 + },
892 + },
893 + .bdu = {
894 + .addr = 0x23,
895 + .mask = BIT(7),
896 + },
897 + .drdy_irq = {
898 + .int2 = {
899 + .addr = 0x22,
900 + .mask = BIT(3),
901 + },
902 + /*
903 + * The sensor has IHL (active low) and open
904 + * drain settings, but only for INT1 and not
905 + * for the DRDY line on INT2.
906 + */
907 + .stat_drdy = {
908 + .addr = ST_SENSORS_DEFAULT_STAT_ADDR,
909 + .mask = GENMASK(2, 0),
910 + },
911 + },
912 + .sim = {
913 + .addr = 0x23,
914 + .value = BIT(0),
915 + },
916 + .multi_read_bit = true,
917 + .bootime = 2,
918 + },
919 {
920 .wai = 0xd7,
921 .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
922 diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
923 index dd555078258c..454695b372c8 100644
924 --- a/drivers/iommu/amd_iommu.c
925 +++ b/drivers/iommu/amd_iommu.c
926 @@ -226,71 +226,61 @@ static struct iommu_dev_data *search_dev_data(u16 devid)
927 return NULL;
928 }
929
930 -static int __last_alias(struct pci_dev *pdev, u16 alias, void *data)
931 +static int clone_alias(struct pci_dev *pdev, u16 alias, void *data)
932 {
933 - *(u16 *)data = alias;
934 - return 0;
935 -}
936 -
937 -static u16 get_alias(struct device *dev)
938 -{
939 - struct pci_dev *pdev = to_pci_dev(dev);
940 - u16 devid, ivrs_alias, pci_alias;
941 -
942 - /* The callers make sure that get_device_id() does not fail here */
943 - devid = get_device_id(dev);
944 + u16 devid = pci_dev_id(pdev);
945
946 - /* For ACPI HID devices, we simply return the devid as such */
947 - if (!dev_is_pci(dev))
948 - return devid;
949 + if (devid == alias)
950 + return 0;
951
952 - ivrs_alias = amd_iommu_alias_table[devid];
953 + amd_iommu_rlookup_table[alias] =
954 + amd_iommu_rlookup_table[devid];
955 + memcpy(amd_iommu_dev_table[alias].data,
956 + amd_iommu_dev_table[devid].data,
957 + sizeof(amd_iommu_dev_table[alias].data));
958
959 - pci_for_each_dma_alias(pdev, __last_alias, &pci_alias);
960 + return 0;
961 +}
962
963 - if (ivrs_alias == pci_alias)
964 - return ivrs_alias;
965 +static void clone_aliases(struct pci_dev *pdev)
966 +{
967 + if (!pdev)
968 + return;
969
970 /*
971 - * DMA alias showdown
972 - *
973 - * The IVRS is fairly reliable in telling us about aliases, but it
974 - * can't know about every screwy device. If we don't have an IVRS
975 - * reported alias, use the PCI reported alias. In that case we may
976 - * still need to initialize the rlookup and dev_table entries if the
977 - * alias is to a non-existent device.
978 + * The IVRS alias stored in the alias table may not be
979 + * part of the PCI DMA aliases if it's bus differs
980 + * from the original device.
981 */
982 - if (ivrs_alias == devid) {
983 - if (!amd_iommu_rlookup_table[pci_alias]) {
984 - amd_iommu_rlookup_table[pci_alias] =
985 - amd_iommu_rlookup_table[devid];
986 - memcpy(amd_iommu_dev_table[pci_alias].data,
987 - amd_iommu_dev_table[devid].data,
988 - sizeof(amd_iommu_dev_table[pci_alias].data));
989 - }
990 + clone_alias(pdev, amd_iommu_alias_table[pci_dev_id(pdev)], NULL);
991
992 - return pci_alias;
993 - }
994 + pci_for_each_dma_alias(pdev, clone_alias, NULL);
995 +}
996
997 - pci_info(pdev, "Using IVRS reported alias %02x:%02x.%d "
998 - "for device [%04x:%04x], kernel reported alias "
999 - "%02x:%02x.%d\n", PCI_BUS_NUM(ivrs_alias), PCI_SLOT(ivrs_alias),
1000 - PCI_FUNC(ivrs_alias), pdev->vendor, pdev->device,
1001 - PCI_BUS_NUM(pci_alias), PCI_SLOT(pci_alias),
1002 - PCI_FUNC(pci_alias));
1003 +static struct pci_dev *setup_aliases(struct device *dev)
1004 +{
1005 + struct pci_dev *pdev = to_pci_dev(dev);
1006 + u16 ivrs_alias;
1007 +
1008 + /* For ACPI HID devices, there are no aliases */
1009 + if (!dev_is_pci(dev))
1010 + return NULL;
1011
1012 /*
1013 - * If we don't have a PCI DMA alias and the IVRS alias is on the same
1014 - * bus, then the IVRS table may know about a quirk that we don't.
1015 + * Add the IVRS alias to the pci aliases if it is on the same
1016 + * bus. The IVRS table may know about a quirk that we don't.
1017 */
1018 - if (pci_alias == devid &&
1019 + ivrs_alias = amd_iommu_alias_table[pci_dev_id(pdev)];
1020 + if (ivrs_alias != pci_dev_id(pdev) &&
1021 PCI_BUS_NUM(ivrs_alias) == pdev->bus->number) {
1022 pci_add_dma_alias(pdev, ivrs_alias & 0xff);
1023 pci_info(pdev, "Added PCI DMA alias %02x.%d\n",
1024 PCI_SLOT(ivrs_alias), PCI_FUNC(ivrs_alias));
1025 }
1026
1027 - return ivrs_alias;
1028 + clone_aliases(pdev);
1029 +
1030 + return pdev;
1031 }
1032
1033 static struct iommu_dev_data *find_dev_data(u16 devid)
1034 @@ -428,7 +418,7 @@ static int iommu_init_device(struct device *dev)
1035 if (!dev_data)
1036 return -ENOMEM;
1037
1038 - dev_data->alias = get_alias(dev);
1039 + dev_data->pdev = setup_aliases(dev);
1040
1041 /*
1042 * By default we use passthrough mode for IOMMUv2 capable device.
1043 @@ -453,20 +443,16 @@ static int iommu_init_device(struct device *dev)
1044
1045 static void iommu_ignore_device(struct device *dev)
1046 {
1047 - u16 alias;
1048 int devid;
1049
1050 devid = get_device_id(dev);
1051 if (devid < 0)
1052 return;
1053
1054 - alias = get_alias(dev);
1055 -
1056 + amd_iommu_rlookup_table[devid] = NULL;
1057 memset(&amd_iommu_dev_table[devid], 0, sizeof(struct dev_table_entry));
1058 - memset(&amd_iommu_dev_table[alias], 0, sizeof(struct dev_table_entry));
1059
1060 - amd_iommu_rlookup_table[devid] = NULL;
1061 - amd_iommu_rlookup_table[alias] = NULL;
1062 + setup_aliases(dev);
1063 }
1064
1065 static void iommu_uninit_device(struct device *dev)
1066 @@ -1236,6 +1222,13 @@ static int device_flush_iotlb(struct iommu_dev_data *dev_data,
1067 return iommu_queue_command(iommu, &cmd);
1068 }
1069
1070 +static int device_flush_dte_alias(struct pci_dev *pdev, u16 alias, void *data)
1071 +{
1072 + struct amd_iommu *iommu = data;
1073 +
1074 + return iommu_flush_dte(iommu, alias);
1075 +}
1076 +
1077 /*
1078 * Command send function for invalidating a device table entry
1079 */
1080 @@ -1246,14 +1239,22 @@ static int device_flush_dte(struct iommu_dev_data *dev_data)
1081 int ret;
1082
1083 iommu = amd_iommu_rlookup_table[dev_data->devid];
1084 - alias = dev_data->alias;
1085
1086 - ret = iommu_flush_dte(iommu, dev_data->devid);
1087 - if (!ret && alias != dev_data->devid)
1088 - ret = iommu_flush_dte(iommu, alias);
1089 + if (dev_data->pdev)
1090 + ret = pci_for_each_dma_alias(dev_data->pdev,
1091 + device_flush_dte_alias, iommu);
1092 + else
1093 + ret = iommu_flush_dte(iommu, dev_data->devid);
1094 if (ret)
1095 return ret;
1096
1097 + alias = amd_iommu_alias_table[dev_data->devid];
1098 + if (alias != dev_data->devid) {
1099 + ret = iommu_flush_dte(iommu, alias);
1100 + if (ret)
1101 + return ret;
1102 + }
1103 +
1104 if (dev_data->ats.enabled)
1105 ret = device_flush_iotlb(dev_data, 0, ~0UL);
1106
1107 @@ -2035,11 +2036,9 @@ static void do_attach(struct iommu_dev_data *dev_data,
1108 struct protection_domain *domain)
1109 {
1110 struct amd_iommu *iommu;
1111 - u16 alias;
1112 bool ats;
1113
1114 iommu = amd_iommu_rlookup_table[dev_data->devid];
1115 - alias = dev_data->alias;
1116 ats = dev_data->ats.enabled;
1117
1118 /* Update data structures */
1119 @@ -2052,8 +2051,7 @@ static void do_attach(struct iommu_dev_data *dev_data,
1120
1121 /* Update device table */
1122 set_dte_entry(dev_data->devid, domain, ats, dev_data->iommu_v2);
1123 - if (alias != dev_data->devid)
1124 - set_dte_entry(alias, domain, ats, dev_data->iommu_v2);
1125 + clone_aliases(dev_data->pdev);
1126
1127 device_flush_dte(dev_data);
1128 }
1129 @@ -2062,17 +2060,14 @@ static void do_detach(struct iommu_dev_data *dev_data)
1130 {
1131 struct protection_domain *domain = dev_data->domain;
1132 struct amd_iommu *iommu;
1133 - u16 alias;
1134
1135 iommu = amd_iommu_rlookup_table[dev_data->devid];
1136 - alias = dev_data->alias;
1137
1138 /* Update data structures */
1139 dev_data->domain = NULL;
1140 list_del(&dev_data->list);
1141 clear_dte_entry(dev_data->devid);
1142 - if (alias != dev_data->devid)
1143 - clear_dte_entry(alias);
1144 + clone_aliases(dev_data->pdev);
1145
1146 /* Flush the DTE entry */
1147 device_flush_dte(dev_data);
1148 @@ -2384,13 +2379,7 @@ static void update_device_table(struct protection_domain *domain)
1149 list_for_each_entry(dev_data, &domain->dev_list, list) {
1150 set_dte_entry(dev_data->devid, domain, dev_data->ats.enabled,
1151 dev_data->iommu_v2);
1152 -
1153 - if (dev_data->devid == dev_data->alias)
1154 - continue;
1155 -
1156 - /* There is an alias, update device table entry for it */
1157 - set_dte_entry(dev_data->alias, domain, dev_data->ats.enabled,
1158 - dev_data->iommu_v2);
1159 + clone_aliases(dev_data->pdev);
1160 }
1161 }
1162
1163 @@ -3752,7 +3741,20 @@ static void set_remap_table_entry(struct amd_iommu *iommu, u16 devid,
1164 iommu_flush_dte(iommu, devid);
1165 }
1166
1167 -static struct irq_remap_table *alloc_irq_table(u16 devid)
1168 +static int set_remap_table_entry_alias(struct pci_dev *pdev, u16 alias,
1169 + void *data)
1170 +{
1171 + struct irq_remap_table *table = data;
1172 +
1173 + irq_lookup_table[alias] = table;
1174 + set_dte_irq_entry(alias, table);
1175 +
1176 + iommu_flush_dte(amd_iommu_rlookup_table[alias], alias);
1177 +
1178 + return 0;
1179 +}
1180 +
1181 +static struct irq_remap_table *alloc_irq_table(u16 devid, struct pci_dev *pdev)
1182 {
1183 struct irq_remap_table *table = NULL;
1184 struct irq_remap_table *new_table = NULL;
1185 @@ -3798,7 +3800,12 @@ static struct irq_remap_table *alloc_irq_table(u16 devid)
1186 table = new_table;
1187 new_table = NULL;
1188
1189 - set_remap_table_entry(iommu, devid, table);
1190 + if (pdev)
1191 + pci_for_each_dma_alias(pdev, set_remap_table_entry_alias,
1192 + table);
1193 + else
1194 + set_remap_table_entry(iommu, devid, table);
1195 +
1196 if (devid != alias)
1197 set_remap_table_entry(iommu, alias, table);
1198
1199 @@ -3815,7 +3822,8 @@ out_unlock:
1200 return table;
1201 }
1202
1203 -static int alloc_irq_index(u16 devid, int count, bool align)
1204 +static int alloc_irq_index(u16 devid, int count, bool align,
1205 + struct pci_dev *pdev)
1206 {
1207 struct irq_remap_table *table;
1208 int index, c, alignment = 1;
1209 @@ -3825,7 +3833,7 @@ static int alloc_irq_index(u16 devid, int count, bool align)
1210 if (!iommu)
1211 return -ENODEV;
1212
1213 - table = alloc_irq_table(devid);
1214 + table = alloc_irq_table(devid, pdev);
1215 if (!table)
1216 return -ENODEV;
1217
1218 @@ -4258,7 +4266,7 @@ static int irq_remapping_alloc(struct irq_domain *domain, unsigned int virq,
1219 struct irq_remap_table *table;
1220 struct amd_iommu *iommu;
1221
1222 - table = alloc_irq_table(devid);
1223 + table = alloc_irq_table(devid, NULL);
1224 if (table) {
1225 if (!table->min_index) {
1226 /*
1227 @@ -4275,11 +4283,15 @@ static int irq_remapping_alloc(struct irq_domain *domain, unsigned int virq,
1228 } else {
1229 index = -ENOMEM;
1230 }
1231 - } else {
1232 + } else if (info->type == X86_IRQ_ALLOC_TYPE_MSI ||
1233 + info->type == X86_IRQ_ALLOC_TYPE_MSIX) {
1234 bool align = (info->type == X86_IRQ_ALLOC_TYPE_MSI);
1235
1236 - index = alloc_irq_index(devid, nr_irqs, align);
1237 + index = alloc_irq_index(devid, nr_irqs, align, info->msi_dev);
1238 + } else {
1239 + index = alloc_irq_index(devid, nr_irqs, false, NULL);
1240 }
1241 +
1242 if (index < 0) {
1243 pr_warn("Failed to allocate IRTE\n");
1244 ret = index;
1245 diff --git a/drivers/iommu/amd_iommu_types.h b/drivers/iommu/amd_iommu_types.h
1246 index 17bd5a349119..fc956479b94e 100644
1247 --- a/drivers/iommu/amd_iommu_types.h
1248 +++ b/drivers/iommu/amd_iommu_types.h
1249 @@ -639,8 +639,8 @@ struct iommu_dev_data {
1250 struct list_head list; /* For domain->dev_list */
1251 struct llist_node dev_data_list; /* For global dev_data_list */
1252 struct protection_domain *domain; /* Domain the device is bound to */
1253 + struct pci_dev *pdev;
1254 u16 devid; /* PCI Device ID */
1255 - u16 alias; /* Alias Device ID */
1256 bool iommu_v2; /* Device can make use of IOMMUv2 */
1257 bool passthrough; /* Device is identity mapped */
1258 struct {
1259 diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
1260 index 51456e7f264f..c68a1f072c31 100644
1261 --- a/drivers/iommu/dma-iommu.c
1262 +++ b/drivers/iommu/dma-iommu.c
1263 @@ -1177,7 +1177,6 @@ int iommu_dma_prepare_msi(struct msi_desc *desc, phys_addr_t msi_addr)
1264 {
1265 struct device *dev = msi_desc_to_dev(desc);
1266 struct iommu_domain *domain = iommu_get_domain_for_dev(dev);
1267 - struct iommu_dma_cookie *cookie;
1268 struct iommu_dma_msi_page *msi_page;
1269 static DEFINE_MUTEX(msi_prepare_lock); /* see below */
1270
1271 @@ -1186,8 +1185,6 @@ int iommu_dma_prepare_msi(struct msi_desc *desc, phys_addr_t msi_addr)
1272 return 0;
1273 }
1274
1275 - cookie = domain->iova_cookie;
1276 -
1277 /*
1278 * In fact the whole prepare operation should already be serialised by
1279 * irq_domain_mutex further up the callchain, but that's pretty subtle
1280 diff --git a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2/dvbsky.c
1281 index 617a306f6815..dc380c0c9536 100644
1282 --- a/drivers/media/usb/dvb-usb-v2/dvbsky.c
1283 +++ b/drivers/media/usb/dvb-usb-v2/dvbsky.c
1284 @@ -792,6 +792,9 @@ static const struct usb_device_id dvbsky_id_table[] = {
1285 { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C,
1286 &mygica_t230c_props, "MyGica Mini DVB-T2 USB Stick T230C",
1287 RC_MAP_TOTAL_MEDIA_IN_HAND_02) },
1288 + { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C_LITE,
1289 + &mygica_t230c_props, "MyGica Mini DVB-T2 USB Stick T230C Lite",
1290 + NULL) },
1291 { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C2,
1292 &mygica_t230c_props, "MyGica Mini DVB-T2 USB Stick T230C v2",
1293 RC_MAP_TOTAL_MEDIA_IN_HAND_02) },
1294 diff --git a/drivers/mfd/intel-lpss-pci.c b/drivers/mfd/intel-lpss-pci.c
1295 index 1767f30a1676..b33030e3385c 100644
1296 --- a/drivers/mfd/intel-lpss-pci.c
1297 +++ b/drivers/mfd/intel-lpss-pci.c
1298 @@ -140,7 +140,7 @@ static const struct intel_lpss_platform_info cnl_i2c_info = {
1299 };
1300
1301 static const struct pci_device_id intel_lpss_pci_ids[] = {
1302 - /* CML */
1303 + /* CML-LP */
1304 { PCI_VDEVICE(INTEL, 0x02a8), (kernel_ulong_t)&spt_uart_info },
1305 { PCI_VDEVICE(INTEL, 0x02a9), (kernel_ulong_t)&spt_uart_info },
1306 { PCI_VDEVICE(INTEL, 0x02aa), (kernel_ulong_t)&spt_info },
1307 @@ -153,6 +153,17 @@ static const struct pci_device_id intel_lpss_pci_ids[] = {
1308 { PCI_VDEVICE(INTEL, 0x02ea), (kernel_ulong_t)&cnl_i2c_info },
1309 { PCI_VDEVICE(INTEL, 0x02eb), (kernel_ulong_t)&cnl_i2c_info },
1310 { PCI_VDEVICE(INTEL, 0x02fb), (kernel_ulong_t)&spt_info },
1311 + /* CML-H */
1312 + { PCI_VDEVICE(INTEL, 0x06a8), (kernel_ulong_t)&spt_uart_info },
1313 + { PCI_VDEVICE(INTEL, 0x06a9), (kernel_ulong_t)&spt_uart_info },
1314 + { PCI_VDEVICE(INTEL, 0x06aa), (kernel_ulong_t)&spt_info },
1315 + { PCI_VDEVICE(INTEL, 0x06ab), (kernel_ulong_t)&spt_info },
1316 + { PCI_VDEVICE(INTEL, 0x06c7), (kernel_ulong_t)&spt_uart_info },
1317 + { PCI_VDEVICE(INTEL, 0x06e8), (kernel_ulong_t)&cnl_i2c_info },
1318 + { PCI_VDEVICE(INTEL, 0x06e9), (kernel_ulong_t)&cnl_i2c_info },
1319 + { PCI_VDEVICE(INTEL, 0x06ea), (kernel_ulong_t)&cnl_i2c_info },
1320 + { PCI_VDEVICE(INTEL, 0x06eb), (kernel_ulong_t)&cnl_i2c_info },
1321 + { PCI_VDEVICE(INTEL, 0x06fb), (kernel_ulong_t)&spt_info },
1322 /* BXT A-Step */
1323 { PCI_VDEVICE(INTEL, 0x0aac), (kernel_ulong_t)&bxt_i2c_info },
1324 { PCI_VDEVICE(INTEL, 0x0aae), (kernel_ulong_t)&bxt_i2c_info },
1325 diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c b/drivers/misc/mei/hdcp/mei_hdcp.c
1326 index c681f6fab342..a9793ea6933b 100644
1327 --- a/drivers/misc/mei/hdcp/mei_hdcp.c
1328 +++ b/drivers/misc/mei/hdcp/mei_hdcp.c
1329 @@ -758,11 +758,38 @@ static const struct component_master_ops mei_component_master_ops = {
1330 .unbind = mei_component_master_unbind,
1331 };
1332
1333 +/**
1334 + * mei_hdcp_component_match - compare function for matching mei hdcp.
1335 + *
1336 + * The function checks if the driver is i915, the subcomponent is HDCP
1337 + * and the grand parent of hdcp and the parent of i915 are the same
1338 + * PCH device.
1339 + *
1340 + * @dev: master device
1341 + * @subcomponent: subcomponent to match (I915_COMPONENT_HDCP)
1342 + * @data: compare data (mei hdcp device)
1343 + *
1344 + * Return:
1345 + * * 1 - if components match
1346 + * * 0 - otherwise
1347 + */
1348 static int mei_hdcp_component_match(struct device *dev, int subcomponent,
1349 void *data)
1350 {
1351 - return !strcmp(dev->driver->name, "i915") &&
1352 - subcomponent == I915_COMPONENT_HDCP;
1353 + struct device *base = data;
1354 +
1355 + if (strcmp(dev->driver->name, "i915") ||
1356 + subcomponent != I915_COMPONENT_HDCP)
1357 + return 0;
1358 +
1359 + base = base->parent;
1360 + if (!base)
1361 + return 0;
1362 +
1363 + base = base->parent;
1364 + dev = dev->parent;
1365 +
1366 + return (base && dev && dev == base);
1367 }
1368
1369 static int mei_hdcp_probe(struct mei_cl_device *cldev,
1370 @@ -786,7 +813,7 @@ static int mei_hdcp_probe(struct mei_cl_device *cldev,
1371
1372 master_match = NULL;
1373 component_match_add_typed(&cldev->dev, &master_match,
1374 - mei_hdcp_component_match, comp_master);
1375 + mei_hdcp_component_match, &cldev->dev);
1376 if (IS_ERR_OR_NULL(master_match)) {
1377 ret = -ENOMEM;
1378 goto err_exit;
1379 diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h
1380 index b359f06f05e7..69d9b1736bf9 100644
1381 --- a/drivers/misc/mei/hw-me-regs.h
1382 +++ b/drivers/misc/mei/hw-me-regs.h
1383 @@ -81,8 +81,12 @@
1384
1385 #define MEI_DEV_ID_CMP_LP 0x02e0 /* Comet Point LP */
1386 #define MEI_DEV_ID_CMP_LP_3 0x02e4 /* Comet Point LP 3 (iTouch) */
1387 +
1388 #define MEI_DEV_ID_CMP_V 0xA3BA /* Comet Point Lake V */
1389
1390 +#define MEI_DEV_ID_CMP_H 0x06e0 /* Comet Lake H */
1391 +#define MEI_DEV_ID_CMP_H_3 0x06e4 /* Comet Lake H 3 (iTouch) */
1392 +
1393 #define MEI_DEV_ID_ICP_LP 0x34E0 /* Ice Lake Point LP */
1394
1395 #define MEI_DEV_ID_TGP_LP 0xA0E0 /* Tiger Lake Point LP */
1396 diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c
1397 index ce43415a536c..309cb8a23381 100644
1398 --- a/drivers/misc/mei/pci-me.c
1399 +++ b/drivers/misc/mei/pci-me.c
1400 @@ -99,6 +99,8 @@ static const struct pci_device_id mei_me_pci_tbl[] = {
1401 {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_LP, MEI_ME_PCH12_CFG)},
1402 {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_LP_3, MEI_ME_PCH8_CFG)},
1403 {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_V, MEI_ME_PCH12_CFG)},
1404 + {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_H, MEI_ME_PCH12_CFG)},
1405 + {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_H_3, MEI_ME_PCH8_CFG)},
1406
1407 {MEI_PCI_DEVICE(MEI_DEV_ID_ICP_LP, MEI_ME_PCH12_CFG)},
1408
1409 diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c
1410 index 642a9667db4d..c9ea365c248c 100644
1411 --- a/drivers/mmc/host/sdhci-pci-core.c
1412 +++ b/drivers/mmc/host/sdhci-pci-core.c
1413 @@ -21,6 +21,7 @@
1414 #include <linux/mmc/mmc.h>
1415 #include <linux/scatterlist.h>
1416 #include <linux/io.h>
1417 +#include <linux/iopoll.h>
1418 #include <linux/gpio.h>
1419 #include <linux/pm_runtime.h>
1420 #include <linux/mmc/slot-gpio.h>
1421 @@ -1598,11 +1599,59 @@ static int amd_probe(struct sdhci_pci_chip *chip)
1422 return 0;
1423 }
1424
1425 +static u32 sdhci_read_present_state(struct sdhci_host *host)
1426 +{
1427 + return sdhci_readl(host, SDHCI_PRESENT_STATE);
1428 +}
1429 +
1430 +void amd_sdhci_reset(struct sdhci_host *host, u8 mask)
1431 +{
1432 + struct sdhci_pci_slot *slot = sdhci_priv(host);
1433 + struct pci_dev *pdev = slot->chip->pdev;
1434 + u32 present_state;
1435 +
1436 + /*
1437 + * SDHC 0x7906 requires a hard reset to clear all internal state.
1438 + * Otherwise it can get into a bad state where the DATA lines are always
1439 + * read as zeros.
1440 + */
1441 + if (pdev->device == 0x7906 && (mask & SDHCI_RESET_ALL)) {
1442 + pci_clear_master(pdev);
1443 +
1444 + pci_save_state(pdev);
1445 +
1446 + pci_set_power_state(pdev, PCI_D3cold);
1447 + pr_debug("%s: power_state=%u\n", mmc_hostname(host->mmc),
1448 + pdev->current_state);
1449 + pci_set_power_state(pdev, PCI_D0);
1450 +
1451 + pci_restore_state(pdev);
1452 +
1453 + /*
1454 + * SDHCI_RESET_ALL says the card detect logic should not be
1455 + * reset, but since we need to reset the entire controller
1456 + * we should wait until the card detect logic has stabilized.
1457 + *
1458 + * This normally takes about 40ms.
1459 + */
1460 + readx_poll_timeout(
1461 + sdhci_read_present_state,
1462 + host,
1463 + present_state,
1464 + present_state & SDHCI_CD_STABLE,
1465 + 10000,
1466 + 100000
1467 + );
1468 + }
1469 +
1470 + return sdhci_reset(host, mask);
1471 +}
1472 +
1473 static const struct sdhci_ops amd_sdhci_pci_ops = {
1474 .set_clock = sdhci_set_clock,
1475 .enable_dma = sdhci_pci_enable_dma,
1476 .set_bus_width = sdhci_set_bus_width,
1477 - .reset = sdhci_reset,
1478 + .reset = amd_sdhci_reset,
1479 .set_uhs_signaling = sdhci_set_uhs_signaling,
1480 };
1481
1482 @@ -1681,6 +1730,8 @@ static const struct pci_device_id pci_ids[] = {
1483 SDHCI_PCI_DEVICE(INTEL, CML_EMMC, intel_glk_emmc),
1484 SDHCI_PCI_DEVICE(INTEL, CML_SD, intel_byt_sd),
1485 SDHCI_PCI_DEVICE(INTEL, CMLH_SD, intel_byt_sd),
1486 + SDHCI_PCI_DEVICE(INTEL, JSL_EMMC, intel_glk_emmc),
1487 + SDHCI_PCI_DEVICE(INTEL, JSL_SD, intel_byt_sd),
1488 SDHCI_PCI_DEVICE(O2, 8120, o2),
1489 SDHCI_PCI_DEVICE(O2, 8220, o2),
1490 SDHCI_PCI_DEVICE(O2, 8221, o2),
1491 diff --git a/drivers/mmc/host/sdhci-pci.h b/drivers/mmc/host/sdhci-pci.h
1492 index 558202fe64c6..981bbbe63aff 100644
1493 --- a/drivers/mmc/host/sdhci-pci.h
1494 +++ b/drivers/mmc/host/sdhci-pci.h
1495 @@ -55,6 +55,8 @@
1496 #define PCI_DEVICE_ID_INTEL_CML_EMMC 0x02c4
1497 #define PCI_DEVICE_ID_INTEL_CML_SD 0x02f5
1498 #define PCI_DEVICE_ID_INTEL_CMLH_SD 0x06f5
1499 +#define PCI_DEVICE_ID_INTEL_JSL_EMMC 0x4dc4
1500 +#define PCI_DEVICE_ID_INTEL_JSL_SD 0x4df8
1501
1502 #define PCI_DEVICE_ID_SYSKONNECT_8000 0x8000
1503 #define PCI_DEVICE_ID_VIA_95D0 0x95d0
1504 diff --git a/drivers/net/can/m_can/tcan4x5x.c b/drivers/net/can/m_can/tcan4x5x.c
1505 index d797912e665a..b233756345f8 100644
1506 --- a/drivers/net/can/m_can/tcan4x5x.c
1507 +++ b/drivers/net/can/m_can/tcan4x5x.c
1508 @@ -164,6 +164,28 @@ static void tcan4x5x_check_wake(struct tcan4x5x_priv *priv)
1509 }
1510 }
1511
1512 +static int tcan4x5x_reset(struct tcan4x5x_priv *priv)
1513 +{
1514 + int ret = 0;
1515 +
1516 + if (priv->reset_gpio) {
1517 + gpiod_set_value(priv->reset_gpio, 1);
1518 +
1519 + /* tpulse_width minimum 30us */
1520 + usleep_range(30, 100);
1521 + gpiod_set_value(priv->reset_gpio, 0);
1522 + } else {
1523 + ret = regmap_write(priv->regmap, TCAN4X5X_CONFIG,
1524 + TCAN4X5X_SW_RESET);
1525 + if (ret)
1526 + return ret;
1527 + }
1528 +
1529 + usleep_range(700, 1000);
1530 +
1531 + return ret;
1532 +}
1533 +
1534 static int regmap_spi_gather_write(void *context, const void *reg,
1535 size_t reg_len, const void *val,
1536 size_t val_len)
1537 @@ -341,6 +363,7 @@ static int tcan4x5x_init(struct m_can_classdev *cdev)
1538 static int tcan4x5x_parse_config(struct m_can_classdev *cdev)
1539 {
1540 struct tcan4x5x_priv *tcan4x5x = cdev->device_data;
1541 + int ret;
1542
1543 tcan4x5x->device_wake_gpio = devm_gpiod_get(cdev->dev, "device-wake",
1544 GPIOD_OUT_HIGH);
1545 @@ -354,7 +377,9 @@ static int tcan4x5x_parse_config(struct m_can_classdev *cdev)
1546 if (IS_ERR(tcan4x5x->reset_gpio))
1547 tcan4x5x->reset_gpio = NULL;
1548
1549 - usleep_range(700, 1000);
1550 + ret = tcan4x5x_reset(tcan4x5x);
1551 + if (ret)
1552 + return ret;
1553
1554 tcan4x5x->device_state_gpio = devm_gpiod_get_optional(cdev->dev,
1555 "device-state",
1556 diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c
1557 index 97ab0dd25552..1a7710c399d7 100644
1558 --- a/drivers/net/ethernet/broadcom/b44.c
1559 +++ b/drivers/net/ethernet/broadcom/b44.c
1560 @@ -1519,8 +1519,10 @@ static int b44_magic_pattern(u8 *macaddr, u8 *ppattern, u8 *pmask, int offset)
1561 int ethaddr_bytes = ETH_ALEN;
1562
1563 memset(ppattern + offset, 0xff, magicsync);
1564 - for (j = 0; j < magicsync; j++)
1565 - set_bit(len++, (unsigned long *) pmask);
1566 + for (j = 0; j < magicsync; j++) {
1567 + pmask[len >> 3] |= BIT(len & 7);
1568 + len++;
1569 + }
1570
1571 for (j = 0; j < B44_MAX_PATTERNS; j++) {
1572 if ((B44_PATTERN_SIZE - len) >= ETH_ALEN)
1573 @@ -1532,7 +1534,8 @@ static int b44_magic_pattern(u8 *macaddr, u8 *ppattern, u8 *pmask, int offset)
1574 for (k = 0; k< ethaddr_bytes; k++) {
1575 ppattern[offset + magicsync +
1576 (j * ETH_ALEN) + k] = macaddr[k];
1577 - set_bit(len++, (unsigned long *) pmask);
1578 + pmask[len >> 3] |= BIT(len & 7);
1579 + len++;
1580 }
1581 }
1582 return len - 1;
1583 diff --git a/drivers/net/ethernet/google/gve/gve_rx.c b/drivers/net/ethernet/google/gve/gve_rx.c
1584 index edec61dfc868..9f52e72ff641 100644
1585 --- a/drivers/net/ethernet/google/gve/gve_rx.c
1586 +++ b/drivers/net/ethernet/google/gve/gve_rx.c
1587 @@ -418,8 +418,6 @@ bool gve_clean_rx_done(struct gve_rx_ring *rx, int budget,
1588 rx->cnt = cnt;
1589 rx->fill_cnt += work_done;
1590
1591 - /* restock desc ring slots */
1592 - dma_wmb(); /* Ensure descs are visible before ringing doorbell */
1593 gve_rx_write_doorbell(priv, rx);
1594 return gve_rx_work_pending(rx);
1595 }
1596 diff --git a/drivers/net/ethernet/google/gve/gve_tx.c b/drivers/net/ethernet/google/gve/gve_tx.c
1597 index f4889431f9b7..d0244feb0301 100644
1598 --- a/drivers/net/ethernet/google/gve/gve_tx.c
1599 +++ b/drivers/net/ethernet/google/gve/gve_tx.c
1600 @@ -487,10 +487,6 @@ netdev_tx_t gve_tx(struct sk_buff *skb, struct net_device *dev)
1601 * may have added descriptors without ringing the doorbell.
1602 */
1603
1604 - /* Ensure tx descs from a prior gve_tx are visible before
1605 - * ringing doorbell.
1606 - */
1607 - dma_wmb();
1608 gve_tx_put_doorbell(priv, tx->q_resources, tx->req);
1609 return NETDEV_TX_BUSY;
1610 }
1611 @@ -505,8 +501,6 @@ netdev_tx_t gve_tx(struct sk_buff *skb, struct net_device *dev)
1612 if (!netif_xmit_stopped(tx->netdev_txq) && netdev_xmit_more())
1613 return NETDEV_TX_OK;
1614
1615 - /* Ensure tx descs are visible before ringing doorbell */
1616 - dma_wmb();
1617 gve_tx_put_doorbell(priv, tx->q_resources, tx->req);
1618 return NETDEV_TX_OK;
1619 }
1620 diff --git a/drivers/net/ethernet/mellanox/mlxsw/minimal.c b/drivers/net/ethernet/mellanox/mlxsw/minimal.c
1621 index 471b0ca6d69a..55dfba990e6e 100644
1622 --- a/drivers/net/ethernet/mellanox/mlxsw/minimal.c
1623 +++ b/drivers/net/ethernet/mellanox/mlxsw/minimal.c
1624 @@ -204,8 +204,8 @@ mlxsw_m_port_create(struct mlxsw_m *mlxsw_m, u8 local_port, u8 module)
1625
1626 err_register_netdev:
1627 mlxsw_m->ports[local_port] = NULL;
1628 - free_netdev(dev);
1629 err_dev_addr_get:
1630 + free_netdev(dev);
1631 err_alloc_etherdev:
1632 mlxsw_core_port_fini(mlxsw_m->core, local_port);
1633 return err;
1634 diff --git a/drivers/net/ethernet/socionext/netsec.c b/drivers/net/ethernet/socionext/netsec.c
1635 index 41ddd8fff2a7..8bd2912bf713 100644
1636 --- a/drivers/net/ethernet/socionext/netsec.c
1637 +++ b/drivers/net/ethernet/socionext/netsec.c
1638 @@ -928,7 +928,6 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)
1639 struct netsec_rx_pkt_info rx_info;
1640 enum dma_data_direction dma_dir;
1641 struct bpf_prog *xdp_prog;
1642 - struct sk_buff *skb = NULL;
1643 u16 xdp_xmit = 0;
1644 u32 xdp_act = 0;
1645 int done = 0;
1646 @@ -942,7 +941,8 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget)
1647 struct netsec_de *de = dring->vaddr + (DESC_SZ * idx);
1648 struct netsec_desc *desc = &dring->desc[idx];
1649 struct page *page = virt_to_page(desc->addr);
1650 - u32 xdp_result = XDP_PASS;
1651 + u32 xdp_result = NETSEC_XDP_PASS;
1652 + struct sk_buff *skb = NULL;
1653 u16 pkt_len, desc_len;
1654 dma_addr_t dma_handle;
1655 struct xdp_buff xdp;
1656 diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1657 index 1b3520d0e59e..06dd65c419c4 100644
1658 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1659 +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
1660 @@ -105,6 +105,7 @@ MODULE_PARM_DESC(chain_mode, "To use chain instead of ring mode");
1661 static irqreturn_t stmmac_interrupt(int irq, void *dev_id);
1662
1663 #ifdef CONFIG_DEBUG_FS
1664 +static const struct net_device_ops stmmac_netdev_ops;
1665 static void stmmac_init_fs(struct net_device *dev);
1666 static void stmmac_exit_fs(struct net_device *dev);
1667 #endif
1668 @@ -4175,6 +4176,34 @@ static int stmmac_dma_cap_show(struct seq_file *seq, void *v)
1669 }
1670 DEFINE_SHOW_ATTRIBUTE(stmmac_dma_cap);
1671
1672 +/* Use network device events to rename debugfs file entries.
1673 + */
1674 +static int stmmac_device_event(struct notifier_block *unused,
1675 + unsigned long event, void *ptr)
1676 +{
1677 + struct net_device *dev = netdev_notifier_info_to_dev(ptr);
1678 + struct stmmac_priv *priv = netdev_priv(dev);
1679 +
1680 + if (dev->netdev_ops != &stmmac_netdev_ops)
1681 + goto done;
1682 +
1683 + switch (event) {
1684 + case NETDEV_CHANGENAME:
1685 + if (priv->dbgfs_dir)
1686 + priv->dbgfs_dir = debugfs_rename(stmmac_fs_dir,
1687 + priv->dbgfs_dir,
1688 + stmmac_fs_dir,
1689 + dev->name);
1690 + break;
1691 + }
1692 +done:
1693 + return NOTIFY_DONE;
1694 +}
1695 +
1696 +static struct notifier_block stmmac_notifier = {
1697 + .notifier_call = stmmac_device_event,
1698 +};
1699 +
1700 static void stmmac_init_fs(struct net_device *dev)
1701 {
1702 struct stmmac_priv *priv = netdev_priv(dev);
1703 @@ -4189,12 +4218,15 @@ static void stmmac_init_fs(struct net_device *dev)
1704 /* Entry to report the DMA HW features */
1705 debugfs_create_file("dma_cap", 0444, priv->dbgfs_dir, dev,
1706 &stmmac_dma_cap_fops);
1707 +
1708 + register_netdevice_notifier(&stmmac_notifier);
1709 }
1710
1711 static void stmmac_exit_fs(struct net_device *dev)
1712 {
1713 struct stmmac_priv *priv = netdev_priv(dev);
1714
1715 + unregister_netdevice_notifier(&stmmac_notifier);
1716 debugfs_remove_recursive(priv->dbgfs_dir);
1717 }
1718 #endif /* CONFIG_DEBUG_FS */
1719 diff --git a/drivers/net/wan/sdla.c b/drivers/net/wan/sdla.c
1720 index e2e679a01b65..77ccf3672ede 100644
1721 --- a/drivers/net/wan/sdla.c
1722 +++ b/drivers/net/wan/sdla.c
1723 @@ -708,7 +708,7 @@ static netdev_tx_t sdla_transmit(struct sk_buff *skb,
1724
1725 spin_lock_irqsave(&sdla_lock, flags);
1726 SDLA_WINDOW(dev, addr);
1727 - pbuf = (void *)(((int) dev->mem_start) + (addr & SDLA_ADDR_MASK));
1728 + pbuf = (void *)(dev->mem_start + (addr & SDLA_ADDR_MASK));
1729 __sdla_write(dev, pbuf->buf_addr, skb->data, skb->len);
1730 SDLA_WINDOW(dev, addr);
1731 pbuf->opp_flag = 1;
1732 diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
1733 index fb649d85b8fc..dd0c32379375 100644
1734 --- a/drivers/net/wireless/ath/ath9k/hif_usb.c
1735 +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
1736 @@ -1216,7 +1216,7 @@ err_fw:
1737 static int send_eject_command(struct usb_interface *interface)
1738 {
1739 struct usb_device *udev = interface_to_usbdev(interface);
1740 - struct usb_host_interface *iface_desc = &interface->altsetting[0];
1741 + struct usb_host_interface *iface_desc = interface->cur_altsetting;
1742 struct usb_endpoint_descriptor *endpoint;
1743 unsigned char *cmd;
1744 u8 bulk_out_ep;
1745 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
1746 index 06f3c01f10b3..7cdfde9b3dea 100644
1747 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
1748 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/usb.c
1749 @@ -1348,7 +1348,7 @@ brcmf_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
1750 goto fail;
1751 }
1752
1753 - desc = &intf->altsetting[0].desc;
1754 + desc = &intf->cur_altsetting->desc;
1755 if ((desc->bInterfaceClass != USB_CLASS_VENDOR_SPEC) ||
1756 (desc->bInterfaceSubClass != 2) ||
1757 (desc->bInterfaceProtocol != 0xff)) {
1758 @@ -1361,7 +1361,7 @@ brcmf_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
1759
1760 num_of_eps = desc->bNumEndpoints;
1761 for (ep = 0; ep < num_of_eps; ep++) {
1762 - endpoint = &intf->altsetting[0].endpoint[ep].desc;
1763 + endpoint = &intf->cur_altsetting->endpoint[ep].desc;
1764 endpoint_num = usb_endpoint_num(endpoint);
1765 if (!usb_endpoint_xfer_bulk(endpoint))
1766 continue;
1767 diff --git a/drivers/net/wireless/intersil/orinoco/orinoco_usb.c b/drivers/net/wireless/intersil/orinoco/orinoco_usb.c
1768 index 40a8b941ad5c..8c79b963bcff 100644
1769 --- a/drivers/net/wireless/intersil/orinoco/orinoco_usb.c
1770 +++ b/drivers/net/wireless/intersil/orinoco/orinoco_usb.c
1771 @@ -1608,9 +1608,9 @@ static int ezusb_probe(struct usb_interface *interface,
1772 /* set up the endpoint information */
1773 /* check out the endpoints */
1774
1775 - iface_desc = &interface->altsetting[0].desc;
1776 + iface_desc = &interface->cur_altsetting->desc;
1777 for (i = 0; i < iface_desc->bNumEndpoints; ++i) {
1778 - ep = &interface->altsetting[0].endpoint[i].desc;
1779 + ep = &interface->cur_altsetting->endpoint[i].desc;
1780
1781 if (usb_endpoint_is_bulk_in(ep)) {
1782 /* we found a bulk in endpoint */
1783 diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
1784 index e7d96ac673b7..3499b211dad5 100644
1785 --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
1786 +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
1787 @@ -5915,7 +5915,7 @@ static int rtl8xxxu_parse_usb(struct rtl8xxxu_priv *priv,
1788 u8 dir, xtype, num;
1789 int ret = 0;
1790
1791 - host_interface = &interface->altsetting[0];
1792 + host_interface = interface->cur_altsetting;
1793 interface_desc = &host_interface->desc;
1794 endpoints = interface_desc->bNumEndpoints;
1795
1796 diff --git a/drivers/net/wireless/rsi/rsi_91x_hal.c b/drivers/net/wireless/rsi/rsi_91x_hal.c
1797 index f84250bdb8cf..6f8d5f9a9f7e 100644
1798 --- a/drivers/net/wireless/rsi/rsi_91x_hal.c
1799 +++ b/drivers/net/wireless/rsi/rsi_91x_hal.c
1800 @@ -622,6 +622,7 @@ static int bl_cmd(struct rsi_hw *adapter, u8 cmd, u8 exp_resp, char *str)
1801 bl_start_cmd_timer(adapter, timeout);
1802 status = bl_write_cmd(adapter, cmd, exp_resp, &regout_val);
1803 if (status < 0) {
1804 + bl_stop_cmd_timer(adapter);
1805 rsi_dbg(ERR_ZONE,
1806 "%s: Command %s (%0x) writing failed..\n",
1807 __func__, str, cmd);
1808 @@ -737,10 +738,9 @@ static int ping_pong_write(struct rsi_hw *adapter, u8 cmd, u8 *addr, u32 size)
1809 }
1810
1811 status = bl_cmd(adapter, cmd_req, cmd_resp, str);
1812 - if (status) {
1813 - bl_stop_cmd_timer(adapter);
1814 + if (status)
1815 return status;
1816 - }
1817 +
1818 return 0;
1819 }
1820
1821 @@ -828,10 +828,9 @@ static int auto_fw_upgrade(struct rsi_hw *adapter, u8 *flash_content,
1822
1823 status = bl_cmd(adapter, EOF_REACHED, FW_LOADING_SUCCESSFUL,
1824 "EOF_REACHED");
1825 - if (status) {
1826 - bl_stop_cmd_timer(adapter);
1827 + if (status)
1828 return status;
1829 - }
1830 +
1831 rsi_dbg(INFO_ZONE, "FW loading is done and FW is running..\n");
1832 return 0;
1833 }
1834 @@ -849,6 +848,7 @@ static int rsi_hal_prepare_fwload(struct rsi_hw *adapter)
1835 &regout_val,
1836 RSI_COMMON_REG_SIZE);
1837 if (status < 0) {
1838 + bl_stop_cmd_timer(adapter);
1839 rsi_dbg(ERR_ZONE,
1840 "%s: REGOUT read failed\n", __func__);
1841 return status;
1842 diff --git a/drivers/net/wireless/rsi/rsi_91x_usb.c b/drivers/net/wireless/rsi/rsi_91x_usb.c
1843 index 23a1d00b5f38..d6cdabef264d 100644
1844 --- a/drivers/net/wireless/rsi/rsi_91x_usb.c
1845 +++ b/drivers/net/wireless/rsi/rsi_91x_usb.c
1846 @@ -16,6 +16,7 @@
1847 */
1848
1849 #include <linux/module.h>
1850 +#include <linux/types.h>
1851 #include <net/rsi_91x.h>
1852 #include "rsi_usb.h"
1853 #include "rsi_hal.h"
1854 @@ -29,7 +30,7 @@ MODULE_PARM_DESC(dev_oper_mode,
1855 "9[Wi-Fi STA + BT LE], 13[Wi-Fi STA + BT classic + BT LE]\n"
1856 "6[AP + BT classic], 14[AP + BT classic + BT LE]");
1857
1858 -static int rsi_rx_urb_submit(struct rsi_hw *adapter, u8 ep_num);
1859 +static int rsi_rx_urb_submit(struct rsi_hw *adapter, u8 ep_num, gfp_t flags);
1860
1861 /**
1862 * rsi_usb_card_write() - This function writes to the USB Card.
1863 @@ -117,7 +118,7 @@ static int rsi_find_bulk_in_and_out_endpoints(struct usb_interface *interface,
1864 __le16 buffer_size;
1865 int ii, bin_found = 0, bout_found = 0;
1866
1867 - iface_desc = &(interface->altsetting[0]);
1868 + iface_desc = interface->cur_altsetting;
1869
1870 for (ii = 0; ii < iface_desc->desc.bNumEndpoints; ++ii) {
1871 endpoint = &(iface_desc->endpoint[ii].desc);
1872 @@ -285,20 +286,29 @@ static void rsi_rx_done_handler(struct urb *urb)
1873 status = 0;
1874
1875 out:
1876 - if (rsi_rx_urb_submit(dev->priv, rx_cb->ep_num))
1877 + if (rsi_rx_urb_submit(dev->priv, rx_cb->ep_num, GFP_ATOMIC))
1878 rsi_dbg(ERR_ZONE, "%s: Failed in urb submission", __func__);
1879
1880 if (status)
1881 dev_kfree_skb(rx_cb->rx_skb);
1882 }
1883
1884 +static void rsi_rx_urb_kill(struct rsi_hw *adapter, u8 ep_num)
1885 +{
1886 + struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev;
1887 + struct rx_usb_ctrl_block *rx_cb = &dev->rx_cb[ep_num - 1];
1888 + struct urb *urb = rx_cb->rx_urb;
1889 +
1890 + usb_kill_urb(urb);
1891 +}
1892 +
1893 /**
1894 * rsi_rx_urb_submit() - This function submits the given URB to the USB stack.
1895 * @adapter: Pointer to the adapter structure.
1896 *
1897 * Return: 0 on success, a negative error code on failure.
1898 */
1899 -static int rsi_rx_urb_submit(struct rsi_hw *adapter, u8 ep_num)
1900 +static int rsi_rx_urb_submit(struct rsi_hw *adapter, u8 ep_num, gfp_t mem_flags)
1901 {
1902 struct rsi_91x_usbdev *dev = (struct rsi_91x_usbdev *)adapter->rsi_dev;
1903 struct rx_usb_ctrl_block *rx_cb = &dev->rx_cb[ep_num - 1];
1904 @@ -328,9 +338,11 @@ static int rsi_rx_urb_submit(struct rsi_hw *adapter, u8 ep_num)
1905 rsi_rx_done_handler,
1906 rx_cb);
1907
1908 - status = usb_submit_urb(urb, GFP_KERNEL);
1909 - if (status)
1910 + status = usb_submit_urb(urb, mem_flags);
1911 + if (status) {
1912 rsi_dbg(ERR_ZONE, "%s: Failed in urb submission\n", __func__);
1913 + dev_kfree_skb(skb);
1914 + }
1915
1916 return status;
1917 }
1918 @@ -816,17 +828,20 @@ static int rsi_probe(struct usb_interface *pfunction,
1919 rsi_dbg(INIT_ZONE, "%s: Device Init Done\n", __func__);
1920 }
1921
1922 - status = rsi_rx_urb_submit(adapter, WLAN_EP);
1923 + status = rsi_rx_urb_submit(adapter, WLAN_EP, GFP_KERNEL);
1924 if (status)
1925 goto err1;
1926
1927 if (adapter->priv->coex_mode > 1) {
1928 - status = rsi_rx_urb_submit(adapter, BT_EP);
1929 + status = rsi_rx_urb_submit(adapter, BT_EP, GFP_KERNEL);
1930 if (status)
1931 - goto err1;
1932 + goto err_kill_wlan_urb;
1933 }
1934
1935 return 0;
1936 +
1937 +err_kill_wlan_urb:
1938 + rsi_rx_urb_kill(adapter, WLAN_EP);
1939 err1:
1940 rsi_deinit_usb_interface(adapter);
1941 err:
1942 @@ -857,6 +872,10 @@ static void rsi_disconnect(struct usb_interface *pfunction)
1943 adapter->priv->bt_adapter = NULL;
1944 }
1945
1946 + if (adapter->priv->coex_mode > 1)
1947 + rsi_rx_urb_kill(adapter, BT_EP);
1948 + rsi_rx_urb_kill(adapter, WLAN_EP);
1949 +
1950 rsi_reset_card(adapter);
1951 rsi_deinit_usb_interface(adapter);
1952 rsi_91x_deinit(adapter);
1953 diff --git a/drivers/net/wireless/zydas/zd1211rw/zd_usb.c b/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
1954 index 7b5c2fe5bd4d..8ff0374126e4 100644
1955 --- a/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
1956 +++ b/drivers/net/wireless/zydas/zd1211rw/zd_usb.c
1957 @@ -1263,7 +1263,7 @@ static void print_id(struct usb_device *udev)
1958 static int eject_installer(struct usb_interface *intf)
1959 {
1960 struct usb_device *udev = interface_to_usbdev(intf);
1961 - struct usb_host_interface *iface_desc = &intf->altsetting[0];
1962 + struct usb_host_interface *iface_desc = intf->cur_altsetting;
1963 struct usb_endpoint_descriptor *endpoint;
1964 unsigned char *cmd;
1965 u8 bulk_out_ep;
1966 diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
1967 index 1593b8494ebb..2f88b1ff7ada 100644
1968 --- a/drivers/pci/quirks.c
1969 +++ b/drivers/pci/quirks.c
1970 @@ -4080,6 +4080,40 @@ static void quirk_mic_x200_dma_alias(struct pci_dev *pdev)
1971 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2260, quirk_mic_x200_dma_alias);
1972 DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2264, quirk_mic_x200_dma_alias);
1973
1974 +/*
1975 + * Intel Visual Compute Accelerator (VCA) is a family of PCIe add-in devices
1976 + * exposing computational units via Non Transparent Bridges (NTB, PEX 87xx).
1977 + *
1978 + * Similarly to MIC x200, we need to add DMA aliases to allow buffer access
1979 + * when IOMMU is enabled. These aliases allow computational unit access to
1980 + * host memory. These aliases mark the whole VCA device as one IOMMU
1981 + * group.
1982 + *
1983 + * All possible slot numbers (0x20) are used, since we are unable to tell
1984 + * what slot is used on other side. This quirk is intended for both host
1985 + * and computational unit sides. The VCA devices have up to five functions
1986 + * (four for DMA channels and one additional).
1987 + */
1988 +static void quirk_pex_vca_alias(struct pci_dev *pdev)
1989 +{
1990 + const unsigned int num_pci_slots = 0x20;
1991 + unsigned int slot;
1992 +
1993 + for (slot = 0; slot < num_pci_slots; slot++) {
1994 + pci_add_dma_alias(pdev, PCI_DEVFN(slot, 0x0));
1995 + pci_add_dma_alias(pdev, PCI_DEVFN(slot, 0x1));
1996 + pci_add_dma_alias(pdev, PCI_DEVFN(slot, 0x2));
1997 + pci_add_dma_alias(pdev, PCI_DEVFN(slot, 0x3));
1998 + pci_add_dma_alias(pdev, PCI_DEVFN(slot, 0x4));
1999 + }
2000 +}
2001 +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2954, quirk_pex_vca_alias);
2002 +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2955, quirk_pex_vca_alias);
2003 +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2956, quirk_pex_vca_alias);
2004 +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2958, quirk_pex_vca_alias);
2005 +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x2959, quirk_pex_vca_alias);
2006 +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x295A, quirk_pex_vca_alias);
2007 +
2008 /*
2009 * The IOMMU and interrupt controller on Broadcom Vulcan/Cavium ThunderX2 are
2010 * associated not at the root bus, but at a bridge below. This quirk avoids
2011 diff --git a/drivers/perf/fsl_imx8_ddr_perf.c b/drivers/perf/fsl_imx8_ddr_perf.c
2012 index ce7345745b42..2a3966d059e7 100644
2013 --- a/drivers/perf/fsl_imx8_ddr_perf.c
2014 +++ b/drivers/perf/fsl_imx8_ddr_perf.c
2015 @@ -45,7 +45,8 @@
2016 static DEFINE_IDA(ddr_ida);
2017
2018 /* DDR Perf hardware feature */
2019 -#define DDR_CAP_AXI_ID_FILTER 0x1 /* support AXI ID filter */
2020 +#define DDR_CAP_AXI_ID_FILTER 0x1 /* support AXI ID filter */
2021 +#define DDR_CAP_AXI_ID_FILTER_ENHANCED 0x3 /* support enhanced AXI ID filter */
2022
2023 struct fsl_ddr_devtype_data {
2024 unsigned int quirks; /* quirks needed for different DDR Perf core */
2025 @@ -178,6 +179,36 @@ static const struct attribute_group *attr_groups[] = {
2026 NULL,
2027 };
2028
2029 +static bool ddr_perf_is_filtered(struct perf_event *event)
2030 +{
2031 + return event->attr.config == 0x41 || event->attr.config == 0x42;
2032 +}
2033 +
2034 +static u32 ddr_perf_filter_val(struct perf_event *event)
2035 +{
2036 + return event->attr.config1;
2037 +}
2038 +
2039 +static bool ddr_perf_filters_compatible(struct perf_event *a,
2040 + struct perf_event *b)
2041 +{
2042 + if (!ddr_perf_is_filtered(a))
2043 + return true;
2044 + if (!ddr_perf_is_filtered(b))
2045 + return true;
2046 + return ddr_perf_filter_val(a) == ddr_perf_filter_val(b);
2047 +}
2048 +
2049 +static bool ddr_perf_is_enhanced_filtered(struct perf_event *event)
2050 +{
2051 + unsigned int filt;
2052 + struct ddr_pmu *pmu = to_ddr_pmu(event->pmu);
2053 +
2054 + filt = pmu->devtype_data->quirks & DDR_CAP_AXI_ID_FILTER_ENHANCED;
2055 + return (filt == DDR_CAP_AXI_ID_FILTER_ENHANCED) &&
2056 + ddr_perf_is_filtered(event);
2057 +}
2058 +
2059 static u32 ddr_perf_alloc_counter(struct ddr_pmu *pmu, int event)
2060 {
2061 int i;
2062 @@ -209,27 +240,17 @@ static void ddr_perf_free_counter(struct ddr_pmu *pmu, int counter)
2063
2064 static u32 ddr_perf_read_counter(struct ddr_pmu *pmu, int counter)
2065 {
2066 - return readl_relaxed(pmu->base + COUNTER_READ + counter * 4);
2067 -}
2068 -
2069 -static bool ddr_perf_is_filtered(struct perf_event *event)
2070 -{
2071 - return event->attr.config == 0x41 || event->attr.config == 0x42;
2072 -}
2073 + struct perf_event *event = pmu->events[counter];
2074 + void __iomem *base = pmu->base;
2075
2076 -static u32 ddr_perf_filter_val(struct perf_event *event)
2077 -{
2078 - return event->attr.config1;
2079 -}
2080 -
2081 -static bool ddr_perf_filters_compatible(struct perf_event *a,
2082 - struct perf_event *b)
2083 -{
2084 - if (!ddr_perf_is_filtered(a))
2085 - return true;
2086 - if (!ddr_perf_is_filtered(b))
2087 - return true;
2088 - return ddr_perf_filter_val(a) == ddr_perf_filter_val(b);
2089 + /*
2090 + * return bytes instead of bursts from ddr transaction for
2091 + * axid-read and axid-write event if PMU core supports enhanced
2092 + * filter.
2093 + */
2094 + base += ddr_perf_is_enhanced_filtered(event) ? COUNTER_DPCR1 :
2095 + COUNTER_READ;
2096 + return readl_relaxed(base + counter * 4);
2097 }
2098
2099 static int ddr_perf_event_init(struct perf_event *event)
2100 diff --git a/drivers/phy/motorola/phy-cpcap-usb.c b/drivers/phy/motorola/phy-cpcap-usb.c
2101 index 9a38741d3546..5baf64dfb24d 100644
2102 --- a/drivers/phy/motorola/phy-cpcap-usb.c
2103 +++ b/drivers/phy/motorola/phy-cpcap-usb.c
2104 @@ -115,7 +115,7 @@ struct cpcap_usb_ints_state {
2105 enum cpcap_gpio_mode {
2106 CPCAP_DM_DP,
2107 CPCAP_MDM_RX_TX,
2108 - CPCAP_UNKNOWN,
2109 + CPCAP_UNKNOWN_DISABLED, /* Seems to disable USB lines */
2110 CPCAP_OTG_DM_DP,
2111 };
2112
2113 @@ -381,7 +381,8 @@ static int cpcap_usb_set_uart_mode(struct cpcap_phy_ddata *ddata)
2114 {
2115 int error;
2116
2117 - error = cpcap_usb_gpio_set_mode(ddata, CPCAP_DM_DP);
2118 + /* Disable lines to prevent glitches from waking up mdm6600 */
2119 + error = cpcap_usb_gpio_set_mode(ddata, CPCAP_UNKNOWN_DISABLED);
2120 if (error)
2121 goto out_err;
2122
2123 @@ -408,6 +409,11 @@ static int cpcap_usb_set_uart_mode(struct cpcap_phy_ddata *ddata)
2124 if (error)
2125 goto out_err;
2126
2127 + /* Enable UART mode */
2128 + error = cpcap_usb_gpio_set_mode(ddata, CPCAP_DM_DP);
2129 + if (error)
2130 + goto out_err;
2131 +
2132 return 0;
2133
2134 out_err:
2135 @@ -420,7 +426,8 @@ static int cpcap_usb_set_usb_mode(struct cpcap_phy_ddata *ddata)
2136 {
2137 int error;
2138
2139 - error = cpcap_usb_gpio_set_mode(ddata, CPCAP_OTG_DM_DP);
2140 + /* Disable lines to prevent glitches from waking up mdm6600 */
2141 + error = cpcap_usb_gpio_set_mode(ddata, CPCAP_UNKNOWN_DISABLED);
2142 if (error)
2143 return error;
2144
2145 @@ -460,6 +467,11 @@ static int cpcap_usb_set_usb_mode(struct cpcap_phy_ddata *ddata)
2146 if (error)
2147 goto out_err;
2148
2149 + /* Enable USB mode */
2150 + error = cpcap_usb_gpio_set_mode(ddata, CPCAP_OTG_DM_DP);
2151 + if (error)
2152 + goto out_err;
2153 +
2154 return 0;
2155
2156 out_err:
2157 diff --git a/drivers/phy/qualcomm/phy-qcom-qmp.c b/drivers/phy/qualcomm/phy-qcom-qmp.c
2158 index 39e8deb8001e..27dd20a7fe13 100644
2159 --- a/drivers/phy/qualcomm/phy-qcom-qmp.c
2160 +++ b/drivers/phy/qualcomm/phy-qcom-qmp.c
2161 @@ -66,7 +66,7 @@
2162 /* QPHY_V3_PCS_MISC_CLAMP_ENABLE register bits */
2163 #define CLAMP_EN BIT(0) /* enables i/o clamp_n */
2164
2165 -#define PHY_INIT_COMPLETE_TIMEOUT 1000
2166 +#define PHY_INIT_COMPLETE_TIMEOUT 10000
2167 #define POWER_DOWN_DELAY_US_MIN 10
2168 #define POWER_DOWN_DELAY_US_MAX 11
2169
2170 diff --git a/drivers/platform/x86/dell-laptop.c b/drivers/platform/x86/dell-laptop.c
2171 index d27be2836bc2..74e988f839e8 100644
2172 --- a/drivers/platform/x86/dell-laptop.c
2173 +++ b/drivers/platform/x86/dell-laptop.c
2174 @@ -33,6 +33,7 @@
2175
2176 struct quirk_entry {
2177 bool touchpad_led;
2178 + bool kbd_led_not_present;
2179 bool kbd_led_levels_off_1;
2180 bool kbd_missing_ac_tag;
2181
2182 @@ -73,6 +74,10 @@ static struct quirk_entry quirk_dell_latitude_e6410 = {
2183 .kbd_led_levels_off_1 = true,
2184 };
2185
2186 +static struct quirk_entry quirk_dell_inspiron_1012 = {
2187 + .kbd_led_not_present = true,
2188 +};
2189 +
2190 static struct platform_driver platform_driver = {
2191 .driver = {
2192 .name = "dell-laptop",
2193 @@ -310,6 +315,24 @@ static const struct dmi_system_id dell_quirks[] __initconst = {
2194 },
2195 .driver_data = &quirk_dell_latitude_e6410,
2196 },
2197 + {
2198 + .callback = dmi_matched,
2199 + .ident = "Dell Inspiron 1012",
2200 + .matches = {
2201 + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
2202 + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1012"),
2203 + },
2204 + .driver_data = &quirk_dell_inspiron_1012,
2205 + },
2206 + {
2207 + .callback = dmi_matched,
2208 + .ident = "Dell Inspiron 1018",
2209 + .matches = {
2210 + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
2211 + DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1018"),
2212 + },
2213 + .driver_data = &quirk_dell_inspiron_1012,
2214 + },
2215 { }
2216 };
2217
2218 @@ -1493,6 +1516,9 @@ static void kbd_init(void)
2219 {
2220 int ret;
2221
2222 + if (quirks && quirks->kbd_led_not_present)
2223 + return;
2224 +
2225 ret = kbd_init_info();
2226 kbd_init_tokens();
2227
2228 diff --git a/drivers/power/supply/ingenic-battery.c b/drivers/power/supply/ingenic-battery.c
2229 index 35816d4b3012..2748715c4c75 100644
2230 --- a/drivers/power/supply/ingenic-battery.c
2231 +++ b/drivers/power/supply/ingenic-battery.c
2232 @@ -100,10 +100,17 @@ static int ingenic_battery_set_scale(struct ingenic_battery *bat)
2233 return -EINVAL;
2234 }
2235
2236 - return iio_write_channel_attribute(bat->channel,
2237 - scale_raw[best_idx],
2238 - scale_raw[best_idx + 1],
2239 - IIO_CHAN_INFO_SCALE);
2240 + /* Only set scale if there is more than one (fractional) entry */
2241 + if (scale_len > 2) {
2242 + ret = iio_write_channel_attribute(bat->channel,
2243 + scale_raw[best_idx],
2244 + scale_raw[best_idx + 1],
2245 + IIO_CHAN_INFO_SCALE);
2246 + if (ret)
2247 + return ret;
2248 + }
2249 +
2250 + return 0;
2251 }
2252
2253 static enum power_supply_property ingenic_battery_properties[] = {
2254 diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c
2255 index 45972056ed8c..11cac7e10663 100644
2256 --- a/drivers/spi/spi-dw.c
2257 +++ b/drivers/spi/spi-dw.c
2258 @@ -172,9 +172,11 @@ static inline u32 rx_max(struct dw_spi *dws)
2259
2260 static void dw_writer(struct dw_spi *dws)
2261 {
2262 - u32 max = tx_max(dws);
2263 + u32 max;
2264 u16 txw = 0;
2265
2266 + spin_lock(&dws->buf_lock);
2267 + max = tx_max(dws);
2268 while (max--) {
2269 /* Set the tx word if the transfer's original "tx" is not null */
2270 if (dws->tx_end - dws->len) {
2271 @@ -186,13 +188,16 @@ static void dw_writer(struct dw_spi *dws)
2272 dw_write_io_reg(dws, DW_SPI_DR, txw);
2273 dws->tx += dws->n_bytes;
2274 }
2275 + spin_unlock(&dws->buf_lock);
2276 }
2277
2278 static void dw_reader(struct dw_spi *dws)
2279 {
2280 - u32 max = rx_max(dws);
2281 + u32 max;
2282 u16 rxw;
2283
2284 + spin_lock(&dws->buf_lock);
2285 + max = rx_max(dws);
2286 while (max--) {
2287 rxw = dw_read_io_reg(dws, DW_SPI_DR);
2288 /* Care rx only if the transfer's original "rx" is not null */
2289 @@ -204,6 +209,7 @@ static void dw_reader(struct dw_spi *dws)
2290 }
2291 dws->rx += dws->n_bytes;
2292 }
2293 + spin_unlock(&dws->buf_lock);
2294 }
2295
2296 static void int_error_stop(struct dw_spi *dws, const char *msg)
2297 @@ -276,18 +282,20 @@ static int dw_spi_transfer_one(struct spi_controller *master,
2298 {
2299 struct dw_spi *dws = spi_controller_get_devdata(master);
2300 struct chip_data *chip = spi_get_ctldata(spi);
2301 + unsigned long flags;
2302 u8 imask = 0;
2303 u16 txlevel = 0;
2304 u32 cr0;
2305 int ret;
2306
2307 dws->dma_mapped = 0;
2308 -
2309 + spin_lock_irqsave(&dws->buf_lock, flags);
2310 dws->tx = (void *)transfer->tx_buf;
2311 dws->tx_end = dws->tx + transfer->len;
2312 dws->rx = transfer->rx_buf;
2313 dws->rx_end = dws->rx + transfer->len;
2314 dws->len = transfer->len;
2315 + spin_unlock_irqrestore(&dws->buf_lock, flags);
2316
2317 spi_enable_chip(dws, 0);
2318
2319 @@ -471,6 +479,7 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)
2320 dws->type = SSI_MOTO_SPI;
2321 dws->dma_inited = 0;
2322 dws->dma_addr = (dma_addr_t)(dws->paddr + DW_SPI_DR);
2323 + spin_lock_init(&dws->buf_lock);
2324
2325 spi_controller_set_devdata(master, dws);
2326
2327 diff --git a/drivers/spi/spi-dw.h b/drivers/spi/spi-dw.h
2328 index c9c15881e982..f3a2f157a2b1 100644
2329 --- a/drivers/spi/spi-dw.h
2330 +++ b/drivers/spi/spi-dw.h
2331 @@ -120,6 +120,7 @@ struct dw_spi {
2332 size_t len;
2333 void *tx;
2334 void *tx_end;
2335 + spinlock_t buf_lock;
2336 void *rx;
2337 void *rx_end;
2338 int dma_mapped;
2339 diff --git a/drivers/spi/spi-pxa2xx.c b/drivers/spi/spi-pxa2xx.c
2340 index 9f92165fe09f..2fd843b18297 100644
2341 --- a/drivers/spi/spi-pxa2xx.c
2342 +++ b/drivers/spi/spi-pxa2xx.c
2343 @@ -1461,6 +1461,10 @@ static const struct pci_device_id pxa2xx_spi_pci_compound_match[] = {
2344 { PCI_VDEVICE(INTEL, 0x02aa), LPSS_CNL_SSP },
2345 { PCI_VDEVICE(INTEL, 0x02ab), LPSS_CNL_SSP },
2346 { PCI_VDEVICE(INTEL, 0x02fb), LPSS_CNL_SSP },
2347 + /* CML-H */
2348 + { PCI_VDEVICE(INTEL, 0x06aa), LPSS_CNL_SSP },
2349 + { PCI_VDEVICE(INTEL, 0x06ab), LPSS_CNL_SSP },
2350 + { PCI_VDEVICE(INTEL, 0x06fb), LPSS_CNL_SSP },
2351 /* TGL-LP */
2352 { PCI_VDEVICE(INTEL, 0xa0aa), LPSS_CNL_SSP },
2353 { PCI_VDEVICE(INTEL, 0xa0ab), LPSS_CNL_SSP },
2354 diff --git a/drivers/staging/most/net/net.c b/drivers/staging/most/net/net.c
2355 index 26a31854c636..c48956f0ef29 100644
2356 --- a/drivers/staging/most/net/net.c
2357 +++ b/drivers/staging/most/net/net.c
2358 @@ -81,6 +81,11 @@ static int skb_to_mamac(const struct sk_buff *skb, struct mbo *mbo)
2359 unsigned int payload_len = skb->len - ETH_HLEN;
2360 unsigned int mdp_len = payload_len + MDP_HDR_LEN;
2361
2362 + if (mdp_len < skb->len) {
2363 + pr_err("drop: too large packet! (%u)\n", skb->len);
2364 + return -EINVAL;
2365 + }
2366 +
2367 if (mbo->buffer_length < mdp_len) {
2368 pr_err("drop: too small buffer! (%d for %d)\n",
2369 mbo->buffer_length, mdp_len);
2370 @@ -128,6 +133,11 @@ static int skb_to_mep(const struct sk_buff *skb, struct mbo *mbo)
2371 u8 *buff = mbo->virt_address;
2372 unsigned int mep_len = skb->len + MEP_HDR_LEN;
2373
2374 + if (mep_len < skb->len) {
2375 + pr_err("drop: too large packet! (%u)\n", skb->len);
2376 + return -EINVAL;
2377 + }
2378 +
2379 if (mbo->buffer_length < mep_len) {
2380 pr_err("drop: too small buffer! (%d for %d)\n",
2381 mbo->buffer_length, mep_len);
2382 diff --git a/drivers/staging/mt7621-pci/pci-mt7621.c b/drivers/staging/mt7621-pci/pci-mt7621.c
2383 index 6b98827da57f..3633c924848e 100644
2384 --- a/drivers/staging/mt7621-pci/pci-mt7621.c
2385 +++ b/drivers/staging/mt7621-pci/pci-mt7621.c
2386 @@ -29,15 +29,14 @@
2387 #include <linux/phy/phy.h>
2388 #include <linux/platform_device.h>
2389 #include <linux/reset.h>
2390 +#include <linux/sys_soc.h>
2391 #include <mt7621.h>
2392 #include <ralink_regs.h>
2393
2394 #include "../../pci/pci.h"
2395
2396 /* sysctl */
2397 -#define MT7621_CHIP_REV_ID 0x0c
2398 #define MT7621_GPIO_MODE 0x60
2399 -#define CHIP_REV_MT7621_E2 0x0101
2400
2401 /* MediaTek specific configuration registers */
2402 #define PCIE_FTS_NUM 0x70c
2403 @@ -126,6 +125,8 @@ struct mt7621_pcie_port {
2404 * @ports: pointer to PCIe port information
2405 * @perst: gpio reset
2406 * @rst: pointer to pcie reset
2407 + * @resets_inverted: depends on chip revision
2408 + * reset lines are inverted.
2409 */
2410 struct mt7621_pcie {
2411 void __iomem *base;
2412 @@ -140,6 +141,7 @@ struct mt7621_pcie {
2413 struct list_head ports;
2414 struct gpio_desc *perst;
2415 struct reset_control *rst;
2416 + bool resets_inverted;
2417 };
2418
2419 static inline u32 pcie_read(struct mt7621_pcie *pcie, u32 reg)
2420 @@ -229,9 +231,9 @@ static inline void mt7621_pcie_port_clk_disable(struct mt7621_pcie_port *port)
2421
2422 static inline void mt7621_control_assert(struct mt7621_pcie_port *port)
2423 {
2424 - u32 chip_rev_id = rt_sysc_r32(MT7621_CHIP_REV_ID);
2425 + struct mt7621_pcie *pcie = port->pcie;
2426
2427 - if ((chip_rev_id & 0xFFFF) == CHIP_REV_MT7621_E2)
2428 + if (pcie->resets_inverted)
2429 reset_control_assert(port->pcie_rst);
2430 else
2431 reset_control_deassert(port->pcie_rst);
2432 @@ -239,9 +241,9 @@ static inline void mt7621_control_assert(struct mt7621_pcie_port *port)
2433
2434 static inline void mt7621_control_deassert(struct mt7621_pcie_port *port)
2435 {
2436 - u32 chip_rev_id = rt_sysc_r32(MT7621_CHIP_REV_ID);
2437 + struct mt7621_pcie *pcie = port->pcie;
2438
2439 - if ((chip_rev_id & 0xFFFF) == CHIP_REV_MT7621_E2)
2440 + if (pcie->resets_inverted)
2441 reset_control_deassert(port->pcie_rst);
2442 else
2443 reset_control_assert(port->pcie_rst);
2444 @@ -641,9 +643,14 @@ static int mt7621_pcie_register_host(struct pci_host_bridge *host,
2445 return pci_host_probe(host);
2446 }
2447
2448 +static const struct soc_device_attribute mt7621_pci_quirks_match[] = {
2449 + { .soc_id = "mt7621", .revision = "E2" }
2450 +};
2451 +
2452 static int mt7621_pci_probe(struct platform_device *pdev)
2453 {
2454 struct device *dev = &pdev->dev;
2455 + const struct soc_device_attribute *attr;
2456 struct mt7621_pcie *pcie;
2457 struct pci_host_bridge *bridge;
2458 int err;
2459 @@ -661,6 +668,10 @@ static int mt7621_pci_probe(struct platform_device *pdev)
2460 platform_set_drvdata(pdev, pcie);
2461 INIT_LIST_HEAD(&pcie->ports);
2462
2463 + attr = soc_device_match(mt7621_pci_quirks_match);
2464 + if (attr)
2465 + pcie->resets_inverted = true;
2466 +
2467 err = mt7621_pcie_parse_dt(pcie);
2468 if (err) {
2469 dev_err(dev, "Parsing DT failed\n");
2470 diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h
2471 index 50e1c8918040..e2fabe818b19 100644
2472 --- a/drivers/staging/vt6656/device.h
2473 +++ b/drivers/staging/vt6656/device.h
2474 @@ -52,6 +52,8 @@
2475 #define RATE_AUTO 12
2476
2477 #define MAX_RATE 12
2478 +#define VNT_B_RATES (BIT(RATE_1M) | BIT(RATE_2M) |\
2479 + BIT(RATE_5M) | BIT(RATE_11M))
2480
2481 /*
2482 * device specific
2483 diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c
2484 index f40947955675..af215860be4c 100644
2485 --- a/drivers/staging/vt6656/int.c
2486 +++ b/drivers/staging/vt6656/int.c
2487 @@ -99,9 +99,11 @@ static int vnt_int_report_rate(struct vnt_private *priv, u8 pkt_no, u8 tsr)
2488
2489 info->status.rates[0].count = tx_retry;
2490
2491 - if (!(tsr & (TSR_TMO | TSR_RETRYTMO))) {
2492 + if (!(tsr & TSR_TMO)) {
2493 info->status.rates[0].idx = idx;
2494 - info->flags |= IEEE80211_TX_STAT_ACK;
2495 +
2496 + if (!(info->flags & IEEE80211_TX_CTL_NO_ACK))
2497 + info->flags |= IEEE80211_TX_STAT_ACK;
2498 }
2499
2500 ieee80211_tx_status_irqsafe(priv->hw, context->skb);
2501 diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c
2502 index c26882e2bb80..69a48383611f 100644
2503 --- a/drivers/staging/vt6656/main_usb.c
2504 +++ b/drivers/staging/vt6656/main_usb.c
2505 @@ -1016,6 +1016,7 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id)
2506 ieee80211_hw_set(priv->hw, RX_INCLUDES_FCS);
2507 ieee80211_hw_set(priv->hw, REPORTS_TX_ACK_STATUS);
2508 ieee80211_hw_set(priv->hw, SUPPORTS_PS);
2509 + ieee80211_hw_set(priv->hw, PS_NULLFUNC_STACK);
2510
2511 priv->hw->max_signal = 100;
2512
2513 diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c
2514 index 4e9cfacf75f2..ab6141f361af 100644
2515 --- a/drivers/staging/vt6656/rxtx.c
2516 +++ b/drivers/staging/vt6656/rxtx.c
2517 @@ -278,11 +278,9 @@ static u16 vnt_rxtx_datahead_g(struct vnt_usb_send_context *tx_context,
2518 PK_TYPE_11B, &buf->b);
2519
2520 /* Get Duration and TimeStamp */
2521 - if (ieee80211_is_pspoll(hdr->frame_control)) {
2522 - __le16 dur = cpu_to_le16(priv->current_aid | BIT(14) | BIT(15));
2523 -
2524 - buf->duration_a = dur;
2525 - buf->duration_b = dur;
2526 + if (ieee80211_is_nullfunc(hdr->frame_control)) {
2527 + buf->duration_a = hdr->duration_id;
2528 + buf->duration_b = hdr->duration_id;
2529 } else {
2530 buf->duration_a = vnt_get_duration_le(priv,
2531 tx_context->pkt_type, need_ack);
2532 @@ -371,10 +369,8 @@ static u16 vnt_rxtx_datahead_ab(struct vnt_usb_send_context *tx_context,
2533 tx_context->pkt_type, &buf->ab);
2534
2535 /* Get Duration and TimeStampOff */
2536 - if (ieee80211_is_pspoll(hdr->frame_control)) {
2537 - __le16 dur = cpu_to_le16(priv->current_aid | BIT(14) | BIT(15));
2538 -
2539 - buf->duration = dur;
2540 + if (ieee80211_is_nullfunc(hdr->frame_control)) {
2541 + buf->duration = hdr->duration_id;
2542 } else {
2543 buf->duration = vnt_get_duration_le(priv, tx_context->pkt_type,
2544 need_ack);
2545 @@ -815,10 +811,14 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb)
2546 if (info->band == NL80211_BAND_5GHZ) {
2547 pkt_type = PK_TYPE_11A;
2548 } else {
2549 - if (tx_rate->flags & IEEE80211_TX_RC_USE_CTS_PROTECT)
2550 - pkt_type = PK_TYPE_11GB;
2551 - else
2552 - pkt_type = PK_TYPE_11GA;
2553 + if (tx_rate->flags & IEEE80211_TX_RC_USE_CTS_PROTECT) {
2554 + if (priv->basic_rates & VNT_B_RATES)
2555 + pkt_type = PK_TYPE_11GB;
2556 + else
2557 + pkt_type = PK_TYPE_11GA;
2558 + } else {
2559 + pkt_type = PK_TYPE_11A;
2560 + }
2561 }
2562 } else {
2563 pkt_type = PK_TYPE_11B;
2564 diff --git a/drivers/staging/wlan-ng/prism2mgmt.c b/drivers/staging/wlan-ng/prism2mgmt.c
2565 index 7350fe5d96a3..a8860d2aee68 100644
2566 --- a/drivers/staging/wlan-ng/prism2mgmt.c
2567 +++ b/drivers/staging/wlan-ng/prism2mgmt.c
2568 @@ -959,7 +959,7 @@ int prism2mgmt_flashdl_state(struct wlandevice *wlandev, void *msgp)
2569 }
2570 }
2571
2572 - return 0;
2573 + return result;
2574 }
2575
2576 /*----------------------------------------------------------------
2577 diff --git a/drivers/tty/serial/8250/8250_bcm2835aux.c b/drivers/tty/serial/8250/8250_bcm2835aux.c
2578 index 8ce700c1a7fc..4997c519ebb3 100644
2579 --- a/drivers/tty/serial/8250/8250_bcm2835aux.c
2580 +++ b/drivers/tty/serial/8250/8250_bcm2835aux.c
2581 @@ -113,7 +113,7 @@ static int bcm2835aux_serial_remove(struct platform_device *pdev)
2582 {
2583 struct bcm2835aux_data *data = platform_get_drvdata(pdev);
2584
2585 - serial8250_unregister_port(data->uart.port.line);
2586 + serial8250_unregister_port(data->line);
2587 clk_disable_unprepare(data->clk);
2588
2589 return 0;
2590 diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
2591 index 34f602c3a882..9d8c660dc289 100644
2592 --- a/drivers/tty/serial/imx.c
2593 +++ b/drivers/tty/serial/imx.c
2594 @@ -700,22 +700,33 @@ static void imx_uart_start_tx(struct uart_port *port)
2595 }
2596 }
2597
2598 -static irqreturn_t imx_uart_rtsint(int irq, void *dev_id)
2599 +static irqreturn_t __imx_uart_rtsint(int irq, void *dev_id)
2600 {
2601 struct imx_port *sport = dev_id;
2602 u32 usr1;
2603
2604 - spin_lock(&sport->port.lock);
2605 -
2606 imx_uart_writel(sport, USR1_RTSD, USR1);
2607 usr1 = imx_uart_readl(sport, USR1) & USR1_RTSS;
2608 uart_handle_cts_change(&sport->port, !!usr1);
2609 wake_up_interruptible(&sport->port.state->port.delta_msr_wait);
2610
2611 - spin_unlock(&sport->port.lock);
2612 return IRQ_HANDLED;
2613 }
2614
2615 +static irqreturn_t imx_uart_rtsint(int irq, void *dev_id)
2616 +{
2617 + struct imx_port *sport = dev_id;
2618 + irqreturn_t ret;
2619 +
2620 + spin_lock(&sport->port.lock);
2621 +
2622 + ret = __imx_uart_rtsint(irq, dev_id);
2623 +
2624 + spin_unlock(&sport->port.lock);
2625 +
2626 + return ret;
2627 +}
2628 +
2629 static irqreturn_t imx_uart_txint(int irq, void *dev_id)
2630 {
2631 struct imx_port *sport = dev_id;
2632 @@ -726,14 +737,12 @@ static irqreturn_t imx_uart_txint(int irq, void *dev_id)
2633 return IRQ_HANDLED;
2634 }
2635
2636 -static irqreturn_t imx_uart_rxint(int irq, void *dev_id)
2637 +static irqreturn_t __imx_uart_rxint(int irq, void *dev_id)
2638 {
2639 struct imx_port *sport = dev_id;
2640 unsigned int rx, flg, ignored = 0;
2641 struct tty_port *port = &sport->port.state->port;
2642
2643 - spin_lock(&sport->port.lock);
2644 -
2645 while (imx_uart_readl(sport, USR2) & USR2_RDR) {
2646 u32 usr2;
2647
2648 @@ -792,11 +801,25 @@ static irqreturn_t imx_uart_rxint(int irq, void *dev_id)
2649 }
2650
2651 out:
2652 - spin_unlock(&sport->port.lock);
2653 tty_flip_buffer_push(port);
2654 +
2655 return IRQ_HANDLED;
2656 }
2657
2658 +static irqreturn_t imx_uart_rxint(int irq, void *dev_id)
2659 +{
2660 + struct imx_port *sport = dev_id;
2661 + irqreturn_t ret;
2662 +
2663 + spin_lock(&sport->port.lock);
2664 +
2665 + ret = __imx_uart_rxint(irq, dev_id);
2666 +
2667 + spin_unlock(&sport->port.lock);
2668 +
2669 + return ret;
2670 +}
2671 +
2672 static void imx_uart_clear_rx_errors(struct imx_port *sport);
2673
2674 /*
2675 @@ -855,6 +878,8 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id)
2676 unsigned int usr1, usr2, ucr1, ucr2, ucr3, ucr4;
2677 irqreturn_t ret = IRQ_NONE;
2678
2679 + spin_lock(&sport->port.lock);
2680 +
2681 usr1 = imx_uart_readl(sport, USR1);
2682 usr2 = imx_uart_readl(sport, USR2);
2683 ucr1 = imx_uart_readl(sport, UCR1);
2684 @@ -888,27 +913,25 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id)
2685 usr2 &= ~USR2_ORE;
2686
2687 if (usr1 & (USR1_RRDY | USR1_AGTIM)) {
2688 - imx_uart_rxint(irq, dev_id);
2689 + __imx_uart_rxint(irq, dev_id);
2690 ret = IRQ_HANDLED;
2691 }
2692
2693 if ((usr1 & USR1_TRDY) || (usr2 & USR2_TXDC)) {
2694 - imx_uart_txint(irq, dev_id);
2695 + imx_uart_transmit_buffer(sport);
2696 ret = IRQ_HANDLED;
2697 }
2698
2699 if (usr1 & USR1_DTRD) {
2700 imx_uart_writel(sport, USR1_DTRD, USR1);
2701
2702 - spin_lock(&sport->port.lock);
2703 imx_uart_mctrl_check(sport);
2704 - spin_unlock(&sport->port.lock);
2705
2706 ret = IRQ_HANDLED;
2707 }
2708
2709 if (usr1 & USR1_RTSD) {
2710 - imx_uart_rtsint(irq, dev_id);
2711 + __imx_uart_rtsint(irq, dev_id);
2712 ret = IRQ_HANDLED;
2713 }
2714
2715 @@ -923,6 +946,8 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id)
2716 ret = IRQ_HANDLED;
2717 }
2718
2719 + spin_unlock(&sport->port.lock);
2720 +
2721 return ret;
2722 }
2723
2724 diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
2725 index 97d6ae3c4df2..cede7a8e3605 100644
2726 --- a/drivers/usb/dwc3/core.c
2727 +++ b/drivers/usb/dwc3/core.c
2728 @@ -1209,6 +1209,9 @@ static void dwc3_core_exit_mode(struct dwc3 *dwc)
2729 /* do nothing */
2730 break;
2731 }
2732 +
2733 + /* de-assert DRVVBUS for HOST and OTG mode */
2734 + dwc3_set_prtcap(dwc, DWC3_GCTL_PRTCAP_DEVICE);
2735 }
2736
2737 static void dwc3_get_properties(struct dwc3 *dwc)
2738 diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
2739 index 294276f7deb9..7051611229c9 100644
2740 --- a/drivers/usb/dwc3/dwc3-pci.c
2741 +++ b/drivers/usb/dwc3/dwc3-pci.c
2742 @@ -34,6 +34,7 @@
2743 #define PCI_DEVICE_ID_INTEL_GLK 0x31aa
2744 #define PCI_DEVICE_ID_INTEL_CNPLP 0x9dee
2745 #define PCI_DEVICE_ID_INTEL_CNPH 0xa36e
2746 +#define PCI_DEVICE_ID_INTEL_CNPV 0xa3b0
2747 #define PCI_DEVICE_ID_INTEL_ICLLP 0x34ee
2748 #define PCI_DEVICE_ID_INTEL_EHLLP 0x4b7e
2749 #define PCI_DEVICE_ID_INTEL_TGPLP 0xa0ee
2750 @@ -342,6 +343,9 @@ static const struct pci_device_id dwc3_pci_id_table[] = {
2751 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_CNPH),
2752 (kernel_ulong_t) &dwc3_pci_intel_properties, },
2753
2754 + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_CNPV),
2755 + (kernel_ulong_t) &dwc3_pci_intel_properties, },
2756 +
2757 { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICLLP),
2758 (kernel_ulong_t) &dwc3_pci_intel_properties, },
2759
2760 diff --git a/drivers/usb/host/xhci-tegra.c b/drivers/usb/host/xhci-tegra.c
2761 index dc172513a4aa..b8e24ccba9f3 100644
2762 --- a/drivers/usb/host/xhci-tegra.c
2763 +++ b/drivers/usb/host/xhci-tegra.c
2764 @@ -1413,6 +1413,7 @@ MODULE_FIRMWARE("nvidia/tegra210/xusb.bin");
2765
2766 static const char * const tegra186_supply_names[] = {
2767 };
2768 +MODULE_FIRMWARE("nvidia/tegra186/xusb.bin");
2769
2770 static const struct tegra_xusb_phy_type tegra186_phy_types[] = {
2771 { .name = "usb3", .num = 3, },
2772 diff --git a/drivers/usb/musb/jz4740.c b/drivers/usb/musb/jz4740.c
2773 index 5261f8dfedec..e3b8c84ccdb8 100644
2774 --- a/drivers/usb/musb/jz4740.c
2775 +++ b/drivers/usb/musb/jz4740.c
2776 @@ -75,14 +75,17 @@ static struct musb_hdrc_platform_data jz4740_musb_platform_data = {
2777 static int jz4740_musb_init(struct musb *musb)
2778 {
2779 struct device *dev = musb->controller->parent;
2780 + int err;
2781
2782 if (dev->of_node)
2783 musb->xceiv = devm_usb_get_phy_by_phandle(dev, "phys", 0);
2784 else
2785 musb->xceiv = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
2786 if (IS_ERR(musb->xceiv)) {
2787 - dev_err(dev, "No transceiver configured\n");
2788 - return PTR_ERR(musb->xceiv);
2789 + err = PTR_ERR(musb->xceiv);
2790 + if (err != -EPROBE_DEFER)
2791 + dev_err(dev, "No transceiver configured: %d", err);
2792 + return err;
2793 }
2794
2795 /* Silicon does not implement ConfigData register.
2796 diff --git a/drivers/usb/serial/ir-usb.c b/drivers/usb/serial/ir-usb.c
2797 index 302eb9530859..627bea7e6cfb 100644
2798 --- a/drivers/usb/serial/ir-usb.c
2799 +++ b/drivers/usb/serial/ir-usb.c
2800 @@ -45,9 +45,10 @@ static int buffer_size;
2801 static int xbof = -1;
2802
2803 static int ir_startup (struct usb_serial *serial);
2804 -static int ir_open(struct tty_struct *tty, struct usb_serial_port *port);
2805 -static int ir_prepare_write_buffer(struct usb_serial_port *port,
2806 - void *dest, size_t size);
2807 +static int ir_write(struct tty_struct *tty, struct usb_serial_port *port,
2808 + const unsigned char *buf, int count);
2809 +static int ir_write_room(struct tty_struct *tty);
2810 +static void ir_write_bulk_callback(struct urb *urb);
2811 static void ir_process_read_urb(struct urb *urb);
2812 static void ir_set_termios(struct tty_struct *tty,
2813 struct usb_serial_port *port, struct ktermios *old_termios);
2814 @@ -77,8 +78,9 @@ static struct usb_serial_driver ir_device = {
2815 .num_ports = 1,
2816 .set_termios = ir_set_termios,
2817 .attach = ir_startup,
2818 - .open = ir_open,
2819 - .prepare_write_buffer = ir_prepare_write_buffer,
2820 + .write = ir_write,
2821 + .write_room = ir_write_room,
2822 + .write_bulk_callback = ir_write_bulk_callback,
2823 .process_read_urb = ir_process_read_urb,
2824 };
2825
2826 @@ -195,6 +197,9 @@ static int ir_startup(struct usb_serial *serial)
2827 struct usb_irda_cs_descriptor *irda_desc;
2828 int rates;
2829
2830 + if (serial->num_bulk_in < 1 || serial->num_bulk_out < 1)
2831 + return -ENODEV;
2832 +
2833 irda_desc = irda_usb_find_class_desc(serial, 0);
2834 if (!irda_desc) {
2835 dev_err(&serial->dev->dev,
2836 @@ -251,35 +256,102 @@ static int ir_startup(struct usb_serial *serial)
2837 return 0;
2838 }
2839
2840 -static int ir_open(struct tty_struct *tty, struct usb_serial_port *port)
2841 +static int ir_write(struct tty_struct *tty, struct usb_serial_port *port,
2842 + const unsigned char *buf, int count)
2843 {
2844 - int i;
2845 + struct urb *urb = NULL;
2846 + unsigned long flags;
2847 + int ret;
2848
2849 - for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i)
2850 - port->write_urbs[i]->transfer_flags = URB_ZERO_PACKET;
2851 + if (port->bulk_out_size == 0)
2852 + return -EINVAL;
2853
2854 - /* Start reading from the device */
2855 - return usb_serial_generic_open(tty, port);
2856 -}
2857 + if (count == 0)
2858 + return 0;
2859
2860 -static int ir_prepare_write_buffer(struct usb_serial_port *port,
2861 - void *dest, size_t size)
2862 -{
2863 - unsigned char *buf = dest;
2864 - int count;
2865 + count = min(count, port->bulk_out_size - 1);
2866 +
2867 + spin_lock_irqsave(&port->lock, flags);
2868 + if (__test_and_clear_bit(0, &port->write_urbs_free)) {
2869 + urb = port->write_urbs[0];
2870 + port->tx_bytes += count;
2871 + }
2872 + spin_unlock_irqrestore(&port->lock, flags);
2873 +
2874 + if (!urb)
2875 + return 0;
2876
2877 /*
2878 * The first byte of the packet we send to the device contains an
2879 - * inbound header which indicates an additional number of BOFs and
2880 + * outbound header which indicates an additional number of BOFs and
2881 * a baud rate change.
2882 *
2883 * See section 5.4.2.2 of the USB IrDA spec.
2884 */
2885 - *buf = ir_xbof | ir_baud;
2886 + *(u8 *)urb->transfer_buffer = ir_xbof | ir_baud;
2887 +
2888 + memcpy(urb->transfer_buffer + 1, buf, count);
2889 +
2890 + urb->transfer_buffer_length = count + 1;
2891 + urb->transfer_flags = URB_ZERO_PACKET;
2892 +
2893 + ret = usb_submit_urb(urb, GFP_ATOMIC);
2894 + if (ret) {
2895 + dev_err(&port->dev, "failed to submit write urb: %d\n", ret);
2896 +
2897 + spin_lock_irqsave(&port->lock, flags);
2898 + __set_bit(0, &port->write_urbs_free);
2899 + port->tx_bytes -= count;
2900 + spin_unlock_irqrestore(&port->lock, flags);
2901 +
2902 + return ret;
2903 + }
2904 +
2905 + return count;
2906 +}
2907 +
2908 +static void ir_write_bulk_callback(struct urb *urb)
2909 +{
2910 + struct usb_serial_port *port = urb->context;
2911 + int status = urb->status;
2912 + unsigned long flags;
2913 +
2914 + spin_lock_irqsave(&port->lock, flags);
2915 + __set_bit(0, &port->write_urbs_free);
2916 + port->tx_bytes -= urb->transfer_buffer_length - 1;
2917 + spin_unlock_irqrestore(&port->lock, flags);
2918 +
2919 + switch (status) {
2920 + case 0:
2921 + break;
2922 + case -ENOENT:
2923 + case -ECONNRESET:
2924 + case -ESHUTDOWN:
2925 + dev_dbg(&port->dev, "write urb stopped: %d\n", status);
2926 + return;
2927 + case -EPIPE:
2928 + dev_err(&port->dev, "write urb stopped: %d\n", status);
2929 + return;
2930 + default:
2931 + dev_err(&port->dev, "nonzero write-urb status: %d\n", status);
2932 + break;
2933 + }
2934 +
2935 + usb_serial_port_softint(port);
2936 +}
2937 +
2938 +static int ir_write_room(struct tty_struct *tty)
2939 +{
2940 + struct usb_serial_port *port = tty->driver_data;
2941 + int count = 0;
2942 +
2943 + if (port->bulk_out_size == 0)
2944 + return 0;
2945 +
2946 + if (test_bit(0, &port->write_urbs_free))
2947 + count = port->bulk_out_size - 1;
2948
2949 - count = kfifo_out_locked(&port->write_fifo, buf + 1, size - 1,
2950 - &port->lock);
2951 - return count + 1;
2952 + return count;
2953 }
2954
2955 static void ir_process_read_urb(struct urb *urb)
2956 @@ -332,34 +404,34 @@ static void ir_set_termios(struct tty_struct *tty,
2957
2958 switch (baud) {
2959 case 2400:
2960 - ir_baud = USB_IRDA_BR_2400;
2961 + ir_baud = USB_IRDA_LS_2400;
2962 break;
2963 case 9600:
2964 - ir_baud = USB_IRDA_BR_9600;
2965 + ir_baud = USB_IRDA_LS_9600;
2966 break;
2967 case 19200:
2968 - ir_baud = USB_IRDA_BR_19200;
2969 + ir_baud = USB_IRDA_LS_19200;
2970 break;
2971 case 38400:
2972 - ir_baud = USB_IRDA_BR_38400;
2973 + ir_baud = USB_IRDA_LS_38400;
2974 break;
2975 case 57600:
2976 - ir_baud = USB_IRDA_BR_57600;
2977 + ir_baud = USB_IRDA_LS_57600;
2978 break;
2979 case 115200:
2980 - ir_baud = USB_IRDA_BR_115200;
2981 + ir_baud = USB_IRDA_LS_115200;
2982 break;
2983 case 576000:
2984 - ir_baud = USB_IRDA_BR_576000;
2985 + ir_baud = USB_IRDA_LS_576000;
2986 break;
2987 case 1152000:
2988 - ir_baud = USB_IRDA_BR_1152000;
2989 + ir_baud = USB_IRDA_LS_1152000;
2990 break;
2991 case 4000000:
2992 - ir_baud = USB_IRDA_BR_4000000;
2993 + ir_baud = USB_IRDA_LS_4000000;
2994 break;
2995 default:
2996 - ir_baud = USB_IRDA_BR_9600;
2997 + ir_baud = USB_IRDA_LS_9600;
2998 baud = 9600;
2999 }
3000
3001 diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h
3002 index d0bdebd87ce3..1b23741036ee 100644
3003 --- a/drivers/usb/storage/unusual_uas.h
3004 +++ b/drivers/usb/storage/unusual_uas.h
3005 @@ -87,12 +87,15 @@ UNUSUAL_DEV(0x2537, 0x1068, 0x0000, 0x9999,
3006 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3007 US_FL_IGNORE_UAS),
3008
3009 -/* Reported-by: Takeo Nakayama <javhera@gmx.com> */
3010 +/*
3011 + * Initially Reported-by: Takeo Nakayama <javhera@gmx.com>
3012 + * UAS Ignore Reported by Steven Ellis <sellis@redhat.com>
3013 + */
3014 UNUSUAL_DEV(0x357d, 0x7788, 0x0000, 0x9999,
3015 "JMicron",
3016 "JMS566",
3017 USB_SC_DEVICE, USB_PR_DEVICE, NULL,
3018 - US_FL_NO_REPORT_OPCODES),
3019 + US_FL_NO_REPORT_OPCODES | US_FL_IGNORE_UAS),
3020
3021 /* Reported-by: Hans de Goede <hdegoede@redhat.com> */
3022 UNUSUAL_DEV(0x4971, 0x1012, 0x0000, 0x9999,
3023 diff --git a/drivers/usb/typec/tcpm/fusb302.c b/drivers/usb/typec/tcpm/fusb302.c
3024 index ed8655c6af8c..b498960ff72b 100644
3025 --- a/drivers/usb/typec/tcpm/fusb302.c
3026 +++ b/drivers/usb/typec/tcpm/fusb302.c
3027 @@ -1666,7 +1666,7 @@ static const struct property_entry port_props[] = {
3028 PROPERTY_ENTRY_STRING("try-power-role", "sink"),
3029 PROPERTY_ENTRY_U32_ARRAY("source-pdos", src_pdo),
3030 PROPERTY_ENTRY_U32_ARRAY("sink-pdos", snk_pdo),
3031 - PROPERTY_ENTRY_U32("op-sink-microwatt", 2500),
3032 + PROPERTY_ENTRY_U32("op-sink-microwatt", 2500000),
3033 { }
3034 };
3035
3036 diff --git a/drivers/usb/typec/tcpm/wcove.c b/drivers/usb/typec/tcpm/wcove.c
3037 index edc271da14f4..9b745f432c91 100644
3038 --- a/drivers/usb/typec/tcpm/wcove.c
3039 +++ b/drivers/usb/typec/tcpm/wcove.c
3040 @@ -597,7 +597,7 @@ static const struct property_entry wcove_props[] = {
3041 PROPERTY_ENTRY_STRING("try-power-role", "sink"),
3042 PROPERTY_ENTRY_U32_ARRAY("source-pdos", src_pdo),
3043 PROPERTY_ENTRY_U32_ARRAY("sink-pdos", snk_pdo),
3044 - PROPERTY_ENTRY_U32("op-sink-microwatt", 15000),
3045 + PROPERTY_ENTRY_U32("op-sink-microwatt", 15000000),
3046 { }
3047 };
3048
3049 diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
3050 index 4c761abc5688..e2745f686196 100644
3051 --- a/drivers/watchdog/Kconfig
3052 +++ b/drivers/watchdog/Kconfig
3053 @@ -687,6 +687,7 @@ config MAX63XX_WATCHDOG
3054 config MAX77620_WATCHDOG
3055 tristate "Maxim Max77620 Watchdog Timer"
3056 depends on MFD_MAX77620 || COMPILE_TEST
3057 + select WATCHDOG_CORE
3058 help
3059 This is the driver for the Max77620 watchdog timer.
3060 Say 'Y' here to enable the watchdog timer support for
3061 diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c
3062 index 1cccf8eb1c5d..8e6dfe76f9c9 100644
3063 --- a/drivers/watchdog/orion_wdt.c
3064 +++ b/drivers/watchdog/orion_wdt.c
3065 @@ -602,7 +602,7 @@ static int orion_wdt_probe(struct platform_device *pdev)
3066 set_bit(WDOG_HW_RUNNING, &dev->wdt.status);
3067
3068 /* Request the IRQ only after the watchdog is disabled */
3069 - irq = platform_get_irq(pdev, 0);
3070 + irq = platform_get_irq_optional(pdev, 0);
3071 if (irq > 0) {
3072 /*
3073 * Not all supported platforms specify an interrupt for the
3074 @@ -617,7 +617,7 @@ static int orion_wdt_probe(struct platform_device *pdev)
3075 }
3076
3077 /* Optional 2nd interrupt for pretimeout */
3078 - irq = platform_get_irq(pdev, 1);
3079 + irq = platform_get_irq_optional(pdev, 1);
3080 if (irq > 0) {
3081 orion_wdt_info.options |= WDIOF_PRETIMEOUT;
3082 ret = devm_request_irq(&pdev->dev, irq, orion_wdt_pre_irq,
3083 diff --git a/drivers/watchdog/rn5t618_wdt.c b/drivers/watchdog/rn5t618_wdt.c
3084 index 234876047431..6e524c8e26a8 100644
3085 --- a/drivers/watchdog/rn5t618_wdt.c
3086 +++ b/drivers/watchdog/rn5t618_wdt.c
3087 @@ -188,6 +188,7 @@ static struct platform_driver rn5t618_wdt_driver = {
3088
3089 module_platform_driver(rn5t618_wdt_driver);
3090
3091 +MODULE_ALIAS("platform:rn5t618-wdt");
3092 MODULE_AUTHOR("Beniamino Galvani <b.galvani@gmail.com>");
3093 MODULE_DESCRIPTION("RN5T618 watchdog driver");
3094 MODULE_LICENSE("GPL v2");
3095 diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
3096 index f55e53486e74..53611d7e9d28 100644
3097 --- a/fs/cifs/cifsglob.h
3098 +++ b/fs/cifs/cifsglob.h
3099 @@ -1538,6 +1538,7 @@ struct mid_q_entry {
3100 mid_callback_t *callback; /* call completion callback */
3101 mid_handle_t *handle; /* call handle mid callback */
3102 void *callback_data; /* general purpose pointer for callback */
3103 + struct task_struct *creator;
3104 void *resp_buf; /* pointer to received SMB header */
3105 unsigned int resp_buf_size;
3106 int mid_state; /* wish this were enum but can not pass to wait_event */
3107 diff --git a/fs/cifs/smb2misc.c b/fs/cifs/smb2misc.c
3108 index 766974fe637a..14265b4bbcc0 100644
3109 --- a/fs/cifs/smb2misc.c
3110 +++ b/fs/cifs/smb2misc.c
3111 @@ -750,7 +750,7 @@ __smb2_handle_cancelled_close(struct cifs_tcon *tcon, __u64 persistent_fid,
3112 {
3113 struct close_cancelled_open *cancelled;
3114
3115 - cancelled = kzalloc(sizeof(*cancelled), GFP_KERNEL);
3116 + cancelled = kzalloc(sizeof(*cancelled), GFP_ATOMIC);
3117 if (!cancelled)
3118 return -ENOMEM;
3119
3120 diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
3121 index b5c1cba3e6a1..662256fa2a18 100644
3122 --- a/fs/cifs/smb2ops.c
3123 +++ b/fs/cifs/smb2ops.c
3124 @@ -1461,7 +1461,9 @@ smb2_ioctl_query_info(const unsigned int xid,
3125 COMPOUND_FID, COMPOUND_FID,
3126 qi.info_type, true, buffer,
3127 qi.output_buffer_length,
3128 - CIFSMaxBufSize);
3129 + CIFSMaxBufSize -
3130 + MAX_SMB2_CREATE_RESPONSE_SIZE -
3131 + MAX_SMB2_CLOSE_RESPONSE_SIZE);
3132 }
3133 } else if (qi.flags == PASSTHRU_SET_INFO) {
3134 /* Can eventually relax perm check since server enforces too */
3135 @@ -2634,7 +2636,10 @@ smb2_query_symlink(const unsigned int xid, struct cifs_tcon *tcon,
3136
3137 rc = SMB2_ioctl_init(tcon, &rqst[1], fid.persistent_fid,
3138 fid.volatile_fid, FSCTL_GET_REPARSE_POINT,
3139 - true /* is_fctl */, NULL, 0, CIFSMaxBufSize);
3140 + true /* is_fctl */, NULL, 0,
3141 + CIFSMaxBufSize -
3142 + MAX_SMB2_CREATE_RESPONSE_SIZE -
3143 + MAX_SMB2_CLOSE_RESPONSE_SIZE);
3144 if (rc)
3145 goto querty_exit;
3146
3147 diff --git a/fs/cifs/smb2transport.c b/fs/cifs/smb2transport.c
3148 index 148d7942c796..805652969065 100644
3149 --- a/fs/cifs/smb2transport.c
3150 +++ b/fs/cifs/smb2transport.c
3151 @@ -599,6 +599,8 @@ smb2_mid_entry_alloc(const struct smb2_sync_hdr *shdr,
3152 * The default is for the mid to be synchronous, so the
3153 * default callback just wakes up the current task.
3154 */
3155 + get_task_struct(current);
3156 + temp->creator = current;
3157 temp->callback = cifs_wake_up_task;
3158 temp->callback_data = current;
3159
3160 diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
3161 index 755434d5e4e7..e67a43fd037c 100644
3162 --- a/fs/cifs/transport.c
3163 +++ b/fs/cifs/transport.c
3164 @@ -76,6 +76,8 @@ AllocMidQEntry(const struct smb_hdr *smb_buffer, struct TCP_Server_Info *server)
3165 * The default is for the mid to be synchronous, so the
3166 * default callback just wakes up the current task.
3167 */
3168 + get_task_struct(current);
3169 + temp->creator = current;
3170 temp->callback = cifs_wake_up_task;
3171 temp->callback_data = current;
3172
3173 @@ -158,6 +160,7 @@ static void _cifs_mid_q_entry_release(struct kref *refcount)
3174 }
3175 }
3176 #endif
3177 + put_task_struct(midEntry->creator);
3178
3179 mempool_free(midEntry, cifs_mid_poolp);
3180 }
3181 diff --git a/fs/debugfs/file.c b/fs/debugfs/file.c
3182 index 87846aad594b..8fd45eb89424 100644
3183 --- a/fs/debugfs/file.c
3184 +++ b/fs/debugfs/file.c
3185 @@ -142,18 +142,21 @@ EXPORT_SYMBOL_GPL(debugfs_file_put);
3186 * We also need to exclude any file that has ways to write or alter it as root
3187 * can bypass the permissions check.
3188 */
3189 -static bool debugfs_is_locked_down(struct inode *inode,
3190 - struct file *filp,
3191 - const struct file_operations *real_fops)
3192 +static int debugfs_locked_down(struct inode *inode,
3193 + struct file *filp,
3194 + const struct file_operations *real_fops)
3195 {
3196 if ((inode->i_mode & 07777) == 0444 &&
3197 !(filp->f_mode & FMODE_WRITE) &&
3198 !real_fops->unlocked_ioctl &&
3199 !real_fops->compat_ioctl &&
3200 !real_fops->mmap)
3201 - return false;
3202 + return 0;
3203
3204 - return security_locked_down(LOCKDOWN_DEBUGFS);
3205 + if (security_locked_down(LOCKDOWN_DEBUGFS))
3206 + return -EPERM;
3207 +
3208 + return 0;
3209 }
3210
3211 static int open_proxy_open(struct inode *inode, struct file *filp)
3212 @@ -168,7 +171,7 @@ static int open_proxy_open(struct inode *inode, struct file *filp)
3213
3214 real_fops = debugfs_real_fops(filp);
3215
3216 - r = debugfs_is_locked_down(inode, filp, real_fops);
3217 + r = debugfs_locked_down(inode, filp, real_fops);
3218 if (r)
3219 goto out;
3220
3221 @@ -298,7 +301,7 @@ static int full_proxy_open(struct inode *inode, struct file *filp)
3222
3223 real_fops = debugfs_real_fops(filp);
3224
3225 - r = debugfs_is_locked_down(inode, filp, real_fops);
3226 + r = debugfs_locked_down(inode, filp, real_fops);
3227 if (r)
3228 goto out;
3229
3230 diff --git a/include/linux/platform_data/ti-sysc.h b/include/linux/platform_data/ti-sysc.h
3231 index b5b7a3423ca8..8cfe570fdece 100644
3232 --- a/include/linux/platform_data/ti-sysc.h
3233 +++ b/include/linux/platform_data/ti-sysc.h
3234 @@ -49,6 +49,8 @@ struct sysc_regbits {
3235 s8 emufree_shift;
3236 };
3237
3238 +#define SYSC_QUIRK_FORCE_MSTANDBY BIT(20)
3239 +#define SYSC_MODULE_QUIRK_AESS BIT(19)
3240 #define SYSC_MODULE_QUIRK_SGX BIT(18)
3241 #define SYSC_MODULE_QUIRK_HDQ1W BIT(17)
3242 #define SYSC_MODULE_QUIRK_I2C BIT(16)
3243 diff --git a/include/linux/power/smartreflex.h b/include/linux/power/smartreflex.h
3244 index d0b37e937037..971c9264179e 100644
3245 --- a/include/linux/power/smartreflex.h
3246 +++ b/include/linux/power/smartreflex.h
3247 @@ -293,6 +293,9 @@ struct omap_sr_data {
3248 struct voltagedomain *voltdm;
3249 };
3250
3251 +
3252 +extern struct omap_sr_data omap_sr_pdata[OMAP_SR_NR];
3253 +
3254 #ifdef CONFIG_POWER_AVS_OMAP
3255
3256 /* Smartreflex module enable/disable interface */
3257 diff --git a/include/linux/usb/irda.h b/include/linux/usb/irda.h
3258 index 396d2b043e64..556a801efce3 100644
3259 --- a/include/linux/usb/irda.h
3260 +++ b/include/linux/usb/irda.h
3261 @@ -119,11 +119,22 @@ struct usb_irda_cs_descriptor {
3262 * 6 - 115200 bps
3263 * 7 - 576000 bps
3264 * 8 - 1.152 Mbps
3265 - * 9 - 5 mbps
3266 + * 9 - 4 Mbps
3267 * 10..15 - Reserved
3268 */
3269 #define USB_IRDA_STATUS_LINK_SPEED 0x0f
3270
3271 +#define USB_IRDA_LS_NO_CHANGE 0
3272 +#define USB_IRDA_LS_2400 1
3273 +#define USB_IRDA_LS_9600 2
3274 +#define USB_IRDA_LS_19200 3
3275 +#define USB_IRDA_LS_38400 4
3276 +#define USB_IRDA_LS_57600 5
3277 +#define USB_IRDA_LS_115200 6
3278 +#define USB_IRDA_LS_576000 7
3279 +#define USB_IRDA_LS_1152000 8
3280 +#define USB_IRDA_LS_4000000 9
3281 +
3282 /* The following is a 4-bit value used only for
3283 * outbound header:
3284 *
3285 diff --git a/include/media/dvb-usb-ids.h b/include/media/dvb-usb-ids.h
3286 index 7ce4e8332421..1409230ad3a4 100644
3287 --- a/include/media/dvb-usb-ids.h
3288 +++ b/include/media/dvb-usb-ids.h
3289 @@ -389,6 +389,7 @@
3290 #define USB_PID_MYGICA_T230 0xc688
3291 #define USB_PID_MYGICA_T230C 0xc689
3292 #define USB_PID_MYGICA_T230C2 0xc68a
3293 +#define USB_PID_MYGICA_T230C_LITE 0xc699
3294 #define USB_PID_ELGATO_EYETV_DIVERSITY 0x0011
3295 #define USB_PID_ELGATO_EYETV_DTT 0x0021
3296 #define USB_PID_ELGATO_EYETV_DTT_2 0x003f
3297 diff --git a/include/net/pkt_cls.h b/include/net/pkt_cls.h
3298 index e553fc80eb23..9976ad2f54fd 100644
3299 --- a/include/net/pkt_cls.h
3300 +++ b/include/net/pkt_cls.h
3301 @@ -141,31 +141,38 @@ __cls_set_class(unsigned long *clp, unsigned long cl)
3302 return xchg(clp, cl);
3303 }
3304
3305 -static inline unsigned long
3306 -cls_set_class(struct Qdisc *q, unsigned long *clp, unsigned long cl)
3307 +static inline void
3308 +__tcf_bind_filter(struct Qdisc *q, struct tcf_result *r, unsigned long base)
3309 {
3310 - unsigned long old_cl;
3311 + unsigned long cl;
3312
3313 - sch_tree_lock(q);
3314 - old_cl = __cls_set_class(clp, cl);
3315 - sch_tree_unlock(q);
3316 - return old_cl;
3317 + cl = q->ops->cl_ops->bind_tcf(q, base, r->classid);
3318 + cl = __cls_set_class(&r->class, cl);
3319 + if (cl)
3320 + q->ops->cl_ops->unbind_tcf(q, cl);
3321 }
3322
3323 static inline void
3324 tcf_bind_filter(struct tcf_proto *tp, struct tcf_result *r, unsigned long base)
3325 {
3326 struct Qdisc *q = tp->chain->block->q;
3327 - unsigned long cl;
3328
3329 /* Check q as it is not set for shared blocks. In that case,
3330 * setting class is not supported.
3331 */
3332 if (!q)
3333 return;
3334 - cl = q->ops->cl_ops->bind_tcf(q, base, r->classid);
3335 - cl = cls_set_class(q, &r->class, cl);
3336 - if (cl)
3337 + sch_tree_lock(q);
3338 + __tcf_bind_filter(q, r, base);
3339 + sch_tree_unlock(q);
3340 +}
3341 +
3342 +static inline void
3343 +__tcf_unbind_filter(struct Qdisc *q, struct tcf_result *r)
3344 +{
3345 + unsigned long cl;
3346 +
3347 + if ((cl = __cls_set_class(&r->class, 0)) != 0)
3348 q->ops->cl_ops->unbind_tcf(q, cl);
3349 }
3350
3351 @@ -173,12 +180,10 @@ static inline void
3352 tcf_unbind_filter(struct tcf_proto *tp, struct tcf_result *r)
3353 {
3354 struct Qdisc *q = tp->chain->block->q;
3355 - unsigned long cl;
3356
3357 if (!q)
3358 return;
3359 - if ((cl = __cls_set_class(&r->class, 0)) != 0)
3360 - q->ops->cl_ops->unbind_tcf(q, cl);
3361 + __tcf_unbind_filter(q, r);
3362 }
3363
3364 struct tcf_exts {
3365 diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
3366 index 32e418dba133..d334e4609dd4 100644
3367 --- a/include/net/sch_generic.h
3368 +++ b/include/net/sch_generic.h
3369 @@ -318,7 +318,8 @@ struct tcf_proto_ops {
3370 void *type_data);
3371 void (*hw_del)(struct tcf_proto *tp,
3372 void *type_data);
3373 - void (*bind_class)(void *, u32, unsigned long);
3374 + void (*bind_class)(void *, u32, unsigned long,
3375 + void *, unsigned long);
3376 void * (*tmplt_create)(struct net *net,
3377 struct tcf_chain *chain,
3378 struct nlattr **tca,
3379 diff --git a/include/net/udp.h b/include/net/udp.h
3380 index bad74f780831..8f163d674f07 100644
3381 --- a/include/net/udp.h
3382 +++ b/include/net/udp.h
3383 @@ -476,6 +476,9 @@ static inline struct sk_buff *udp_rcv_segment(struct sock *sk,
3384 if (!inet_get_convert_csum(sk))
3385 features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM;
3386
3387 + if (skb->pkt_type == PACKET_LOOPBACK)
3388 + skb->ip_summed = CHECKSUM_PARTIAL;
3389 +
3390 /* the GSO CB lays after the UDP one, no need to save and restore any
3391 * CB fragment
3392 */
3393 diff --git a/init/Kconfig b/init/Kconfig
3394 index b4daad2bac23..0328b53d09ad 100644
3395 --- a/init/Kconfig
3396 +++ b/init/Kconfig
3397 @@ -54,6 +54,7 @@ config CC_DISABLE_WARN_MAYBE_UNINITIALIZED
3398
3399 config CONSTRUCTORS
3400 bool
3401 + depends on !UML
3402
3403 config IRQ_WORK
3404 bool
3405 diff --git a/kernel/gcov/Kconfig b/kernel/gcov/Kconfig
3406 index 060e8e726755..3941a9c48f83 100644
3407 --- a/kernel/gcov/Kconfig
3408 +++ b/kernel/gcov/Kconfig
3409 @@ -4,7 +4,7 @@ menu "GCOV-based kernel profiling"
3410 config GCOV_KERNEL
3411 bool "Enable gcov-based kernel profiling"
3412 depends on DEBUG_FS
3413 - select CONSTRUCTORS
3414 + select CONSTRUCTORS if !UML
3415 default n
3416 ---help---
3417 This option enables gcov-based code profiling (e.g. for code coverage
3418 diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
3419 index 0cc9ce917222..9e19d5a3aac8 100644
3420 --- a/net/bluetooth/hci_core.c
3421 +++ b/net/bluetooth/hci_core.c
3422 @@ -1444,11 +1444,20 @@ static int hci_dev_do_open(struct hci_dev *hdev)
3423
3424 if (hci_dev_test_flag(hdev, HCI_SETUP) ||
3425 test_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks)) {
3426 + bool invalid_bdaddr;
3427 +
3428 hci_sock_dev_event(hdev, HCI_DEV_SETUP);
3429
3430 if (hdev->setup)
3431 ret = hdev->setup(hdev);
3432
3433 + /* The transport driver can set the quirk to mark the
3434 + * BD_ADDR invalid before creating the HCI device or in
3435 + * its setup callback.
3436 + */
3437 + invalid_bdaddr = test_bit(HCI_QUIRK_INVALID_BDADDR,
3438 + &hdev->quirks);
3439 +
3440 if (ret)
3441 goto setup_failed;
3442
3443 @@ -1457,20 +1466,33 @@ static int hci_dev_do_open(struct hci_dev *hdev)
3444 hci_dev_get_bd_addr_from_property(hdev);
3445
3446 if (bacmp(&hdev->public_addr, BDADDR_ANY) &&
3447 - hdev->set_bdaddr)
3448 + hdev->set_bdaddr) {
3449 ret = hdev->set_bdaddr(hdev,
3450 &hdev->public_addr);
3451 +
3452 + /* If setting of the BD_ADDR from the device
3453 + * property succeeds, then treat the address
3454 + * as valid even if the invalid BD_ADDR
3455 + * quirk indicates otherwise.
3456 + */
3457 + if (!ret)
3458 + invalid_bdaddr = false;
3459 + }
3460 }
3461
3462 setup_failed:
3463 /* The transport driver can set these quirks before
3464 * creating the HCI device or in its setup callback.
3465 *
3466 + * For the invalid BD_ADDR quirk it is possible that
3467 + * it becomes a valid address if the bootloader does
3468 + * provide it (see above).
3469 + *
3470 * In case any of them is set, the controller has to
3471 * start up as unconfigured.
3472 */
3473 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) ||
3474 - test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks))
3475 + invalid_bdaddr)
3476 hci_dev_set_flag(hdev, HCI_UNCONFIGURED);
3477
3478 /* For an unconfigured controller it is required to
3479 diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c
3480 index fc34fd1668d6..3737d32ad11a 100644
3481 --- a/net/ipv4/nexthop.c
3482 +++ b/net/ipv4/nexthop.c
3483 @@ -322,7 +322,9 @@ static size_t nh_nlmsg_size_single(struct nexthop *nh)
3484
3485 static size_t nh_nlmsg_size(struct nexthop *nh)
3486 {
3487 - size_t sz = nla_total_size(4); /* NHA_ID */
3488 + size_t sz = NLMSG_ALIGN(sizeof(struct nhmsg));
3489 +
3490 + sz += nla_total_size(4); /* NHA_ID */
3491
3492 if (nh->is_group)
3493 sz += nh_nlmsg_size_grp(nh);
3494 diff --git a/net/rxrpc/input.c b/net/rxrpc/input.c
3495 index 86bd133b4fa0..96d54e5bf7bc 100644
3496 --- a/net/rxrpc/input.c
3497 +++ b/net/rxrpc/input.c
3498 @@ -413,7 +413,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)
3499 {
3500 struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
3501 enum rxrpc_call_state state;
3502 - unsigned int j;
3503 + unsigned int j, nr_subpackets;
3504 rxrpc_serial_t serial = sp->hdr.serial, ack_serial = 0;
3505 rxrpc_seq_t seq0 = sp->hdr.seq, hard_ack;
3506 bool immediate_ack = false, jumbo_bad = false;
3507 @@ -457,7 +457,8 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)
3508 call->ackr_prev_seq = seq0;
3509 hard_ack = READ_ONCE(call->rx_hard_ack);
3510
3511 - if (sp->nr_subpackets > 1) {
3512 + nr_subpackets = sp->nr_subpackets;
3513 + if (nr_subpackets > 1) {
3514 if (call->nr_jumbo_bad > 3) {
3515 ack = RXRPC_ACK_NOSPACE;
3516 ack_serial = serial;
3517 @@ -465,11 +466,11 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)
3518 }
3519 }
3520
3521 - for (j = 0; j < sp->nr_subpackets; j++) {
3522 + for (j = 0; j < nr_subpackets; j++) {
3523 rxrpc_serial_t serial = sp->hdr.serial + j;
3524 rxrpc_seq_t seq = seq0 + j;
3525 unsigned int ix = seq & RXRPC_RXTX_BUFF_MASK;
3526 - bool terminal = (j == sp->nr_subpackets - 1);
3527 + bool terminal = (j == nr_subpackets - 1);
3528 bool last = terminal && (sp->rx_flags & RXRPC_SKB_INCL_LAST);
3529 u8 flags, annotation = j;
3530
3531 @@ -506,7 +507,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)
3532 }
3533
3534 if (call->rxtx_buffer[ix]) {
3535 - rxrpc_input_dup_data(call, seq, sp->nr_subpackets > 1,
3536 + rxrpc_input_dup_data(call, seq, nr_subpackets > 1,
3537 &jumbo_bad);
3538 if (ack != RXRPC_ACK_DUPLICATE) {
3539 ack = RXRPC_ACK_DUPLICATE;
3540 @@ -564,6 +565,7 @@ static void rxrpc_input_data(struct rxrpc_call *call, struct sk_buff *skb)
3541 * ring.
3542 */
3543 skb = NULL;
3544 + sp = NULL;
3545 }
3546
3547 if (last) {
3548 diff --git a/net/sched/cls_basic.c b/net/sched/cls_basic.c
3549 index 4aafbe3d435c..f256a7c69093 100644
3550 --- a/net/sched/cls_basic.c
3551 +++ b/net/sched/cls_basic.c
3552 @@ -263,12 +263,17 @@ skip:
3553 }
3554 }
3555
3556 -static void basic_bind_class(void *fh, u32 classid, unsigned long cl)
3557 +static void basic_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
3558 + unsigned long base)
3559 {
3560 struct basic_filter *f = fh;
3561
3562 - if (f && f->res.classid == classid)
3563 - f->res.class = cl;
3564 + if (f && f->res.classid == classid) {
3565 + if (cl)
3566 + __tcf_bind_filter(q, &f->res, base);
3567 + else
3568 + __tcf_unbind_filter(q, &f->res);
3569 + }
3570 }
3571
3572 static int basic_dump(struct net *net, struct tcf_proto *tp, void *fh,
3573 diff --git a/net/sched/cls_bpf.c b/net/sched/cls_bpf.c
3574 index 8229ed4a67be..6e3e63db0e01 100644
3575 --- a/net/sched/cls_bpf.c
3576 +++ b/net/sched/cls_bpf.c
3577 @@ -631,12 +631,17 @@ nla_put_failure:
3578 return -1;
3579 }
3580
3581 -static void cls_bpf_bind_class(void *fh, u32 classid, unsigned long cl)
3582 +static void cls_bpf_bind_class(void *fh, u32 classid, unsigned long cl,
3583 + void *q, unsigned long base)
3584 {
3585 struct cls_bpf_prog *prog = fh;
3586
3587 - if (prog && prog->res.classid == classid)
3588 - prog->res.class = cl;
3589 + if (prog && prog->res.classid == classid) {
3590 + if (cl)
3591 + __tcf_bind_filter(q, &prog->res, base);
3592 + else
3593 + __tcf_unbind_filter(q, &prog->res);
3594 + }
3595 }
3596
3597 static void cls_bpf_walk(struct tcf_proto *tp, struct tcf_walker *arg,
3598 diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c
3599 index 5cf8163710c8..7394e01c0c9c 100644
3600 --- a/net/sched/cls_flower.c
3601 +++ b/net/sched/cls_flower.c
3602 @@ -2511,12 +2511,17 @@ nla_put_failure:
3603 return -EMSGSIZE;
3604 }
3605
3606 -static void fl_bind_class(void *fh, u32 classid, unsigned long cl)
3607 +static void fl_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
3608 + unsigned long base)
3609 {
3610 struct cls_fl_filter *f = fh;
3611
3612 - if (f && f->res.classid == classid)
3613 - f->res.class = cl;
3614 + if (f && f->res.classid == classid) {
3615 + if (cl)
3616 + __tcf_bind_filter(q, &f->res, base);
3617 + else
3618 + __tcf_unbind_filter(q, &f->res);
3619 + }
3620 }
3621
3622 static bool fl_delete_empty(struct tcf_proto *tp)
3623 diff --git a/net/sched/cls_fw.c b/net/sched/cls_fw.c
3624 index c9496c920d6f..ec945294626a 100644
3625 --- a/net/sched/cls_fw.c
3626 +++ b/net/sched/cls_fw.c
3627 @@ -419,12 +419,17 @@ nla_put_failure:
3628 return -1;
3629 }
3630
3631 -static void fw_bind_class(void *fh, u32 classid, unsigned long cl)
3632 +static void fw_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
3633 + unsigned long base)
3634 {
3635 struct fw_filter *f = fh;
3636
3637 - if (f && f->res.classid == classid)
3638 - f->res.class = cl;
3639 + if (f && f->res.classid == classid) {
3640 + if (cl)
3641 + __tcf_bind_filter(q, &f->res, base);
3642 + else
3643 + __tcf_unbind_filter(q, &f->res);
3644 + }
3645 }
3646
3647 static struct tcf_proto_ops cls_fw_ops __read_mostly = {
3648 diff --git a/net/sched/cls_matchall.c b/net/sched/cls_matchall.c
3649 index 7fc2eb62aa98..039cc86974f4 100644
3650 --- a/net/sched/cls_matchall.c
3651 +++ b/net/sched/cls_matchall.c
3652 @@ -393,12 +393,17 @@ nla_put_failure:
3653 return -1;
3654 }
3655
3656 -static void mall_bind_class(void *fh, u32 classid, unsigned long cl)
3657 +static void mall_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
3658 + unsigned long base)
3659 {
3660 struct cls_mall_head *head = fh;
3661
3662 - if (head && head->res.classid == classid)
3663 - head->res.class = cl;
3664 + if (head && head->res.classid == classid) {
3665 + if (cl)
3666 + __tcf_bind_filter(q, &head->res, base);
3667 + else
3668 + __tcf_unbind_filter(q, &head->res);
3669 + }
3670 }
3671
3672 static struct tcf_proto_ops cls_mall_ops __read_mostly = {
3673 diff --git a/net/sched/cls_route.c b/net/sched/cls_route.c
3674 index 2d9e0b4484ea..6f8786b06bde 100644
3675 --- a/net/sched/cls_route.c
3676 +++ b/net/sched/cls_route.c
3677 @@ -641,12 +641,17 @@ nla_put_failure:
3678 return -1;
3679 }
3680
3681 -static void route4_bind_class(void *fh, u32 classid, unsigned long cl)
3682 +static void route4_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
3683 + unsigned long base)
3684 {
3685 struct route4_filter *f = fh;
3686
3687 - if (f && f->res.classid == classid)
3688 - f->res.class = cl;
3689 + if (f && f->res.classid == classid) {
3690 + if (cl)
3691 + __tcf_bind_filter(q, &f->res, base);
3692 + else
3693 + __tcf_unbind_filter(q, &f->res);
3694 + }
3695 }
3696
3697 static struct tcf_proto_ops cls_route4_ops __read_mostly = {
3698 diff --git a/net/sched/cls_rsvp.h b/net/sched/cls_rsvp.h
3699 index 2f3c03b25d5d..c22624131949 100644
3700 --- a/net/sched/cls_rsvp.h
3701 +++ b/net/sched/cls_rsvp.h
3702 @@ -738,12 +738,17 @@ nla_put_failure:
3703 return -1;
3704 }
3705
3706 -static void rsvp_bind_class(void *fh, u32 classid, unsigned long cl)
3707 +static void rsvp_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
3708 + unsigned long base)
3709 {
3710 struct rsvp_filter *f = fh;
3711
3712 - if (f && f->res.classid == classid)
3713 - f->res.class = cl;
3714 + if (f && f->res.classid == classid) {
3715 + if (cl)
3716 + __tcf_bind_filter(q, &f->res, base);
3717 + else
3718 + __tcf_unbind_filter(q, &f->res);
3719 + }
3720 }
3721
3722 static struct tcf_proto_ops RSVP_OPS __read_mostly = {
3723 diff --git a/net/sched/cls_tcindex.c b/net/sched/cls_tcindex.c
3724 index e573e5a5c794..3d4a1280352f 100644
3725 --- a/net/sched/cls_tcindex.c
3726 +++ b/net/sched/cls_tcindex.c
3727 @@ -654,12 +654,17 @@ nla_put_failure:
3728 return -1;
3729 }
3730
3731 -static void tcindex_bind_class(void *fh, u32 classid, unsigned long cl)
3732 +static void tcindex_bind_class(void *fh, u32 classid, unsigned long cl,
3733 + void *q, unsigned long base)
3734 {
3735 struct tcindex_filter_result *r = fh;
3736
3737 - if (r && r->res.classid == classid)
3738 - r->res.class = cl;
3739 + if (r && r->res.classid == classid) {
3740 + if (cl)
3741 + __tcf_bind_filter(q, &r->res, base);
3742 + else
3743 + __tcf_unbind_filter(q, &r->res);
3744 + }
3745 }
3746
3747 static struct tcf_proto_ops cls_tcindex_ops __read_mostly = {
3748 diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c
3749 index a0e6fac613de..e15ff335953d 100644
3750 --- a/net/sched/cls_u32.c
3751 +++ b/net/sched/cls_u32.c
3752 @@ -1255,12 +1255,17 @@ static int u32_reoffload(struct tcf_proto *tp, bool add, flow_setup_cb_t *cb,
3753 return 0;
3754 }
3755
3756 -static void u32_bind_class(void *fh, u32 classid, unsigned long cl)
3757 +static void u32_bind_class(void *fh, u32 classid, unsigned long cl, void *q,
3758 + unsigned long base)
3759 {
3760 struct tc_u_knode *n = fh;
3761
3762 - if (n && n->res.classid == classid)
3763 - n->res.class = cl;
3764 + if (n && n->res.classid == classid) {
3765 + if (cl)
3766 + __tcf_bind_filter(q, &n->res, base);
3767 + else
3768 + __tcf_unbind_filter(q, &n->res);
3769 + }
3770 }
3771
3772 static int u32_dump(struct net *net, struct tcf_proto *tp, void *fh,
3773 diff --git a/net/sched/ematch.c b/net/sched/ematch.c
3774 index d0140a92694a..dd3b8c11a2e0 100644
3775 --- a/net/sched/ematch.c
3776 +++ b/net/sched/ematch.c
3777 @@ -238,6 +238,9 @@ static int tcf_em_validate(struct tcf_proto *tp,
3778 goto errout;
3779
3780 if (em->ops->change) {
3781 + err = -EINVAL;
3782 + if (em_hdr->flags & TCF_EM_SIMPLE)
3783 + goto errout;
3784 err = em->ops->change(net, data, data_len, em);
3785 if (err < 0)
3786 goto errout;
3787 diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
3788 index 1047825d9f48..50794125bf02 100644
3789 --- a/net/sched/sch_api.c
3790 +++ b/net/sched/sch_api.c
3791 @@ -1891,8 +1891,9 @@ static int tclass_del_notify(struct net *net,
3792
3793 struct tcf_bind_args {
3794 struct tcf_walker w;
3795 - u32 classid;
3796 + unsigned long base;
3797 unsigned long cl;
3798 + u32 classid;
3799 };
3800
3801 static int tcf_node_bind(struct tcf_proto *tp, void *n, struct tcf_walker *arg)
3802 @@ -1903,28 +1904,30 @@ static int tcf_node_bind(struct tcf_proto *tp, void *n, struct tcf_walker *arg)
3803 struct Qdisc *q = tcf_block_q(tp->chain->block);
3804
3805 sch_tree_lock(q);
3806 - tp->ops->bind_class(n, a->classid, a->cl);
3807 + tp->ops->bind_class(n, a->classid, a->cl, q, a->base);
3808 sch_tree_unlock(q);
3809 }
3810 return 0;
3811 }
3812
3813 -static void tc_bind_tclass(struct Qdisc *q, u32 portid, u32 clid,
3814 - unsigned long new_cl)
3815 +struct tc_bind_class_args {
3816 + struct qdisc_walker w;
3817 + unsigned long new_cl;
3818 + u32 portid;
3819 + u32 clid;
3820 +};
3821 +
3822 +static int tc_bind_class_walker(struct Qdisc *q, unsigned long cl,
3823 + struct qdisc_walker *w)
3824 {
3825 + struct tc_bind_class_args *a = (struct tc_bind_class_args *)w;
3826 const struct Qdisc_class_ops *cops = q->ops->cl_ops;
3827 struct tcf_block *block;
3828 struct tcf_chain *chain;
3829 - unsigned long cl;
3830
3831 - cl = cops->find(q, portid);
3832 - if (!cl)
3833 - return;
3834 - if (!cops->tcf_block)
3835 - return;
3836 block = cops->tcf_block(q, cl, NULL);
3837 if (!block)
3838 - return;
3839 + return 0;
3840 for (chain = tcf_get_next_chain(block, NULL);
3841 chain;
3842 chain = tcf_get_next_chain(block, chain)) {
3843 @@ -1935,11 +1938,29 @@ static void tc_bind_tclass(struct Qdisc *q, u32 portid, u32 clid,
3844 struct tcf_bind_args arg = {};
3845
3846 arg.w.fn = tcf_node_bind;
3847 - arg.classid = clid;
3848 - arg.cl = new_cl;
3849 + arg.classid = a->clid;
3850 + arg.base = cl;
3851 + arg.cl = a->new_cl;
3852 tp->ops->walk(tp, &arg.w, true);
3853 }
3854 }
3855 +
3856 + return 0;
3857 +}
3858 +
3859 +static void tc_bind_tclass(struct Qdisc *q, u32 portid, u32 clid,
3860 + unsigned long new_cl)
3861 +{
3862 + const struct Qdisc_class_ops *cops = q->ops->cl_ops;
3863 + struct tc_bind_class_args args = {};
3864 +
3865 + if (!cops->tcf_block)
3866 + return;
3867 + args.portid = portid;
3868 + args.clid = clid;
3869 + args.new_cl = new_cl;
3870 + args.w.fn = tc_bind_class_walker;
3871 + q->ops->cl_ops->walk(q, &args.w);
3872 }
3873
3874 #else
3875 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
3876 index d293488dc3dd..68832f52c1ad 100644
3877 --- a/sound/pci/hda/patch_realtek.c
3878 +++ b/sound/pci/hda/patch_realtek.c
3879 @@ -7563,20 +7563,6 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
3880 {0x19, 0x02a11020},
3881 {0x1a, 0x02a11030},
3882 {0x21, 0x0221101f}),
3883 - SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
3884 - {0x12, 0x90a60140},
3885 - {0x14, 0x90170110},
3886 - {0x21, 0x02211020}),
3887 - SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
3888 - {0x12, 0x90a60140},
3889 - {0x14, 0x90170150},
3890 - {0x21, 0x02211020}),
3891 - SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
3892 - {0x21, 0x02211020}),
3893 - SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
3894 - {0x12, 0x40000000},
3895 - {0x14, 0x90170110},
3896 - {0x21, 0x02211020}),
3897 SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL2_MIC_NO_PRESENCE,
3898 {0x14, 0x90170110},
3899 {0x21, 0x02211020}),
3900 @@ -7901,6 +7887,9 @@ static const struct snd_hda_pin_quirk alc269_fallback_pin_fixup_tbl[] = {
3901 SND_HDA_PIN_QUIRK(0x10ec0274, 0x1028, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB,
3902 {0x19, 0x40000000},
3903 {0x1a, 0x40000000}),
3904 + SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
3905 + {0x19, 0x40000000},
3906 + {0x1a, 0x40000000}),
3907 {}
3908 };
3909
3910 diff --git a/sound/soc/fsl/fsl_audmix.c b/sound/soc/fsl/fsl_audmix.c
3911 index a1db1bce330f..5faecbeb5497 100644
3912 --- a/sound/soc/fsl/fsl_audmix.c
3913 +++ b/sound/soc/fsl/fsl_audmix.c
3914 @@ -505,15 +505,20 @@ static int fsl_audmix_probe(struct platform_device *pdev)
3915 ARRAY_SIZE(fsl_audmix_dai));
3916 if (ret) {
3917 dev_err(dev, "failed to register ASoC DAI\n");
3918 - return ret;
3919 + goto err_disable_pm;
3920 }
3921
3922 priv->pdev = platform_device_register_data(dev, mdrv, 0, NULL, 0);
3923 if (IS_ERR(priv->pdev)) {
3924 ret = PTR_ERR(priv->pdev);
3925 dev_err(dev, "failed to register platform %s: %d\n", mdrv, ret);
3926 + goto err_disable_pm;
3927 }
3928
3929 + return 0;
3930 +
3931 +err_disable_pm:
3932 + pm_runtime_disable(dev);
3933 return ret;
3934 }
3935
3936 @@ -521,6 +526,8 @@ static int fsl_audmix_remove(struct platform_device *pdev)
3937 {
3938 struct fsl_audmix *priv = dev_get_drvdata(&pdev->dev);
3939
3940 + pm_runtime_disable(&pdev->dev);
3941 +
3942 if (priv->pdev)
3943 platform_device_unregister(priv->pdev);
3944
3945 diff --git a/sound/soc/intel/boards/cht_bsw_rt5645.c b/sound/soc/intel/boards/cht_bsw_rt5645.c
3946 index 8879c3be29d5..c68a5b85a4a0 100644
3947 --- a/sound/soc/intel/boards/cht_bsw_rt5645.c
3948 +++ b/sound/soc/intel/boards/cht_bsw_rt5645.c
3949 @@ -48,6 +48,7 @@ struct cht_mc_private {
3950 #define CHT_RT5645_SSP2_AIF2 BIT(16) /* default is using AIF1 */
3951 #define CHT_RT5645_SSP0_AIF1 BIT(17)
3952 #define CHT_RT5645_SSP0_AIF2 BIT(18)
3953 +#define CHT_RT5645_PMC_PLT_CLK_0 BIT(19)
3954
3955 static unsigned long cht_rt5645_quirk = 0;
3956
3957 @@ -59,6 +60,8 @@ static void log_quirks(struct device *dev)
3958 dev_info(dev, "quirk SSP0_AIF1 enabled");
3959 if (cht_rt5645_quirk & CHT_RT5645_SSP0_AIF2)
3960 dev_info(dev, "quirk SSP0_AIF2 enabled");
3961 + if (cht_rt5645_quirk & CHT_RT5645_PMC_PLT_CLK_0)
3962 + dev_info(dev, "quirk PMC_PLT_CLK_0 enabled");
3963 }
3964
3965 static int platform_clock_control(struct snd_soc_dapm_widget *w,
3966 @@ -226,15 +229,21 @@ static int cht_aif1_hw_params(struct snd_pcm_substream *substream,
3967 return 0;
3968 }
3969
3970 -/* uncomment when we have a real quirk
3971 static int cht_rt5645_quirk_cb(const struct dmi_system_id *id)
3972 {
3973 cht_rt5645_quirk = (unsigned long)id->driver_data;
3974 return 1;
3975 }
3976 -*/
3977
3978 static const struct dmi_system_id cht_rt5645_quirk_table[] = {
3979 + {
3980 + /* Strago family Chromebooks */
3981 + .callback = cht_rt5645_quirk_cb,
3982 + .matches = {
3983 + DMI_MATCH(DMI_PRODUCT_FAMILY, "Intel_Strago"),
3984 + },
3985 + .driver_data = (void *)CHT_RT5645_PMC_PLT_CLK_0,
3986 + },
3987 {
3988 },
3989 };
3990 @@ -526,6 +535,7 @@ static int snd_cht_mc_probe(struct platform_device *pdev)
3991 int dai_index = 0;
3992 int ret_val = 0;
3993 int i;
3994 + const char *mclk_name;
3995
3996 drv = devm_kzalloc(&pdev->dev, sizeof(*drv), GFP_KERNEL);
3997 if (!drv)
3998 @@ -662,11 +672,15 @@ static int snd_cht_mc_probe(struct platform_device *pdev)
3999 if (ret_val)
4000 return ret_val;
4001
4002 - drv->mclk = devm_clk_get(&pdev->dev, "pmc_plt_clk_3");
4003 + if (cht_rt5645_quirk & CHT_RT5645_PMC_PLT_CLK_0)
4004 + mclk_name = "pmc_plt_clk_0";
4005 + else
4006 + mclk_name = "pmc_plt_clk_3";
4007 +
4008 + drv->mclk = devm_clk_get(&pdev->dev, mclk_name);
4009 if (IS_ERR(drv->mclk)) {
4010 - dev_err(&pdev->dev,
4011 - "Failed to get MCLK from pmc_plt_clk_3: %ld\n",
4012 - PTR_ERR(drv->mclk));
4013 + dev_err(&pdev->dev, "Failed to get MCLK from %s: %ld\n",
4014 + mclk_name, PTR_ERR(drv->mclk));
4015 return PTR_ERR(drv->mclk);
4016 }
4017
4018 diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
4019 index fd2d22ddc81b..7ccbca47240d 100644
4020 --- a/sound/soc/soc-topology.c
4021 +++ b/sound/soc/soc-topology.c
4022 @@ -548,12 +548,12 @@ static void remove_link(struct snd_soc_component *comp,
4023 if (dobj->ops && dobj->ops->link_unload)
4024 dobj->ops->link_unload(comp, dobj);
4025
4026 + list_del(&dobj->list);
4027 + snd_soc_remove_dai_link(comp->card, link);
4028 +
4029 kfree(link->name);
4030 kfree(link->stream_name);
4031 kfree(link->cpus->dai_name);
4032 -
4033 - list_del(&dobj->list);
4034 - snd_soc_remove_dai_link(comp->card, link);
4035 kfree(link);
4036 }
4037
4038 diff --git a/sound/soc/sof/intel/hda-dai.c b/sound/soc/sof/intel/hda-dai.c
4039 index 8796f385be76..896d21984b73 100644
4040 --- a/sound/soc/sof/intel/hda-dai.c
4041 +++ b/sound/soc/sof/intel/hda-dai.c
4042 @@ -216,6 +216,8 @@ static int hda_link_hw_params(struct snd_pcm_substream *substream,
4043 link_dev = hda_link_stream_assign(bus, substream);
4044 if (!link_dev)
4045 return -EBUSY;
4046 +
4047 + snd_soc_dai_set_dma_data(dai, substream, (void *)link_dev);
4048 }
4049
4050 stream_tag = hdac_stream(link_dev)->stream_tag;
4051 @@ -228,8 +230,6 @@ static int hda_link_hw_params(struct snd_pcm_substream *substream,
4052 if (ret < 0)
4053 return ret;
4054
4055 - snd_soc_dai_set_dma_data(dai, substream, (void *)link_dev);
4056 -
4057 link = snd_hdac_ext_bus_get_link(bus, codec_dai->component->name);
4058 if (!link)
4059 return -EINVAL;
4060 @@ -361,6 +361,13 @@ static int hda_link_hw_free(struct snd_pcm_substream *substream,
4061 bus = hstream->bus;
4062 rtd = snd_pcm_substream_chip(substream);
4063 link_dev = snd_soc_dai_get_dma_data(dai, substream);
4064 +
4065 + if (!link_dev) {
4066 + dev_dbg(dai->dev,
4067 + "%s: link_dev is not assigned\n", __func__);
4068 + return -EINVAL;
4069 + }
4070 +
4071 hda_stream = hstream_to_sof_hda_stream(link_dev);
4072
4073 /* free the link DMA channel in the FW */
4074 diff --git a/sound/soc/sof/ipc.c b/sound/soc/sof/ipc.c
4075 index 086eeeab8679..7b6d69783e16 100644
4076 --- a/sound/soc/sof/ipc.c
4077 +++ b/sound/soc/sof/ipc.c
4078 @@ -834,6 +834,9 @@ void snd_sof_ipc_free(struct snd_sof_dev *sdev)
4079 {
4080 struct snd_sof_ipc *ipc = sdev->ipc;
4081
4082 + if (!ipc)
4083 + return;
4084 +
4085 /* disable sending of ipc's */
4086 mutex_lock(&ipc->tx_mutex);
4087 ipc->disable_ipc_tx = true;
4088 diff --git a/tools/testing/selftests/bpf/bpf_helpers.h b/tools/testing/selftests/bpf/bpf_helpers.h
4089 index 54a50699bbfd..9f77cbaac01c 100644
4090 --- a/tools/testing/selftests/bpf/bpf_helpers.h
4091 +++ b/tools/testing/selftests/bpf/bpf_helpers.h
4092 @@ -3,7 +3,7 @@
4093 #define __BPF_HELPERS__
4094
4095 #define __uint(name, val) int (*name)[val]
4096 -#define __type(name, val) val *name
4097 +#define __type(name, val) typeof(val) *name
4098
4099 /* helper macro to print out debug messages */
4100 #define bpf_printk(fmt, ...) \
4101 diff --git a/tools/testing/selftests/bpf/progs/test_get_stack_rawtp.c b/tools/testing/selftests/bpf/progs/test_get_stack_rawtp.c
4102 index f8ffa3f3d44b..6cc4479ac9df 100644
4103 --- a/tools/testing/selftests/bpf/progs/test_get_stack_rawtp.c
4104 +++ b/tools/testing/selftests/bpf/progs/test_get_stack_rawtp.c
4105 @@ -47,12 +47,11 @@ struct {
4106 * issue and avoid complicated C programming massaging.
4107 * This is an acceptable workaround since there is one entry here.
4108 */
4109 -typedef __u64 raw_stack_trace_t[2 * MAX_STACK_RAWTP];
4110 struct {
4111 __uint(type, BPF_MAP_TYPE_PERCPU_ARRAY);
4112 __uint(max_entries, 1);
4113 __type(key, __u32);
4114 - __type(value, raw_stack_trace_t);
4115 + __type(value, __u64[2 * MAX_STACK_RAWTP]);
4116 } rawdata_map SEC(".maps");
4117
4118 SEC("raw_tracepoint/sys_enter")