Annotation of /trunk/kernel-alx/patches-5.4/0254-5.4.155-all-fixes.patch
Parent Directory | Revision Log
Revision 3635 -
(hide annotations)
(download)
Mon Oct 24 12:34:12 2022 UTC (19 months, 3 weeks ago) by niro
File size: 58144 byte(s)
Mon Oct 24 12:34:12 2022 UTC (19 months, 3 weeks ago) by niro
File size: 58144 byte(s)
-sync kernel patches
1 | niro | 3635 | diff --git a/Makefile b/Makefile |
2 | index 3358f56a37f06..f7e2bf924463b 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 = 154 | ||
10 | +SUBLEVEL = 155 | ||
11 | EXTRAVERSION = | ||
12 | NAME = Kleptomaniac Octopus | ||
13 | |||
14 | diff --git a/arch/csky/kernel/ptrace.c b/arch/csky/kernel/ptrace.c | ||
15 | index 313623a19ecbf..885194720fe0b 100644 | ||
16 | --- a/arch/csky/kernel/ptrace.c | ||
17 | +++ b/arch/csky/kernel/ptrace.c | ||
18 | @@ -96,7 +96,8 @@ static int gpr_set(struct task_struct *target, | ||
19 | if (ret) | ||
20 | return ret; | ||
21 | |||
22 | - regs.sr = task_pt_regs(target)->sr; | ||
23 | + /* BIT(0) of regs.sr is Condition Code/Carry bit */ | ||
24 | + regs.sr = (regs.sr & BIT(0)) | (task_pt_regs(target)->sr & ~BIT(0)); | ||
25 | #ifdef CONFIG_CPU_HAS_HILO | ||
26 | regs.dcsr = task_pt_regs(target)->dcsr; | ||
27 | #endif | ||
28 | diff --git a/arch/csky/kernel/signal.c b/arch/csky/kernel/signal.c | ||
29 | index 9b1b7c039ddf9..63c2bbe39d03b 100644 | ||
30 | --- a/arch/csky/kernel/signal.c | ||
31 | +++ b/arch/csky/kernel/signal.c | ||
32 | @@ -52,10 +52,14 @@ static long restore_sigcontext(struct pt_regs *regs, | ||
33 | struct sigcontext __user *sc) | ||
34 | { | ||
35 | int err = 0; | ||
36 | + unsigned long sr = regs->sr; | ||
37 | |||
38 | /* sc_pt_regs is structured the same as the start of pt_regs */ | ||
39 | err |= __copy_from_user(regs, &sc->sc_pt_regs, sizeof(struct pt_regs)); | ||
40 | |||
41 | + /* BIT(0) of regs->sr is Condition Code/Carry bit */ | ||
42 | + regs->sr = (sr & ~1) | (regs->sr & 1); | ||
43 | + | ||
44 | /* Restore the floating-point state. */ | ||
45 | err |= restore_fpu_state(sc); | ||
46 | |||
47 | diff --git a/arch/powerpc/sysdev/xive/common.c b/arch/powerpc/sysdev/xive/common.c | ||
48 | index 2d4c09a77910f..d4467da279668 100644 | ||
49 | --- a/arch/powerpc/sysdev/xive/common.c | ||
50 | +++ b/arch/powerpc/sysdev/xive/common.c | ||
51 | @@ -990,7 +990,8 @@ static int xive_get_irqchip_state(struct irq_data *data, | ||
52 | * interrupt to be inactive in that case. | ||
53 | */ | ||
54 | *state = (pq != XIVE_ESB_INVALID) && !xd->stale_p && | ||
55 | - (xd->saved_p || !!(pq & XIVE_ESB_VAL_P)); | ||
56 | + (xd->saved_p || (!!(pq & XIVE_ESB_VAL_P) && | ||
57 | + !irqd_irq_disabled(data))); | ||
58 | return 0; | ||
59 | default: | ||
60 | return -EINVAL; | ||
61 | diff --git a/arch/s390/lib/string.c b/arch/s390/lib/string.c | ||
62 | index 0e30e6e43b0c5..18fbbb679851d 100644 | ||
63 | --- a/arch/s390/lib/string.c | ||
64 | +++ b/arch/s390/lib/string.c | ||
65 | @@ -246,14 +246,13 @@ EXPORT_SYMBOL(strcmp); | ||
66 | #ifdef __HAVE_ARCH_STRRCHR | ||
67 | char *strrchr(const char *s, int c) | ||
68 | { | ||
69 | - size_t len = __strend(s) - s; | ||
70 | - | ||
71 | - if (len) | ||
72 | - do { | ||
73 | - if (s[len] == (char) c) | ||
74 | - return (char *) s + len; | ||
75 | - } while (--len > 0); | ||
76 | - return NULL; | ||
77 | + ssize_t len = __strend(s) - s; | ||
78 | + | ||
79 | + do { | ||
80 | + if (s[len] == (char)c) | ||
81 | + return (char *)s + len; | ||
82 | + } while (--len >= 0); | ||
83 | + return NULL; | ||
84 | } | ||
85 | EXPORT_SYMBOL(strrchr); | ||
86 | #endif | ||
87 | diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig | ||
88 | index 8c1590432e866..c2a3ec3dd8506 100644 | ||
89 | --- a/arch/x86/Kconfig | ||
90 | +++ b/arch/x86/Kconfig | ||
91 | @@ -1541,7 +1541,6 @@ config AMD_MEM_ENCRYPT | ||
92 | |||
93 | config AMD_MEM_ENCRYPT_ACTIVE_BY_DEFAULT | ||
94 | bool "Activate AMD Secure Memory Encryption (SME) by default" | ||
95 | - default y | ||
96 | depends on AMD_MEM_ENCRYPT | ||
97 | ---help--- | ||
98 | Say yes to have system memory encrypted by default if running on | ||
99 | diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resctrl/core.c | ||
100 | index 87a34b6e06a2b..130c3c7f56d4b 100644 | ||
101 | --- a/arch/x86/kernel/cpu/resctrl/core.c | ||
102 | +++ b/arch/x86/kernel/cpu/resctrl/core.c | ||
103 | @@ -588,6 +588,8 @@ static void domain_add_cpu(int cpu, struct rdt_resource *r) | ||
104 | } | ||
105 | |||
106 | if (r->mon_capable && domain_setup_mon_state(r, d)) { | ||
107 | + kfree(d->ctrl_val); | ||
108 | + kfree(d->mbps_val); | ||
109 | kfree(d); | ||
110 | return; | ||
111 | } | ||
112 | diff --git a/drivers/acpi/arm64/gtdt.c b/drivers/acpi/arm64/gtdt.c | ||
113 | index 7d7497b856020..311419d1d6b05 100644 | ||
114 | --- a/drivers/acpi/arm64/gtdt.c | ||
115 | +++ b/drivers/acpi/arm64/gtdt.c | ||
116 | @@ -36,7 +36,7 @@ struct acpi_gtdt_descriptor { | ||
117 | |||
118 | static struct acpi_gtdt_descriptor acpi_gtdt_desc __initdata; | ||
119 | |||
120 | -static inline void *next_platform_timer(void *platform_timer) | ||
121 | +static inline __init void *next_platform_timer(void *platform_timer) | ||
122 | { | ||
123 | struct acpi_gtdt_header *gh = platform_timer; | ||
124 | |||
125 | diff --git a/drivers/ata/libahci_platform.c b/drivers/ata/libahci_platform.c | ||
126 | index 416cfbf2f1c29..8a963d2a951db 100644 | ||
127 | --- a/drivers/ata/libahci_platform.c | ||
128 | +++ b/drivers/ata/libahci_platform.c | ||
129 | @@ -440,10 +440,7 @@ struct ahci_host_priv *ahci_platform_get_resources(struct platform_device *pdev, | ||
130 | hpriv->phy_regulator = devm_regulator_get(dev, "phy"); | ||
131 | if (IS_ERR(hpriv->phy_regulator)) { | ||
132 | rc = PTR_ERR(hpriv->phy_regulator); | ||
133 | - if (rc == -EPROBE_DEFER) | ||
134 | - goto err_out; | ||
135 | - rc = 0; | ||
136 | - hpriv->phy_regulator = NULL; | ||
137 | + goto err_out; | ||
138 | } | ||
139 | |||
140 | if (flags & AHCI_PLATFORM_GET_RESETS) { | ||
141 | diff --git a/drivers/ata/pata_legacy.c b/drivers/ata/pata_legacy.c | ||
142 | index 4fd12b20df239..d91ba47f2fc44 100644 | ||
143 | --- a/drivers/ata/pata_legacy.c | ||
144 | +++ b/drivers/ata/pata_legacy.c | ||
145 | @@ -315,7 +315,8 @@ static unsigned int pdc_data_xfer_vlb(struct ata_queued_cmd *qc, | ||
146 | iowrite32_rep(ap->ioaddr.data_addr, buf, buflen >> 2); | ||
147 | |||
148 | if (unlikely(slop)) { | ||
149 | - __le32 pad; | ||
150 | + __le32 pad = 0; | ||
151 | + | ||
152 | if (rw == READ) { | ||
153 | pad = cpu_to_le32(ioread32(ap->ioaddr.data_addr)); | ||
154 | memcpy(buf + buflen - slop, &pad, slop); | ||
155 | @@ -705,7 +706,8 @@ static unsigned int vlb32_data_xfer(struct ata_queued_cmd *qc, | ||
156 | ioread32_rep(ap->ioaddr.data_addr, buf, buflen >> 2); | ||
157 | |||
158 | if (unlikely(slop)) { | ||
159 | - __le32 pad; | ||
160 | + __le32 pad = 0; | ||
161 | + | ||
162 | if (rw == WRITE) { | ||
163 | memcpy(&pad, buf + buflen - slop, slop); | ||
164 | iowrite32(le32_to_cpu(pad), ap->ioaddr.data_addr); | ||
165 | diff --git a/drivers/edac/armada_xp_edac.c b/drivers/edac/armada_xp_edac.c | ||
166 | index 7f227bdcbc845..8c63447154730 100644 | ||
167 | --- a/drivers/edac/armada_xp_edac.c | ||
168 | +++ b/drivers/edac/armada_xp_edac.c | ||
169 | @@ -178,7 +178,7 @@ static void axp_mc_check(struct mem_ctl_info *mci) | ||
170 | "details unavailable (multiple errors)"); | ||
171 | if (cnt_dbe) | ||
172 | edac_mc_handle_error(HW_EVENT_ERR_UNCORRECTED, mci, | ||
173 | - cnt_sbe, /* error count */ | ||
174 | + cnt_dbe, /* error count */ | ||
175 | 0, 0, 0, /* pfn, offset, syndrome */ | ||
176 | -1, -1, -1, /* top, mid, low layer */ | ||
177 | mci->ctl_name, | ||
178 | diff --git a/drivers/firmware/efi/cper.c b/drivers/firmware/efi/cper.c | ||
179 | index e48298687b76d..6157038114a2a 100644 | ||
180 | --- a/drivers/firmware/efi/cper.c | ||
181 | +++ b/drivers/firmware/efi/cper.c | ||
182 | @@ -25,8 +25,6 @@ | ||
183 | #include <acpi/ghes.h> | ||
184 | #include <ras/ras_event.h> | ||
185 | |||
186 | -static char rcd_decode_str[CPER_REC_LEN]; | ||
187 | - | ||
188 | /* | ||
189 | * CPER record ID need to be unique even after reboot, because record | ||
190 | * ID is used as index for ERST storage, while CPER records from | ||
191 | @@ -299,6 +297,7 @@ const char *cper_mem_err_unpack(struct trace_seq *p, | ||
192 | struct cper_mem_err_compact *cmem) | ||
193 | { | ||
194 | const char *ret = trace_seq_buffer_ptr(p); | ||
195 | + char rcd_decode_str[CPER_REC_LEN]; | ||
196 | |||
197 | if (cper_mem_err_location(cmem, rcd_decode_str)) | ||
198 | trace_seq_printf(p, "%s", rcd_decode_str); | ||
199 | @@ -313,6 +312,7 @@ static void cper_print_mem(const char *pfx, const struct cper_sec_mem_err *mem, | ||
200 | int len) | ||
201 | { | ||
202 | struct cper_mem_err_compact cmem; | ||
203 | + char rcd_decode_str[CPER_REC_LEN]; | ||
204 | |||
205 | /* Don't trust UEFI 2.1/2.2 structure with bad validation bits */ | ||
206 | if (len == sizeof(struct cper_sec_mem_err_old) && | ||
207 | diff --git a/drivers/firmware/efi/runtime-wrappers.c b/drivers/firmware/efi/runtime-wrappers.c | ||
208 | index 65fffaa222108..136b9c7f9ac95 100644 | ||
209 | --- a/drivers/firmware/efi/runtime-wrappers.c | ||
210 | +++ b/drivers/firmware/efi/runtime-wrappers.c | ||
211 | @@ -414,7 +414,7 @@ static void virt_efi_reset_system(int reset_type, | ||
212 | unsigned long data_size, | ||
213 | efi_char16_t *data) | ||
214 | { | ||
215 | - if (down_interruptible(&efi_runtime_lock)) { | ||
216 | + if (down_trylock(&efi_runtime_lock)) { | ||
217 | pr_warn("failed to invoke the reset_system() runtime service:\n" | ||
218 | "could not get exclusive access to the firmware\n"); | ||
219 | return; | ||
220 | diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c | ||
221 | index d9193ffa17a1e..54da66d02b0e5 100644 | ||
222 | --- a/drivers/gpio/gpio-pca953x.c | ||
223 | +++ b/drivers/gpio/gpio-pca953x.c | ||
224 | @@ -583,21 +583,21 @@ static int pca953x_gpio_set_pull_up_down(struct pca953x_chip *chip, | ||
225 | |||
226 | mutex_lock(&chip->i2c_lock); | ||
227 | |||
228 | - /* Disable pull-up/pull-down */ | ||
229 | - ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, 0); | ||
230 | - if (ret) | ||
231 | - goto exit; | ||
232 | - | ||
233 | /* Configure pull-up/pull-down */ | ||
234 | if (config == PIN_CONFIG_BIAS_PULL_UP) | ||
235 | ret = regmap_write_bits(chip->regmap, pull_sel_reg, bit, bit); | ||
236 | else if (config == PIN_CONFIG_BIAS_PULL_DOWN) | ||
237 | ret = regmap_write_bits(chip->regmap, pull_sel_reg, bit, 0); | ||
238 | + else | ||
239 | + ret = 0; | ||
240 | if (ret) | ||
241 | goto exit; | ||
242 | |||
243 | - /* Enable pull-up/pull-down */ | ||
244 | - ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, bit); | ||
245 | + /* Disable/Enable pull-up/pull-down */ | ||
246 | + if (config == PIN_CONFIG_BIAS_DISABLE) | ||
247 | + ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, 0); | ||
248 | + else | ||
249 | + ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, bit); | ||
250 | |||
251 | exit: | ||
252 | mutex_unlock(&chip->i2c_lock); | ||
253 | @@ -611,7 +611,9 @@ static int pca953x_gpio_set_config(struct gpio_chip *gc, unsigned int offset, | ||
254 | |||
255 | switch (pinconf_to_config_param(config)) { | ||
256 | case PIN_CONFIG_BIAS_PULL_UP: | ||
257 | + case PIN_CONFIG_BIAS_PULL_PIN_DEFAULT: | ||
258 | case PIN_CONFIG_BIAS_PULL_DOWN: | ||
259 | + case PIN_CONFIG_BIAS_DISABLE: | ||
260 | return pca953x_gpio_set_pull_up_down(chip, offset, config); | ||
261 | default: | ||
262 | return -ENOTSUPP; | ||
263 | diff --git a/drivers/gpu/drm/msm/dsi/dsi.c b/drivers/gpu/drm/msm/dsi/dsi.c | ||
264 | index 0d37ae5b310c4..a11b98e990019 100644 | ||
265 | --- a/drivers/gpu/drm/msm/dsi/dsi.c | ||
266 | +++ b/drivers/gpu/drm/msm/dsi/dsi.c | ||
267 | @@ -206,8 +206,10 @@ int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, struct drm_device *dev, | ||
268 | goto fail; | ||
269 | } | ||
270 | |||
271 | - if (!msm_dsi_manager_validate_current_config(msm_dsi->id)) | ||
272 | + if (!msm_dsi_manager_validate_current_config(msm_dsi->id)) { | ||
273 | + ret = -EINVAL; | ||
274 | goto fail; | ||
275 | + } | ||
276 | |||
277 | msm_dsi->encoder = encoder; | ||
278 | |||
279 | diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c | ||
280 | index 1e7b1be25bb07..5613234823f7d 100644 | ||
281 | --- a/drivers/gpu/drm/msm/dsi/dsi_host.c | ||
282 | +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c | ||
283 | @@ -460,7 +460,7 @@ static int dsi_bus_clk_enable(struct msm_dsi_host *msm_host) | ||
284 | |||
285 | return 0; | ||
286 | err: | ||
287 | - for (; i > 0; i--) | ||
288 | + while (--i >= 0) | ||
289 | clk_disable_unprepare(msm_host->bus_clks[i]); | ||
290 | |||
291 | return ret; | ||
292 | diff --git a/drivers/gpu/drm/msm/edp/edp_ctrl.c b/drivers/gpu/drm/msm/edp/edp_ctrl.c | ||
293 | index 7f3dd3ffe2c9b..bbbd96f9eaa06 100644 | ||
294 | --- a/drivers/gpu/drm/msm/edp/edp_ctrl.c | ||
295 | +++ b/drivers/gpu/drm/msm/edp/edp_ctrl.c | ||
296 | @@ -1082,7 +1082,7 @@ void msm_edp_ctrl_power(struct edp_ctrl *ctrl, bool on) | ||
297 | int msm_edp_ctrl_init(struct msm_edp *edp) | ||
298 | { | ||
299 | struct edp_ctrl *ctrl = NULL; | ||
300 | - struct device *dev = &edp->pdev->dev; | ||
301 | + struct device *dev; | ||
302 | int ret; | ||
303 | |||
304 | if (!edp) { | ||
305 | @@ -1090,6 +1090,7 @@ int msm_edp_ctrl_init(struct msm_edp *edp) | ||
306 | return -EINVAL; | ||
307 | } | ||
308 | |||
309 | + dev = &edp->pdev->dev; | ||
310 | ctrl = devm_kzalloc(dev, sizeof(*ctrl), GFP_KERNEL); | ||
311 | if (!ctrl) | ||
312 | return -ENOMEM; | ||
313 | diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig | ||
314 | index f152bc4eeb535..e70ccadf7541d 100644 | ||
315 | --- a/drivers/gpu/drm/panel/Kconfig | ||
316 | +++ b/drivers/gpu/drm/panel/Kconfig | ||
317 | @@ -141,6 +141,7 @@ config DRM_PANEL_OLIMEX_LCD_OLINUXINO | ||
318 | depends on OF | ||
319 | depends on I2C | ||
320 | depends on BACKLIGHT_CLASS_DEVICE | ||
321 | + select CRC32 | ||
322 | help | ||
323 | The panel is used with different sizes LCDs, from 480x272 to | ||
324 | 1280x800, and 24 bit per pixel. | ||
325 | diff --git a/drivers/iio/adc/aspeed_adc.c b/drivers/iio/adc/aspeed_adc.c | ||
326 | index d3fc39df535dc..552baf327d0c4 100644 | ||
327 | --- a/drivers/iio/adc/aspeed_adc.c | ||
328 | +++ b/drivers/iio/adc/aspeed_adc.c | ||
329 | @@ -184,6 +184,7 @@ static int aspeed_adc_probe(struct platform_device *pdev) | ||
330 | |||
331 | data = iio_priv(indio_dev); | ||
332 | data->dev = &pdev->dev; | ||
333 | + platform_set_drvdata(pdev, indio_dev); | ||
334 | |||
335 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
336 | data->base = devm_ioremap_resource(&pdev->dev, res); | ||
337 | diff --git a/drivers/iio/adc/mt6577_auxadc.c b/drivers/iio/adc/mt6577_auxadc.c | ||
338 | index 2449d91e47665..9cdb9084c64e8 100644 | ||
339 | --- a/drivers/iio/adc/mt6577_auxadc.c | ||
340 | +++ b/drivers/iio/adc/mt6577_auxadc.c | ||
341 | @@ -82,6 +82,10 @@ static const struct iio_chan_spec mt6577_auxadc_iio_channels[] = { | ||
342 | MT6577_AUXADC_CHANNEL(15), | ||
343 | }; | ||
344 | |||
345 | +/* For Voltage calculation */ | ||
346 | +#define VOLTAGE_FULL_RANGE 1500 /* VA voltage */ | ||
347 | +#define AUXADC_PRECISE 4096 /* 12 bits */ | ||
348 | + | ||
349 | static int mt_auxadc_get_cali_data(int rawdata, bool enable_cali) | ||
350 | { | ||
351 | return rawdata; | ||
352 | @@ -191,6 +195,10 @@ static int mt6577_auxadc_read_raw(struct iio_dev *indio_dev, | ||
353 | } | ||
354 | if (adc_dev->dev_comp->sample_data_cali) | ||
355 | *val = mt_auxadc_get_cali_data(*val, true); | ||
356 | + | ||
357 | + /* Convert adc raw data to voltage: 0 - 1500 mV */ | ||
358 | + *val = *val * VOLTAGE_FULL_RANGE / AUXADC_PRECISE; | ||
359 | + | ||
360 | return IIO_VAL_INT; | ||
361 | |||
362 | default: | ||
363 | diff --git a/drivers/iio/adc/ti-adc128s052.c b/drivers/iio/adc/ti-adc128s052.c | ||
364 | index 1e5a936b5b6ad..4267d756cd50e 100644 | ||
365 | --- a/drivers/iio/adc/ti-adc128s052.c | ||
366 | +++ b/drivers/iio/adc/ti-adc128s052.c | ||
367 | @@ -172,7 +172,13 @@ static int adc128_probe(struct spi_device *spi) | ||
368 | mutex_init(&adc->lock); | ||
369 | |||
370 | ret = iio_device_register(indio_dev); | ||
371 | + if (ret) | ||
372 | + goto err_disable_regulator; | ||
373 | |||
374 | + return 0; | ||
375 | + | ||
376 | +err_disable_regulator: | ||
377 | + regulator_disable(adc->reg); | ||
378 | return ret; | ||
379 | } | ||
380 | |||
381 | diff --git a/drivers/iio/common/ssp_sensors/ssp_spi.c b/drivers/iio/common/ssp_sensors/ssp_spi.c | ||
382 | index 7db3d5886e3ee..d98e0a04add05 100644 | ||
383 | --- a/drivers/iio/common/ssp_sensors/ssp_spi.c | ||
384 | +++ b/drivers/iio/common/ssp_sensors/ssp_spi.c | ||
385 | @@ -137,7 +137,7 @@ static int ssp_print_mcu_debug(char *data_frame, int *data_index, | ||
386 | if (length > received_len - *data_index || length <= 0) { | ||
387 | ssp_dbg("[SSP]: MSG From MCU-invalid debug length(%d/%d)\n", | ||
388 | length, received_len); | ||
389 | - return length ? length : -EPROTO; | ||
390 | + return -EPROTO; | ||
391 | } | ||
392 | |||
393 | ssp_dbg("[SSP]: MSG From MCU - %s\n", &data_frame[*data_index]); | ||
394 | @@ -273,6 +273,8 @@ static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len) | ||
395 | for (idx = 0; idx < len;) { | ||
396 | switch (dataframe[idx++]) { | ||
397 | case SSP_MSG2AP_INST_BYPASS_DATA: | ||
398 | + if (idx >= len) | ||
399 | + return -EPROTO; | ||
400 | sd = dataframe[idx++]; | ||
401 | if (sd < 0 || sd >= SSP_SENSOR_MAX) { | ||
402 | dev_err(SSP_DEV, | ||
403 | @@ -282,10 +284,13 @@ static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len) | ||
404 | |||
405 | if (indio_devs[sd]) { | ||
406 | spd = iio_priv(indio_devs[sd]); | ||
407 | - if (spd->process_data) | ||
408 | + if (spd->process_data) { | ||
409 | + if (idx >= len) | ||
410 | + return -EPROTO; | ||
411 | spd->process_data(indio_devs[sd], | ||
412 | &dataframe[idx], | ||
413 | data->timestamp); | ||
414 | + } | ||
415 | } else { | ||
416 | dev_err(SSP_DEV, "no client for frame\n"); | ||
417 | } | ||
418 | @@ -293,6 +298,8 @@ static int ssp_parse_dataframe(struct ssp_data *data, char *dataframe, int len) | ||
419 | idx += ssp_offset_map[sd]; | ||
420 | break; | ||
421 | case SSP_MSG2AP_INST_DEBUG_DATA: | ||
422 | + if (idx >= len) | ||
423 | + return -EPROTO; | ||
424 | sd = ssp_print_mcu_debug(dataframe, &idx, len); | ||
425 | if (sd) { | ||
426 | dev_err(SSP_DEV, | ||
427 | diff --git a/drivers/iio/dac/ti-dac5571.c b/drivers/iio/dac/ti-dac5571.c | ||
428 | index 3a2bb0efe50de..51c41ccf00ad9 100644 | ||
429 | --- a/drivers/iio/dac/ti-dac5571.c | ||
430 | +++ b/drivers/iio/dac/ti-dac5571.c | ||
431 | @@ -352,6 +352,7 @@ static int dac5571_probe(struct i2c_client *client, | ||
432 | data->dac5571_pwrdwn = dac5571_pwrdwn_quad; | ||
433 | break; | ||
434 | default: | ||
435 | + ret = -EINVAL; | ||
436 | goto err; | ||
437 | } | ||
438 | |||
439 | diff --git a/drivers/iio/light/opt3001.c b/drivers/iio/light/opt3001.c | ||
440 | index 92004a2563ea8..5588066c83246 100644 | ||
441 | --- a/drivers/iio/light/opt3001.c | ||
442 | +++ b/drivers/iio/light/opt3001.c | ||
443 | @@ -275,6 +275,8 @@ static int opt3001_get_lux(struct opt3001 *opt, int *val, int *val2) | ||
444 | ret = wait_event_timeout(opt->result_ready_queue, | ||
445 | opt->result_ready, | ||
446 | msecs_to_jiffies(OPT3001_RESULT_READY_LONG)); | ||
447 | + if (ret == 0) | ||
448 | + return -ETIMEDOUT; | ||
449 | } else { | ||
450 | /* Sleep for result ready time */ | ||
451 | timeout = (opt->int_time == OPT3001_INT_TIME_SHORT) ? | ||
452 | @@ -311,9 +313,7 @@ err: | ||
453 | /* Disallow IRQ to access the device while lock is active */ | ||
454 | opt->ok_to_ignore_lock = false; | ||
455 | |||
456 | - if (ret == 0) | ||
457 | - return -ETIMEDOUT; | ||
458 | - else if (ret < 0) | ||
459 | + if (ret < 0) | ||
460 | return ret; | ||
461 | |||
462 | if (opt->use_irq) { | ||
463 | diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c | ||
464 | index e5f1e3cf9179f..ba101afcfc27f 100644 | ||
465 | --- a/drivers/input/joystick/xpad.c | ||
466 | +++ b/drivers/input/joystick/xpad.c | ||
467 | @@ -331,6 +331,7 @@ static const struct xpad_device { | ||
468 | { 0x24c6, 0x5b03, "Thrustmaster Ferrari 458 Racing Wheel", 0, XTYPE_XBOX360 }, | ||
469 | { 0x24c6, 0x5d04, "Razer Sabertooth", 0, XTYPE_XBOX360 }, | ||
470 | { 0x24c6, 0xfafe, "Rock Candy Gamepad for Xbox 360", 0, XTYPE_XBOX360 }, | ||
471 | + { 0x3285, 0x0607, "Nacon GC-100", 0, XTYPE_XBOX360 }, | ||
472 | { 0x3767, 0x0101, "Fanatec Speedster 3 Forceshock Wheel", 0, XTYPE_XBOX }, | ||
473 | { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX }, | ||
474 | { 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN } | ||
475 | @@ -447,6 +448,7 @@ static const struct usb_device_id xpad_table[] = { | ||
476 | XPAD_XBOXONE_VENDOR(0x24c6), /* PowerA Controllers */ | ||
477 | XPAD_XBOXONE_VENDOR(0x2e24), /* Hyperkin Duke X-Box One pad */ | ||
478 | XPAD_XBOX360_VENDOR(0x2f24), /* GameSir Controllers */ | ||
479 | + XPAD_XBOX360_VENDOR(0x3285), /* Nacon GC-100 */ | ||
480 | { } | ||
481 | }; | ||
482 | |||
483 | diff --git a/drivers/misc/cb710/sgbuf2.c b/drivers/misc/cb710/sgbuf2.c | ||
484 | index dfd2969e36289..d52e079bb324e 100644 | ||
485 | --- a/drivers/misc/cb710/sgbuf2.c | ||
486 | +++ b/drivers/misc/cb710/sgbuf2.c | ||
487 | @@ -47,7 +47,7 @@ static inline bool needs_unaligned_copy(const void *ptr) | ||
488 | #ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS | ||
489 | return false; | ||
490 | #else | ||
491 | - return ((ptr - NULL) & 3) != 0; | ||
492 | + return ((uintptr_t)ptr & 3) != 0; | ||
493 | #endif | ||
494 | } | ||
495 | |||
496 | diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h | ||
497 | index e56dc47540646..556133daa25e9 100644 | ||
498 | --- a/drivers/misc/mei/hw-me-regs.h | ||
499 | +++ b/drivers/misc/mei/hw-me-regs.h | ||
500 | @@ -90,6 +90,7 @@ | ||
501 | #define MEI_DEV_ID_CDF 0x18D3 /* Cedar Fork */ | ||
502 | |||
503 | #define MEI_DEV_ID_ICP_LP 0x34E0 /* Ice Lake Point LP */ | ||
504 | +#define MEI_DEV_ID_ICP_N 0x38E0 /* Ice Lake Point N */ | ||
505 | |||
506 | #define MEI_DEV_ID_TGP_LP 0xA0E0 /* Tiger Lake Point LP */ | ||
507 | |||
508 | diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c | ||
509 | index 75ab2ffbf235f..d7233f2238651 100644 | ||
510 | --- a/drivers/misc/mei/pci-me.c | ||
511 | +++ b/drivers/misc/mei/pci-me.c | ||
512 | @@ -103,6 +103,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = { | ||
513 | {MEI_PCI_DEVICE(MEI_DEV_ID_CMP_H_3, MEI_ME_PCH8_CFG)}, | ||
514 | |||
515 | {MEI_PCI_DEVICE(MEI_DEV_ID_ICP_LP, MEI_ME_PCH12_CFG)}, | ||
516 | + {MEI_PCI_DEVICE(MEI_DEV_ID_ICP_N, MEI_ME_PCH12_CFG)}, | ||
517 | |||
518 | {MEI_PCI_DEVICE(MEI_DEV_ID_TGP_LP, MEI_ME_PCH12_CFG)}, | ||
519 | |||
520 | diff --git a/drivers/net/ethernet/Kconfig b/drivers/net/ethernet/Kconfig | ||
521 | index e8e9c166185de..2d4eb2f280a12 100644 | ||
522 | --- a/drivers/net/ethernet/Kconfig | ||
523 | +++ b/drivers/net/ethernet/Kconfig | ||
524 | @@ -100,6 +100,7 @@ config JME | ||
525 | config KORINA | ||
526 | tristate "Korina (IDT RC32434) Ethernet support" | ||
527 | depends on MIKROTIK_RB532 | ||
528 | + select CRC32 | ||
529 | ---help--- | ||
530 | If you have a Mikrotik RouterBoard 500 or IDT RC32434 | ||
531 | based system say Y. Otherwise say N. | ||
532 | diff --git a/drivers/net/ethernet/arc/Kconfig b/drivers/net/ethernet/arc/Kconfig | ||
533 | index 45c663d8b9aab..2cd0e45d0b6c1 100644 | ||
534 | --- a/drivers/net/ethernet/arc/Kconfig | ||
535 | +++ b/drivers/net/ethernet/arc/Kconfig | ||
536 | @@ -21,6 +21,7 @@ config ARC_EMAC_CORE | ||
537 | depends on ARC || ARCH_ROCKCHIP || COMPILE_TEST | ||
538 | select MII | ||
539 | select PHYLIB | ||
540 | + select CRC32 | ||
541 | |||
542 | config ARC_EMAC | ||
543 | tristate "ARC EMAC support" | ||
544 | diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c | ||
545 | index 24c49a84947f3..5f4f0f61c83c8 100644 | ||
546 | --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c | ||
547 | +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c | ||
548 | @@ -3805,20 +3805,67 @@ static int set_feature_rx_all(struct net_device *netdev, bool enable) | ||
549 | return mlx5_set_port_fcs(mdev, !enable); | ||
550 | } | ||
551 | |||
552 | +static int mlx5e_set_rx_port_ts(struct mlx5_core_dev *mdev, bool enable) | ||
553 | +{ | ||
554 | + u32 in[MLX5_ST_SZ_DW(pcmr_reg)] = {}; | ||
555 | + bool supported, curr_state; | ||
556 | + int err; | ||
557 | + | ||
558 | + if (!MLX5_CAP_GEN(mdev, ports_check)) | ||
559 | + return 0; | ||
560 | + | ||
561 | + err = mlx5_query_ports_check(mdev, in, sizeof(in)); | ||
562 | + if (err) | ||
563 | + return err; | ||
564 | + | ||
565 | + supported = MLX5_GET(pcmr_reg, in, rx_ts_over_crc_cap); | ||
566 | + curr_state = MLX5_GET(pcmr_reg, in, rx_ts_over_crc); | ||
567 | + | ||
568 | + if (!supported || enable == curr_state) | ||
569 | + return 0; | ||
570 | + | ||
571 | + MLX5_SET(pcmr_reg, in, local_port, 1); | ||
572 | + MLX5_SET(pcmr_reg, in, rx_ts_over_crc, enable); | ||
573 | + | ||
574 | + return mlx5_set_ports_check(mdev, in, sizeof(in)); | ||
575 | +} | ||
576 | + | ||
577 | static int set_feature_rx_fcs(struct net_device *netdev, bool enable) | ||
578 | { | ||
579 | struct mlx5e_priv *priv = netdev_priv(netdev); | ||
580 | + struct mlx5e_channels *chs = &priv->channels; | ||
581 | + struct mlx5_core_dev *mdev = priv->mdev; | ||
582 | int err; | ||
583 | |||
584 | mutex_lock(&priv->state_lock); | ||
585 | |||
586 | - priv->channels.params.scatter_fcs_en = enable; | ||
587 | - err = mlx5e_modify_channels_scatter_fcs(&priv->channels, enable); | ||
588 | - if (err) | ||
589 | - priv->channels.params.scatter_fcs_en = !enable; | ||
590 | + if (enable) { | ||
591 | + err = mlx5e_set_rx_port_ts(mdev, false); | ||
592 | + if (err) | ||
593 | + goto out; | ||
594 | |||
595 | - mutex_unlock(&priv->state_lock); | ||
596 | + chs->params.scatter_fcs_en = true; | ||
597 | + err = mlx5e_modify_channels_scatter_fcs(chs, true); | ||
598 | + if (err) { | ||
599 | + chs->params.scatter_fcs_en = false; | ||
600 | + mlx5e_set_rx_port_ts(mdev, true); | ||
601 | + } | ||
602 | + } else { | ||
603 | + chs->params.scatter_fcs_en = false; | ||
604 | + err = mlx5e_modify_channels_scatter_fcs(chs, false); | ||
605 | + if (err) { | ||
606 | + chs->params.scatter_fcs_en = true; | ||
607 | + goto out; | ||
608 | + } | ||
609 | + err = mlx5e_set_rx_port_ts(mdev, true); | ||
610 | + if (err) { | ||
611 | + mlx5_core_warn(mdev, "Failed to set RX port timestamp %d\n", err); | ||
612 | + err = 0; | ||
613 | + } | ||
614 | + } | ||
615 | |||
616 | +out: | ||
617 | + mutex_unlock(&priv->state_lock); | ||
618 | return err; | ||
619 | } | ||
620 | |||
621 | diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||
622 | index c3fc1cc4bb2b9..882ea12098b7a 100644 | ||
623 | --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||
624 | +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c | ||
625 | @@ -25,16 +25,8 @@ | ||
626 | #define MLXSW_THERMAL_ZONE_MAX_NAME 16 | ||
627 | #define MLXSW_THERMAL_TEMP_SCORE_MAX GENMASK(31, 0) | ||
628 | #define MLXSW_THERMAL_MAX_STATE 10 | ||
629 | +#define MLXSW_THERMAL_MIN_STATE 2 | ||
630 | #define MLXSW_THERMAL_MAX_DUTY 255 | ||
631 | -/* Minimum and maximum fan allowed speed in percent: from 20% to 100%. Values | ||
632 | - * MLXSW_THERMAL_MAX_STATE + x, where x is between 2 and 10 are used for | ||
633 | - * setting fan speed dynamic minimum. For example, if value is set to 14 (40%) | ||
634 | - * cooling levels vector will be set to 4, 4, 4, 4, 4, 5, 6, 7, 8, 9, 10 to | ||
635 | - * introduce PWM speed in percent: 40, 40, 40, 40, 40, 50, 60. 70, 80, 90, 100. | ||
636 | - */ | ||
637 | -#define MLXSW_THERMAL_SPEED_MIN (MLXSW_THERMAL_MAX_STATE + 2) | ||
638 | -#define MLXSW_THERMAL_SPEED_MAX (MLXSW_THERMAL_MAX_STATE * 2) | ||
639 | -#define MLXSW_THERMAL_SPEED_MIN_LEVEL 2 /* 20% */ | ||
640 | |||
641 | /* External cooling devices, allowed for binding to mlxsw thermal zones. */ | ||
642 | static char * const mlxsw_thermal_external_allowed_cdev[] = { | ||
643 | @@ -703,49 +695,16 @@ static int mlxsw_thermal_set_cur_state(struct thermal_cooling_device *cdev, | ||
644 | struct mlxsw_thermal *thermal = cdev->devdata; | ||
645 | struct device *dev = thermal->bus_info->dev; | ||
646 | char mfsc_pl[MLXSW_REG_MFSC_LEN]; | ||
647 | - unsigned long cur_state, i; | ||
648 | int idx; | ||
649 | - u8 duty; | ||
650 | int err; | ||
651 | |||
652 | + if (state > MLXSW_THERMAL_MAX_STATE) | ||
653 | + return -EINVAL; | ||
654 | + | ||
655 | idx = mlxsw_get_cooling_device_idx(thermal, cdev); | ||
656 | if (idx < 0) | ||
657 | return idx; | ||
658 | |||
659 | - /* Verify if this request is for changing allowed fan dynamical | ||
660 | - * minimum. If it is - update cooling levels accordingly and update | ||
661 | - * state, if current state is below the newly requested minimum state. | ||
662 | - * For example, if current state is 5, and minimal state is to be | ||
663 | - * changed from 4 to 6, thermal->cooling_levels[0 to 5] will be changed | ||
664 | - * all from 4 to 6. And state 5 (thermal->cooling_levels[4]) should be | ||
665 | - * overwritten. | ||
666 | - */ | ||
667 | - if (state >= MLXSW_THERMAL_SPEED_MIN && | ||
668 | - state <= MLXSW_THERMAL_SPEED_MAX) { | ||
669 | - state -= MLXSW_THERMAL_MAX_STATE; | ||
670 | - for (i = 0; i <= MLXSW_THERMAL_MAX_STATE; i++) | ||
671 | - thermal->cooling_levels[i] = max(state, i); | ||
672 | - | ||
673 | - mlxsw_reg_mfsc_pack(mfsc_pl, idx, 0); | ||
674 | - err = mlxsw_reg_query(thermal->core, MLXSW_REG(mfsc), mfsc_pl); | ||
675 | - if (err) | ||
676 | - return err; | ||
677 | - | ||
678 | - duty = mlxsw_reg_mfsc_pwm_duty_cycle_get(mfsc_pl); | ||
679 | - cur_state = mlxsw_duty_to_state(duty); | ||
680 | - | ||
681 | - /* If current fan state is lower than requested dynamical | ||
682 | - * minimum, increase fan speed up to dynamical minimum. | ||
683 | - */ | ||
684 | - if (state < cur_state) | ||
685 | - return 0; | ||
686 | - | ||
687 | - state = cur_state; | ||
688 | - } | ||
689 | - | ||
690 | - if (state > MLXSW_THERMAL_MAX_STATE) | ||
691 | - return -EINVAL; | ||
692 | - | ||
693 | /* Normalize the state to the valid speed range. */ | ||
694 | state = thermal->cooling_levels[state]; | ||
695 | mlxsw_reg_mfsc_pack(mfsc_pl, idx, mlxsw_state_to_duty(state)); | ||
696 | @@ -1040,8 +999,7 @@ int mlxsw_thermal_init(struct mlxsw_core *core, | ||
697 | |||
698 | /* Initialize cooling levels per PWM state. */ | ||
699 | for (i = 0; i < MLXSW_THERMAL_MAX_STATE; i++) | ||
700 | - thermal->cooling_levels[i] = max(MLXSW_THERMAL_SPEED_MIN_LEVEL, | ||
701 | - i); | ||
702 | + thermal->cooling_levels[i] = max(MLXSW_THERMAL_MIN_STATE, i); | ||
703 | |||
704 | thermal->polling_delay = bus_info->low_frequency ? | ||
705 | MLXSW_THERMAL_SLOW_POLL_INT : | ||
706 | diff --git a/drivers/net/ethernet/microchip/encx24j600-regmap.c b/drivers/net/ethernet/microchip/encx24j600-regmap.c | ||
707 | index 1f496fac70332..e2528633c09a1 100644 | ||
708 | --- a/drivers/net/ethernet/microchip/encx24j600-regmap.c | ||
709 | +++ b/drivers/net/ethernet/microchip/encx24j600-regmap.c | ||
710 | @@ -502,13 +502,19 @@ static struct regmap_bus phymap_encx24j600 = { | ||
711 | .reg_read = regmap_encx24j600_phy_reg_read, | ||
712 | }; | ||
713 | |||
714 | -void devm_regmap_init_encx24j600(struct device *dev, | ||
715 | - struct encx24j600_context *ctx) | ||
716 | +int devm_regmap_init_encx24j600(struct device *dev, | ||
717 | + struct encx24j600_context *ctx) | ||
718 | { | ||
719 | mutex_init(&ctx->mutex); | ||
720 | regcfg.lock_arg = ctx; | ||
721 | ctx->regmap = devm_regmap_init(dev, ®map_encx24j600, ctx, ®cfg); | ||
722 | + if (IS_ERR(ctx->regmap)) | ||
723 | + return PTR_ERR(ctx->regmap); | ||
724 | ctx->phymap = devm_regmap_init(dev, &phymap_encx24j600, ctx, &phycfg); | ||
725 | + if (IS_ERR(ctx->phymap)) | ||
726 | + return PTR_ERR(ctx->phymap); | ||
727 | + | ||
728 | + return 0; | ||
729 | } | ||
730 | EXPORT_SYMBOL_GPL(devm_regmap_init_encx24j600); | ||
731 | |||
732 | diff --git a/drivers/net/ethernet/microchip/encx24j600.c b/drivers/net/ethernet/microchip/encx24j600.c | ||
733 | index c3a6edc0ddf62..6b43afc4e3246 100644 | ||
734 | --- a/drivers/net/ethernet/microchip/encx24j600.c | ||
735 | +++ b/drivers/net/ethernet/microchip/encx24j600.c | ||
736 | @@ -1027,10 +1027,13 @@ static int encx24j600_spi_probe(struct spi_device *spi) | ||
737 | priv->speed = SPEED_100; | ||
738 | |||
739 | priv->ctx.spi = spi; | ||
740 | - devm_regmap_init_encx24j600(&spi->dev, &priv->ctx); | ||
741 | ndev->irq = spi->irq; | ||
742 | ndev->netdev_ops = &encx24j600_netdev_ops; | ||
743 | |||
744 | + ret = devm_regmap_init_encx24j600(&spi->dev, &priv->ctx); | ||
745 | + if (ret) | ||
746 | + goto out_free; | ||
747 | + | ||
748 | mutex_init(&priv->lock); | ||
749 | |||
750 | /* Reset device and check if it is connected */ | ||
751 | diff --git a/drivers/net/ethernet/microchip/encx24j600_hw.h b/drivers/net/ethernet/microchip/encx24j600_hw.h | ||
752 | index f604a260ede79..711147a159aa9 100644 | ||
753 | --- a/drivers/net/ethernet/microchip/encx24j600_hw.h | ||
754 | +++ b/drivers/net/ethernet/microchip/encx24j600_hw.h | ||
755 | @@ -15,8 +15,8 @@ struct encx24j600_context { | ||
756 | int bank; | ||
757 | }; | ||
758 | |||
759 | -void devm_regmap_init_encx24j600(struct device *dev, | ||
760 | - struct encx24j600_context *ctx); | ||
761 | +int devm_regmap_init_encx24j600(struct device *dev, | ||
762 | + struct encx24j600_context *ctx); | ||
763 | |||
764 | /* Single-byte instructions */ | ||
765 | #define BANK_SELECT(bank) (0xC0 | ((bank & (BANK_MASK >> BANK_SHIFT)) << 1)) | ||
766 | diff --git a/drivers/net/ethernet/neterion/s2io.c b/drivers/net/ethernet/neterion/s2io.c | ||
767 | index e0b2bf3279053..71ab4e9c9a171 100644 | ||
768 | --- a/drivers/net/ethernet/neterion/s2io.c | ||
769 | +++ b/drivers/net/ethernet/neterion/s2io.c | ||
770 | @@ -8565,7 +8565,7 @@ static void s2io_io_resume(struct pci_dev *pdev) | ||
771 | return; | ||
772 | } | ||
773 | |||
774 | - if (s2io_set_mac_addr(netdev, netdev->dev_addr) == FAILURE) { | ||
775 | + if (do_s2io_prog_unicast(netdev, netdev->dev_addr) == FAILURE) { | ||
776 | s2io_card_down(sp); | ||
777 | pr_err("Can't restore mac addr after reset.\n"); | ||
778 | return; | ||
779 | diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c | ||
780 | index e66002251596b..99ba3551458fc 100644 | ||
781 | --- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c | ||
782 | +++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c | ||
783 | @@ -912,6 +912,10 @@ static int ionic_addr_add(struct net_device *netdev, const u8 *addr) | ||
784 | |||
785 | static int ionic_addr_del(struct net_device *netdev, const u8 *addr) | ||
786 | { | ||
787 | + /* Don't delete our own address from the uc list */ | ||
788 | + if (ether_addr_equal(addr, netdev->dev_addr)) | ||
789 | + return 0; | ||
790 | + | ||
791 | return ionic_lif_addr(netdev_priv(netdev), addr, false); | ||
792 | } | ||
793 | |||
794 | diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c | ||
795 | index 1db49424aa43c..1cbcc27602780 100644 | ||
796 | --- a/drivers/net/ethernet/qlogic/qed/qed_main.c | ||
797 | +++ b/drivers/net/ethernet/qlogic/qed/qed_main.c | ||
798 | @@ -1238,6 +1238,7 @@ static int qed_slowpath_start(struct qed_dev *cdev, | ||
799 | } else { | ||
800 | DP_NOTICE(cdev, | ||
801 | "Failed to acquire PTT for aRFS\n"); | ||
802 | + rc = -EINVAL; | ||
803 | goto err; | ||
804 | } | ||
805 | } | ||
806 | diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c | ||
807 | index 2bac49b49f739..fbf2deafe8ba3 100644 | ||
808 | --- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c | ||
809 | +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c | ||
810 | @@ -218,11 +218,18 @@ static void dwmac1000_dump_dma_regs(void __iomem *ioaddr, u32 *reg_space) | ||
811 | readl(ioaddr + DMA_BUS_MODE + i * 4); | ||
812 | } | ||
813 | |||
814 | -static void dwmac1000_get_hw_feature(void __iomem *ioaddr, | ||
815 | - struct dma_features *dma_cap) | ||
816 | +static int dwmac1000_get_hw_feature(void __iomem *ioaddr, | ||
817 | + struct dma_features *dma_cap) | ||
818 | { | ||
819 | u32 hw_cap = readl(ioaddr + DMA_HW_FEATURE); | ||
820 | |||
821 | + if (!hw_cap) { | ||
822 | + /* 0x00000000 is the value read on old hardware that does not | ||
823 | + * implement this register | ||
824 | + */ | ||
825 | + return -EOPNOTSUPP; | ||
826 | + } | ||
827 | + | ||
828 | dma_cap->mbps_10_100 = (hw_cap & DMA_HW_FEAT_MIISEL); | ||
829 | dma_cap->mbps_1000 = (hw_cap & DMA_HW_FEAT_GMIISEL) >> 1; | ||
830 | dma_cap->half_duplex = (hw_cap & DMA_HW_FEAT_HDSEL) >> 2; | ||
831 | @@ -252,6 +259,8 @@ static void dwmac1000_get_hw_feature(void __iomem *ioaddr, | ||
832 | dma_cap->number_tx_channel = (hw_cap & DMA_HW_FEAT_TXCHCNT) >> 22; | ||
833 | /* Alternate (enhanced) DESC mode */ | ||
834 | dma_cap->enh_desc = (hw_cap & DMA_HW_FEAT_ENHDESSEL) >> 24; | ||
835 | + | ||
836 | + return 0; | ||
837 | } | ||
838 | |||
839 | static void dwmac1000_rx_watchdog(void __iomem *ioaddr, u32 riwt, | ||
840 | diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | ||
841 | index 0d993f4b701c2..ae473d85b7fb8 100644 | ||
842 | --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | ||
843 | +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | ||
844 | @@ -336,8 +336,8 @@ static void dwmac4_dma_tx_chan_op_mode(void __iomem *ioaddr, int mode, | ||
845 | writel(mtl_tx_op, ioaddr + MTL_CHAN_TX_OP_MODE(channel)); | ||
846 | } | ||
847 | |||
848 | -static void dwmac4_get_hw_feature(void __iomem *ioaddr, | ||
849 | - struct dma_features *dma_cap) | ||
850 | +static int dwmac4_get_hw_feature(void __iomem *ioaddr, | ||
851 | + struct dma_features *dma_cap) | ||
852 | { | ||
853 | u32 hw_cap = readl(ioaddr + GMAC_HW_FEATURE0); | ||
854 | |||
855 | @@ -400,6 +400,8 @@ static void dwmac4_get_hw_feature(void __iomem *ioaddr, | ||
856 | dma_cap->frpbs = (hw_cap & GMAC_HW_FEAT_FRPBS) >> 11; | ||
857 | dma_cap->frpsel = (hw_cap & GMAC_HW_FEAT_FRPSEL) >> 10; | ||
858 | dma_cap->dvlan = (hw_cap & GMAC_HW_FEAT_DVLAN) >> 5; | ||
859 | + | ||
860 | + return 0; | ||
861 | } | ||
862 | |||
863 | /* Enable/disable TSO feature and set MSS */ | ||
864 | diff --git a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c | ||
865 | index 4af7271cea561..07ef0ac725b3e 100644 | ||
866 | --- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c | ||
867 | +++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c | ||
868 | @@ -356,8 +356,8 @@ static int dwxgmac2_dma_interrupt(void __iomem *ioaddr, | ||
869 | return ret; | ||
870 | } | ||
871 | |||
872 | -static void dwxgmac2_get_hw_feature(void __iomem *ioaddr, | ||
873 | - struct dma_features *dma_cap) | ||
874 | +static int dwxgmac2_get_hw_feature(void __iomem *ioaddr, | ||
875 | + struct dma_features *dma_cap) | ||
876 | { | ||
877 | u32 hw_cap; | ||
878 | |||
879 | @@ -425,6 +425,8 @@ static void dwxgmac2_get_hw_feature(void __iomem *ioaddr, | ||
880 | dma_cap->frpes = (hw_cap & XGMAC_HWFEAT_FRPES) >> 11; | ||
881 | dma_cap->frpbs = (hw_cap & XGMAC_HWFEAT_FRPPB) >> 9; | ||
882 | dma_cap->frpsel = (hw_cap & XGMAC_HWFEAT_FRPSEL) >> 3; | ||
883 | + | ||
884 | + return 0; | ||
885 | } | ||
886 | |||
887 | static void dwxgmac2_rx_watchdog(void __iomem *ioaddr, u32 riwt, u32 nchan) | ||
888 | diff --git a/drivers/net/ethernet/stmicro/stmmac/hwif.h b/drivers/net/ethernet/stmicro/stmmac/hwif.h | ||
889 | index 9010d881b12e5..59a1d8c003721 100644 | ||
890 | --- a/drivers/net/ethernet/stmicro/stmmac/hwif.h | ||
891 | +++ b/drivers/net/ethernet/stmicro/stmmac/hwif.h | ||
892 | @@ -196,8 +196,8 @@ struct stmmac_dma_ops { | ||
893 | int (*dma_interrupt) (void __iomem *ioaddr, | ||
894 | struct stmmac_extra_stats *x, u32 chan); | ||
895 | /* If supported then get the optional core features */ | ||
896 | - void (*get_hw_feature)(void __iomem *ioaddr, | ||
897 | - struct dma_features *dma_cap); | ||
898 | + int (*get_hw_feature)(void __iomem *ioaddr, | ||
899 | + struct dma_features *dma_cap); | ||
900 | /* Program the HW RX Watchdog */ | ||
901 | void (*rx_watchdog)(void __iomem *ioaddr, u32 riwt, u32 number_chan); | ||
902 | void (*set_tx_ring_len)(void __iomem *ioaddr, u32 len, u32 chan); | ||
903 | @@ -247,7 +247,7 @@ struct stmmac_dma_ops { | ||
904 | #define stmmac_dma_interrupt_status(__priv, __args...) \ | ||
905 | stmmac_do_callback(__priv, dma, dma_interrupt, __args) | ||
906 | #define stmmac_get_hw_feature(__priv, __args...) \ | ||
907 | - stmmac_do_void_callback(__priv, dma, get_hw_feature, __args) | ||
908 | + stmmac_do_callback(__priv, dma, get_hw_feature, __args) | ||
909 | #define stmmac_rx_watchdog(__priv, __args...) \ | ||
910 | stmmac_do_void_callback(__priv, dma, rx_watchdog, __args) | ||
911 | #define stmmac_set_tx_ring_len(__priv, __args...) \ | ||
912 | diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig | ||
913 | index 05bdcc5917f6b..ca234d1a0e3bf 100644 | ||
914 | --- a/drivers/net/usb/Kconfig | ||
915 | +++ b/drivers/net/usb/Kconfig | ||
916 | @@ -99,6 +99,10 @@ config USB_RTL8150 | ||
917 | config USB_RTL8152 | ||
918 | tristate "Realtek RTL8152/RTL8153 Based USB Ethernet Adapters" | ||
919 | select MII | ||
920 | + select CRC32 | ||
921 | + select CRYPTO | ||
922 | + select CRYPTO_HASH | ||
923 | + select CRYPTO_SHA256 | ||
924 | help | ||
925 | This option adds support for Realtek RTL8152 based USB 2.0 | ||
926 | 10/100 Ethernet adapters and RTL8153 based USB 3.0 10/100/1000 | ||
927 | diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c | ||
928 | index 6da270e8c6746..c0f4324d8f7c8 100644 | ||
929 | --- a/drivers/nvmem/core.c | ||
930 | +++ b/drivers/nvmem/core.c | ||
931 | @@ -954,7 +954,8 @@ static void nvmem_shift_read_buffer_in_place(struct nvmem_cell *cell, void *buf) | ||
932 | *p-- = 0; | ||
933 | |||
934 | /* clear msb bits if any leftover in the last byte */ | ||
935 | - *p &= GENMASK((cell->nbits%BITS_PER_BYTE) - 1, 0); | ||
936 | + if (cell->nbits % BITS_PER_BYTE) | ||
937 | + *p &= GENMASK((cell->nbits % BITS_PER_BYTE) - 1, 0); | ||
938 | } | ||
939 | |||
940 | static int __nvmem_cell_read(struct nvmem_device *nvmem, | ||
941 | diff --git a/drivers/platform/mellanox/mlxreg-io.c b/drivers/platform/mellanox/mlxreg-io.c | ||
942 | index acfaf64ffde68..1c3760c13f832 100644 | ||
943 | --- a/drivers/platform/mellanox/mlxreg-io.c | ||
944 | +++ b/drivers/platform/mellanox/mlxreg-io.c | ||
945 | @@ -123,7 +123,7 @@ mlxreg_io_attr_store(struct device *dev, struct device_attribute *attr, | ||
946 | return -EINVAL; | ||
947 | |||
948 | /* Convert buffer to input value. */ | ||
949 | - ret = kstrtou32(buf, len, &input_val); | ||
950 | + ret = kstrtou32(buf, 0, &input_val); | ||
951 | if (ret) | ||
952 | return ret; | ||
953 | |||
954 | diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c | ||
955 | index d242779297ba7..ae8fa4ff05ee3 100644 | ||
956 | --- a/drivers/usb/host/xhci-pci.c | ||
957 | +++ b/drivers/usb/host/xhci-pci.c | ||
958 | @@ -28,6 +28,7 @@ | ||
959 | #define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73 | ||
960 | #define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000 | ||
961 | #define PCI_DEVICE_ID_FRESCO_LOGIC_FL1009 0x1009 | ||
962 | +#define PCI_DEVICE_ID_FRESCO_LOGIC_FL1100 0x1100 | ||
963 | #define PCI_DEVICE_ID_FRESCO_LOGIC_FL1400 0x1400 | ||
964 | |||
965 | #define PCI_VENDOR_ID_ETRON 0x1b6f | ||
966 | @@ -98,6 +99,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) | ||
967 | /* Look for vendor-specific quirks */ | ||
968 | if (pdev->vendor == PCI_VENDOR_ID_FRESCO_LOGIC && | ||
969 | (pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK || | ||
970 | + pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_FL1100 || | ||
971 | pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_FL1400)) { | ||
972 | if (pdev->device == PCI_DEVICE_ID_FRESCO_LOGIC_PDK && | ||
973 | pdev->revision == 0x0) { | ||
974 | diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c | ||
975 | index 1228b3d92db06..2c92fd19e7822 100644 | ||
976 | --- a/drivers/usb/host/xhci-ring.c | ||
977 | +++ b/drivers/usb/host/xhci-ring.c | ||
978 | @@ -339,16 +339,22 @@ static void xhci_handle_stopped_cmd_ring(struct xhci_hcd *xhci, | ||
979 | /* Must be called with xhci->lock held, releases and aquires lock back */ | ||
980 | static int xhci_abort_cmd_ring(struct xhci_hcd *xhci, unsigned long flags) | ||
981 | { | ||
982 | - u64 temp_64; | ||
983 | + u32 temp_32; | ||
984 | int ret; | ||
985 | |||
986 | xhci_dbg(xhci, "Abort command ring\n"); | ||
987 | |||
988 | reinit_completion(&xhci->cmd_ring_stop_completion); | ||
989 | |||
990 | - temp_64 = xhci_read_64(xhci, &xhci->op_regs->cmd_ring); | ||
991 | - xhci_write_64(xhci, temp_64 | CMD_RING_ABORT, | ||
992 | - &xhci->op_regs->cmd_ring); | ||
993 | + /* | ||
994 | + * The control bits like command stop, abort are located in lower | ||
995 | + * dword of the command ring control register. Limit the write | ||
996 | + * to the lower dword to avoid corrupting the command ring pointer | ||
997 | + * in case if the command ring is stopped by the time upper dword | ||
998 | + * is written. | ||
999 | + */ | ||
1000 | + temp_32 = readl(&xhci->op_regs->cmd_ring); | ||
1001 | + writel(temp_32 | CMD_RING_ABORT, &xhci->op_regs->cmd_ring); | ||
1002 | |||
1003 | /* Section 4.6.1.2 of xHCI 1.0 spec says software should also time the | ||
1004 | * completion of the Command Abort operation. If CRR is not negated in 5 | ||
1005 | diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c | ||
1006 | index 02a2afd130eb6..4ef7484dff8b2 100644 | ||
1007 | --- a/drivers/usb/host/xhci.c | ||
1008 | +++ b/drivers/usb/host/xhci.c | ||
1009 | @@ -3173,10 +3173,13 @@ static void xhci_endpoint_reset(struct usb_hcd *hcd, | ||
1010 | return; | ||
1011 | |||
1012 | /* Bail out if toggle is already being cleared by a endpoint reset */ | ||
1013 | + spin_lock_irqsave(&xhci->lock, flags); | ||
1014 | if (ep->ep_state & EP_HARD_CLEAR_TOGGLE) { | ||
1015 | ep->ep_state &= ~EP_HARD_CLEAR_TOGGLE; | ||
1016 | + spin_unlock_irqrestore(&xhci->lock, flags); | ||
1017 | return; | ||
1018 | } | ||
1019 | + spin_unlock_irqrestore(&xhci->lock, flags); | ||
1020 | /* Only interrupt and bulk ep's use data toggle, USB2 spec 5.5.4-> */ | ||
1021 | if (usb_endpoint_xfer_control(&host_ep->desc) || | ||
1022 | usb_endpoint_xfer_isoc(&host_ep->desc)) | ||
1023 | @@ -3262,8 +3265,10 @@ static void xhci_endpoint_reset(struct usb_hcd *hcd, | ||
1024 | xhci_free_command(xhci, cfg_cmd); | ||
1025 | cleanup: | ||
1026 | xhci_free_command(xhci, stop_cmd); | ||
1027 | + spin_lock_irqsave(&xhci->lock, flags); | ||
1028 | if (ep->ep_state & EP_SOFT_CLEAR_TOGGLE) | ||
1029 | ep->ep_state &= ~EP_SOFT_CLEAR_TOGGLE; | ||
1030 | + spin_unlock_irqrestore(&xhci->lock, flags); | ||
1031 | } | ||
1032 | |||
1033 | static int xhci_check_streams_endpoint(struct xhci_hcd *xhci, | ||
1034 | diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c | ||
1035 | index 89d659cef5c63..1b9ebd756f097 100644 | ||
1036 | --- a/drivers/usb/musb/musb_dsps.c | ||
1037 | +++ b/drivers/usb/musb/musb_dsps.c | ||
1038 | @@ -899,11 +899,13 @@ static int dsps_probe(struct platform_device *pdev) | ||
1039 | if (usb_get_dr_mode(&pdev->dev) == USB_DR_MODE_PERIPHERAL) { | ||
1040 | ret = dsps_setup_optional_vbus_irq(pdev, glue); | ||
1041 | if (ret) | ||
1042 | - goto err; | ||
1043 | + goto unregister_pdev; | ||
1044 | } | ||
1045 | |||
1046 | return 0; | ||
1047 | |||
1048 | +unregister_pdev: | ||
1049 | + platform_device_unregister(glue->musb); | ||
1050 | err: | ||
1051 | pm_runtime_disable(&pdev->dev); | ||
1052 | iounmap(glue->usbss_base); | ||
1053 | diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c | ||
1054 | index 82016d9781460..a1e9cbe518c74 100644 | ||
1055 | --- a/drivers/usb/serial/option.c | ||
1056 | +++ b/drivers/usb/serial/option.c | ||
1057 | @@ -246,11 +246,13 @@ static void option_instat_callback(struct urb *urb); | ||
1058 | /* These Quectel products use Quectel's vendor ID */ | ||
1059 | #define QUECTEL_PRODUCT_EC21 0x0121 | ||
1060 | #define QUECTEL_PRODUCT_EC25 0x0125 | ||
1061 | +#define QUECTEL_PRODUCT_EG91 0x0191 | ||
1062 | #define QUECTEL_PRODUCT_EG95 0x0195 | ||
1063 | #define QUECTEL_PRODUCT_BG96 0x0296 | ||
1064 | #define QUECTEL_PRODUCT_EP06 0x0306 | ||
1065 | #define QUECTEL_PRODUCT_EM12 0x0512 | ||
1066 | #define QUECTEL_PRODUCT_RM500Q 0x0800 | ||
1067 | +#define QUECTEL_PRODUCT_EC200S_CN 0x6002 | ||
1068 | #define QUECTEL_PRODUCT_EC200T 0x6026 | ||
1069 | |||
1070 | #define CMOTECH_VENDOR_ID 0x16d8 | ||
1071 | @@ -1111,6 +1113,9 @@ static const struct usb_device_id option_ids[] = { | ||
1072 | { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25, 0xff, 0xff, 0xff), | ||
1073 | .driver_info = NUMEP2 }, | ||
1074 | { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC25, 0xff, 0, 0) }, | ||
1075 | + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG91, 0xff, 0xff, 0xff), | ||
1076 | + .driver_info = NUMEP2 }, | ||
1077 | + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG91, 0xff, 0, 0) }, | ||
1078 | { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0xff, 0xff), | ||
1079 | .driver_info = NUMEP2 }, | ||
1080 | { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EG95, 0xff, 0, 0) }, | ||
1081 | @@ -1128,6 +1133,7 @@ static const struct usb_device_id option_ids[] = { | ||
1082 | { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0, 0) }, | ||
1083 | { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_RM500Q, 0xff, 0xff, 0x10), | ||
1084 | .driver_info = ZLP }, | ||
1085 | + { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200S_CN, 0xff, 0, 0) }, | ||
1086 | { USB_DEVICE_AND_INTERFACE_INFO(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EC200T, 0xff, 0, 0) }, | ||
1087 | |||
1088 | { USB_DEVICE(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_6001) }, | ||
1089 | @@ -1227,6 +1233,8 @@ static const struct usb_device_id option_ids[] = { | ||
1090 | .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) }, | ||
1091 | { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1203, 0xff), /* Telit LE910Cx (RNDIS) */ | ||
1092 | .driver_info = NCTRL(2) | RSVD(3) }, | ||
1093 | + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x1204, 0xff), /* Telit LE910Cx (MBIM) */ | ||
1094 | + .driver_info = NCTRL(0) | RSVD(1) }, | ||
1095 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE910_USBCFG4), | ||
1096 | .driver_info = NCTRL(0) | RSVD(1) | RSVD(2) | RSVD(3) }, | ||
1097 | { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_LE920), | ||
1098 | diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c | ||
1099 | index 0f60363c1bbc8..b1b9923162a04 100644 | ||
1100 | --- a/drivers/usb/serial/qcserial.c | ||
1101 | +++ b/drivers/usb/serial/qcserial.c | ||
1102 | @@ -165,6 +165,7 @@ static const struct usb_device_id id_table[] = { | ||
1103 | {DEVICE_SWI(0x1199, 0x907b)}, /* Sierra Wireless EM74xx */ | ||
1104 | {DEVICE_SWI(0x1199, 0x9090)}, /* Sierra Wireless EM7565 QDL */ | ||
1105 | {DEVICE_SWI(0x1199, 0x9091)}, /* Sierra Wireless EM7565 */ | ||
1106 | + {DEVICE_SWI(0x1199, 0x90d2)}, /* Sierra Wireless EM9191 QDL */ | ||
1107 | {DEVICE_SWI(0x413c, 0x81a2)}, /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */ | ||
1108 | {DEVICE_SWI(0x413c, 0x81a3)}, /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */ | ||
1109 | {DEVICE_SWI(0x413c, 0x81a4)}, /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */ | ||
1110 | diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c | ||
1111 | index 59a05f1b81054..91627e7443260 100644 | ||
1112 | --- a/drivers/virtio/virtio.c | ||
1113 | +++ b/drivers/virtio/virtio.c | ||
1114 | @@ -225,6 +225,17 @@ static int virtio_dev_probe(struct device *_d) | ||
1115 | driver_features_legacy = driver_features; | ||
1116 | } | ||
1117 | |||
1118 | + /* | ||
1119 | + * Some devices detect legacy solely via F_VERSION_1. Write | ||
1120 | + * F_VERSION_1 to force LE config space accesses before FEATURES_OK for | ||
1121 | + * these when needed. | ||
1122 | + */ | ||
1123 | + if (drv->validate && !virtio_legacy_is_little_endian() | ||
1124 | + && device_features & BIT_ULL(VIRTIO_F_VERSION_1)) { | ||
1125 | + dev->features = BIT_ULL(VIRTIO_F_VERSION_1); | ||
1126 | + dev->config->finalize_features(dev); | ||
1127 | + } | ||
1128 | + | ||
1129 | if (device_features & (1ULL << VIRTIO_F_VERSION_1)) | ||
1130 | dev->features = driver_features & device_features; | ||
1131 | else | ||
1132 | diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c | ||
1133 | index 8e6dfe76f9c9d..4ddb4ea2e4a32 100644 | ||
1134 | --- a/drivers/watchdog/orion_wdt.c | ||
1135 | +++ b/drivers/watchdog/orion_wdt.c | ||
1136 | @@ -52,7 +52,7 @@ | ||
1137 | #define WDT_A370_RATIO (1 << WDT_A370_RATIO_SHIFT) | ||
1138 | |||
1139 | static bool nowayout = WATCHDOG_NOWAYOUT; | ||
1140 | -static int heartbeat = -1; /* module parameter (seconds) */ | ||
1141 | +static int heartbeat; /* module parameter (seconds) */ | ||
1142 | |||
1143 | struct orion_watchdog; | ||
1144 | |||
1145 | diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c | ||
1146 | index 5273965226534..19d2104c04629 100644 | ||
1147 | --- a/fs/btrfs/extent-tree.c | ||
1148 | +++ b/fs/btrfs/extent-tree.c | ||
1149 | @@ -4596,6 +4596,7 @@ struct extent_buffer *btrfs_alloc_tree_block(struct btrfs_trans_handle *trans, | ||
1150 | out_free_delayed: | ||
1151 | btrfs_free_delayed_extent_op(extent_op); | ||
1152 | out_free_buf: | ||
1153 | + btrfs_tree_unlock(buf); | ||
1154 | free_extent_buffer(buf); | ||
1155 | out_free_reserved: | ||
1156 | btrfs_free_reserved_extent(fs_info, ins.objectid, ins.offset, 0); | ||
1157 | diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c | ||
1158 | index 8ea4b3da85d1a..9d358dafef367 100644 | ||
1159 | --- a/fs/btrfs/tree-log.c | ||
1160 | +++ b/fs/btrfs/tree-log.c | ||
1161 | @@ -1160,7 +1160,10 @@ next: | ||
1162 | /* look for a conflicting sequence number */ | ||
1163 | di = btrfs_lookup_dir_index_item(trans, root, path, btrfs_ino(dir), | ||
1164 | ref_index, name, namelen, 0); | ||
1165 | - if (di && !IS_ERR(di)) { | ||
1166 | + if (IS_ERR(di)) { | ||
1167 | + if (PTR_ERR(di) != -ENOENT) | ||
1168 | + return PTR_ERR(di); | ||
1169 | + } else if (di) { | ||
1170 | ret = drop_one_dir_item(trans, root, path, dir, di); | ||
1171 | if (ret) | ||
1172 | return ret; | ||
1173 | @@ -1170,7 +1173,9 @@ next: | ||
1174 | /* look for a conflicting name */ | ||
1175 | di = btrfs_lookup_dir_item(trans, root, path, btrfs_ino(dir), | ||
1176 | name, namelen, 0); | ||
1177 | - if (di && !IS_ERR(di)) { | ||
1178 | + if (IS_ERR(di)) { | ||
1179 | + return PTR_ERR(di); | ||
1180 | + } else if (di) { | ||
1181 | ret = drop_one_dir_item(trans, root, path, dir, di); | ||
1182 | if (ret) | ||
1183 | return ret; | ||
1184 | @@ -1944,8 +1949,8 @@ static noinline int replay_one_name(struct btrfs_trans_handle *trans, | ||
1185 | struct btrfs_key log_key; | ||
1186 | struct inode *dir; | ||
1187 | u8 log_type; | ||
1188 | - int exists; | ||
1189 | - int ret = 0; | ||
1190 | + bool exists; | ||
1191 | + int ret; | ||
1192 | bool update_size = (key->type == BTRFS_DIR_INDEX_KEY); | ||
1193 | bool name_added = false; | ||
1194 | |||
1195 | @@ -1965,12 +1970,12 @@ static noinline int replay_one_name(struct btrfs_trans_handle *trans, | ||
1196 | name_len); | ||
1197 | |||
1198 | btrfs_dir_item_key_to_cpu(eb, di, &log_key); | ||
1199 | - exists = btrfs_lookup_inode(trans, root, path, &log_key, 0); | ||
1200 | - if (exists == 0) | ||
1201 | - exists = 1; | ||
1202 | - else | ||
1203 | - exists = 0; | ||
1204 | + ret = btrfs_lookup_inode(trans, root, path, &log_key, 0); | ||
1205 | btrfs_release_path(path); | ||
1206 | + if (ret < 0) | ||
1207 | + goto out; | ||
1208 | + exists = (ret == 0); | ||
1209 | + ret = 0; | ||
1210 | |||
1211 | if (key->type == BTRFS_DIR_ITEM_KEY) { | ||
1212 | dst_di = btrfs_lookup_dir_item(trans, root, path, key->objectid, | ||
1213 | @@ -1985,7 +1990,14 @@ static noinline int replay_one_name(struct btrfs_trans_handle *trans, | ||
1214 | ret = -EINVAL; | ||
1215 | goto out; | ||
1216 | } | ||
1217 | - if (IS_ERR_OR_NULL(dst_di)) { | ||
1218 | + | ||
1219 | + if (dst_di == ERR_PTR(-ENOENT)) | ||
1220 | + dst_di = NULL; | ||
1221 | + | ||
1222 | + if (IS_ERR(dst_di)) { | ||
1223 | + ret = PTR_ERR(dst_di); | ||
1224 | + goto out; | ||
1225 | + } else if (!dst_di) { | ||
1226 | /* we need a sequence number to insert, so we only | ||
1227 | * do inserts for the BTRFS_DIR_INDEX_KEY types | ||
1228 | */ | ||
1229 | diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c | ||
1230 | index ab5e92897270a..81c9eab8529b6 100644 | ||
1231 | --- a/fs/overlayfs/file.c | ||
1232 | +++ b/fs/overlayfs/file.c | ||
1233 | @@ -296,48 +296,6 @@ out_unlock: | ||
1234 | return ret; | ||
1235 | } | ||
1236 | |||
1237 | -static ssize_t ovl_splice_read(struct file *in, loff_t *ppos, | ||
1238 | - struct pipe_inode_info *pipe, size_t len, | ||
1239 | - unsigned int flags) | ||
1240 | -{ | ||
1241 | - ssize_t ret; | ||
1242 | - struct fd real; | ||
1243 | - const struct cred *old_cred; | ||
1244 | - | ||
1245 | - ret = ovl_real_fdget(in, &real); | ||
1246 | - if (ret) | ||
1247 | - return ret; | ||
1248 | - | ||
1249 | - old_cred = ovl_override_creds(file_inode(in)->i_sb); | ||
1250 | - ret = generic_file_splice_read(real.file, ppos, pipe, len, flags); | ||
1251 | - revert_creds(old_cred); | ||
1252 | - | ||
1253 | - ovl_file_accessed(in); | ||
1254 | - fdput(real); | ||
1255 | - return ret; | ||
1256 | -} | ||
1257 | - | ||
1258 | -static ssize_t | ||
1259 | -ovl_splice_write(struct pipe_inode_info *pipe, struct file *out, | ||
1260 | - loff_t *ppos, size_t len, unsigned int flags) | ||
1261 | -{ | ||
1262 | - struct fd real; | ||
1263 | - const struct cred *old_cred; | ||
1264 | - ssize_t ret; | ||
1265 | - | ||
1266 | - ret = ovl_real_fdget(out, &real); | ||
1267 | - if (ret) | ||
1268 | - return ret; | ||
1269 | - | ||
1270 | - old_cred = ovl_override_creds(file_inode(out)->i_sb); | ||
1271 | - ret = iter_file_splice_write(pipe, real.file, ppos, len, flags); | ||
1272 | - revert_creds(old_cred); | ||
1273 | - | ||
1274 | - ovl_file_accessed(out); | ||
1275 | - fdput(real); | ||
1276 | - return ret; | ||
1277 | -} | ||
1278 | - | ||
1279 | static int ovl_fsync(struct file *file, loff_t start, loff_t end, int datasync) | ||
1280 | { | ||
1281 | struct fd real; | ||
1282 | @@ -694,8 +652,8 @@ const struct file_operations ovl_file_operations = { | ||
1283 | .fadvise = ovl_fadvise, | ||
1284 | .unlocked_ioctl = ovl_ioctl, | ||
1285 | .compat_ioctl = ovl_compat_ioctl, | ||
1286 | - .splice_read = ovl_splice_read, | ||
1287 | - .splice_write = ovl_splice_write, | ||
1288 | + .splice_read = generic_file_splice_read, | ||
1289 | + .splice_write = iter_file_splice_write, | ||
1290 | |||
1291 | .copy_file_range = ovl_copy_file_range, | ||
1292 | .remap_file_range = ovl_remap_file_range, | ||
1293 | diff --git a/include/linux/mlx5/mlx5_ifc.h b/include/linux/mlx5/mlx5_ifc.h | ||
1294 | index 36516fe86fe7c..641a01bc5f6f7 100644 | ||
1295 | --- a/include/linux/mlx5/mlx5_ifc.h | ||
1296 | +++ b/include/linux/mlx5/mlx5_ifc.h | ||
1297 | @@ -8942,16 +8942,22 @@ struct mlx5_ifc_pcmr_reg_bits { | ||
1298 | u8 reserved_at_0[0x8]; | ||
1299 | u8 local_port[0x8]; | ||
1300 | u8 reserved_at_10[0x10]; | ||
1301 | + | ||
1302 | u8 entropy_force_cap[0x1]; | ||
1303 | u8 entropy_calc_cap[0x1]; | ||
1304 | u8 entropy_gre_calc_cap[0x1]; | ||
1305 | - u8 reserved_at_23[0x1b]; | ||
1306 | + u8 reserved_at_23[0xf]; | ||
1307 | + u8 rx_ts_over_crc_cap[0x1]; | ||
1308 | + u8 reserved_at_33[0xb]; | ||
1309 | u8 fcs_cap[0x1]; | ||
1310 | u8 reserved_at_3f[0x1]; | ||
1311 | + | ||
1312 | u8 entropy_force[0x1]; | ||
1313 | u8 entropy_calc[0x1]; | ||
1314 | u8 entropy_gre_calc[0x1]; | ||
1315 | - u8 reserved_at_43[0x1b]; | ||
1316 | + u8 reserved_at_43[0xf]; | ||
1317 | + u8 rx_ts_over_crc[0x1]; | ||
1318 | + u8 reserved_at_53[0xb]; | ||
1319 | u8 fcs_chk[0x1]; | ||
1320 | u8 reserved_at_5f[0x1]; | ||
1321 | }; | ||
1322 | diff --git a/net/nfc/af_nfc.c b/net/nfc/af_nfc.c | ||
1323 | index 4a9e72073564a..581358dcbdf8d 100644 | ||
1324 | --- a/net/nfc/af_nfc.c | ||
1325 | +++ b/net/nfc/af_nfc.c | ||
1326 | @@ -60,6 +60,9 @@ int nfc_proto_register(const struct nfc_protocol *nfc_proto) | ||
1327 | proto_tab[nfc_proto->id] = nfc_proto; | ||
1328 | write_unlock(&proto_tab_lock); | ||
1329 | |||
1330 | + if (rc) | ||
1331 | + proto_unregister(nfc_proto->proto); | ||
1332 | + | ||
1333 | return rc; | ||
1334 | } | ||
1335 | EXPORT_SYMBOL(nfc_proto_register); | ||
1336 | diff --git a/net/nfc/digital_core.c b/net/nfc/digital_core.c | ||
1337 | index e3599ed4a7a87..9c9caa307cf16 100644 | ||
1338 | --- a/net/nfc/digital_core.c | ||
1339 | +++ b/net/nfc/digital_core.c | ||
1340 | @@ -277,6 +277,7 @@ int digital_tg_configure_hw(struct nfc_digital_dev *ddev, int type, int param) | ||
1341 | static int digital_tg_listen_mdaa(struct nfc_digital_dev *ddev, u8 rf_tech) | ||
1342 | { | ||
1343 | struct digital_tg_mdaa_params *params; | ||
1344 | + int rc; | ||
1345 | |||
1346 | params = kzalloc(sizeof(*params), GFP_KERNEL); | ||
1347 | if (!params) | ||
1348 | @@ -291,8 +292,12 @@ static int digital_tg_listen_mdaa(struct nfc_digital_dev *ddev, u8 rf_tech) | ||
1349 | get_random_bytes(params->nfcid2 + 2, NFC_NFCID2_MAXSIZE - 2); | ||
1350 | params->sc = DIGITAL_SENSF_FELICA_SC; | ||
1351 | |||
1352 | - return digital_send_cmd(ddev, DIGITAL_CMD_TG_LISTEN_MDAA, NULL, params, | ||
1353 | - 500, digital_tg_recv_atr_req, NULL); | ||
1354 | + rc = digital_send_cmd(ddev, DIGITAL_CMD_TG_LISTEN_MDAA, NULL, params, | ||
1355 | + 500, digital_tg_recv_atr_req, NULL); | ||
1356 | + if (rc) | ||
1357 | + kfree(params); | ||
1358 | + | ||
1359 | + return rc; | ||
1360 | } | ||
1361 | |||
1362 | static int digital_tg_listen_md(struct nfc_digital_dev *ddev, u8 rf_tech) | ||
1363 | diff --git a/net/nfc/digital_technology.c b/net/nfc/digital_technology.c | ||
1364 | index 84d2345c75a3f..3adf4589852af 100644 | ||
1365 | --- a/net/nfc/digital_technology.c | ||
1366 | +++ b/net/nfc/digital_technology.c | ||
1367 | @@ -465,8 +465,12 @@ static int digital_in_send_sdd_req(struct nfc_digital_dev *ddev, | ||
1368 | skb_put_u8(skb, sel_cmd); | ||
1369 | skb_put_u8(skb, DIGITAL_SDD_REQ_SEL_PAR); | ||
1370 | |||
1371 | - return digital_in_send_cmd(ddev, skb, 30, digital_in_recv_sdd_res, | ||
1372 | - target); | ||
1373 | + rc = digital_in_send_cmd(ddev, skb, 30, digital_in_recv_sdd_res, | ||
1374 | + target); | ||
1375 | + if (rc) | ||
1376 | + kfree_skb(skb); | ||
1377 | + | ||
1378 | + return rc; | ||
1379 | } | ||
1380 | |||
1381 | static void digital_in_recv_sens_res(struct nfc_digital_dev *ddev, void *arg, | ||
1382 | diff --git a/net/sched/sch_mqprio.c b/net/sched/sch_mqprio.c | ||
1383 | index 8766ab5b87880..5eb3b1b7ae5e7 100644 | ||
1384 | --- a/net/sched/sch_mqprio.c | ||
1385 | +++ b/net/sched/sch_mqprio.c | ||
1386 | @@ -529,22 +529,28 @@ static int mqprio_dump_class_stats(struct Qdisc *sch, unsigned long cl, | ||
1387 | for (i = tc.offset; i < tc.offset + tc.count; i++) { | ||
1388 | struct netdev_queue *q = netdev_get_tx_queue(dev, i); | ||
1389 | struct Qdisc *qdisc = rtnl_dereference(q->qdisc); | ||
1390 | - struct gnet_stats_basic_cpu __percpu *cpu_bstats = NULL; | ||
1391 | - struct gnet_stats_queue __percpu *cpu_qstats = NULL; | ||
1392 | |||
1393 | spin_lock_bh(qdisc_lock(qdisc)); | ||
1394 | + | ||
1395 | if (qdisc_is_percpu_stats(qdisc)) { | ||
1396 | - cpu_bstats = qdisc->cpu_bstats; | ||
1397 | - cpu_qstats = qdisc->cpu_qstats; | ||
1398 | + qlen = qdisc_qlen_sum(qdisc); | ||
1399 | + | ||
1400 | + __gnet_stats_copy_basic(NULL, &bstats, | ||
1401 | + qdisc->cpu_bstats, | ||
1402 | + &qdisc->bstats); | ||
1403 | + __gnet_stats_copy_queue(&qstats, | ||
1404 | + qdisc->cpu_qstats, | ||
1405 | + &qdisc->qstats, | ||
1406 | + qlen); | ||
1407 | + } else { | ||
1408 | + qlen += qdisc->q.qlen; | ||
1409 | + bstats.bytes += qdisc->bstats.bytes; | ||
1410 | + bstats.packets += qdisc->bstats.packets; | ||
1411 | + qstats.backlog += qdisc->qstats.backlog; | ||
1412 | + qstats.drops += qdisc->qstats.drops; | ||
1413 | + qstats.requeues += qdisc->qstats.requeues; | ||
1414 | + qstats.overlimits += qdisc->qstats.overlimits; | ||
1415 | } | ||
1416 | - | ||
1417 | - qlen = qdisc_qlen_sum(qdisc); | ||
1418 | - __gnet_stats_copy_basic(NULL, &sch->bstats, | ||
1419 | - cpu_bstats, &qdisc->bstats); | ||
1420 | - __gnet_stats_copy_queue(&sch->qstats, | ||
1421 | - cpu_qstats, | ||
1422 | - &qdisc->qstats, | ||
1423 | - qlen); | ||
1424 | spin_unlock_bh(qdisc_lock(qdisc)); | ||
1425 | } | ||
1426 | |||
1427 | diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c | ||
1428 | index 000aa62281f46..4eebe708c8e4e 100644 | ||
1429 | --- a/net/sctp/sm_make_chunk.c | ||
1430 | +++ b/net/sctp/sm_make_chunk.c | ||
1431 | @@ -3659,7 +3659,7 @@ struct sctp_chunk *sctp_make_strreset_req( | ||
1432 | outlen = (sizeof(outreq) + stream_len) * out; | ||
1433 | inlen = (sizeof(inreq) + stream_len) * in; | ||
1434 | |||
1435 | - retval = sctp_make_reconf(asoc, outlen + inlen); | ||
1436 | + retval = sctp_make_reconf(asoc, SCTP_PAD4(outlen) + SCTP_PAD4(inlen)); | ||
1437 | if (!retval) | ||
1438 | return NULL; | ||
1439 | |||
1440 | diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl | ||
1441 | index 4f84657f55c23..f459ae883a0a6 100755 | ||
1442 | --- a/scripts/recordmcount.pl | ||
1443 | +++ b/scripts/recordmcount.pl | ||
1444 | @@ -222,7 +222,7 @@ if ($arch =~ /(x86(_64)?)|(i386)/) { | ||
1445 | $local_regex = "^[0-9a-fA-F]+\\s+t\\s+(\\S+)"; | ||
1446 | $weak_regex = "^[0-9a-fA-F]+\\s+([wW])\\s+(\\S+)"; | ||
1447 | $section_regex = "Disassembly of section\\s+(\\S+):"; | ||
1448 | -$function_regex = "^([0-9a-fA-F]+)\\s+<(.*?)>:"; | ||
1449 | +$function_regex = "^([0-9a-fA-F]+)\\s+<([^^]*?)>:"; | ||
1450 | $mcount_regex = "^\\s*([0-9a-fA-F]+):.*\\s(mcount|__fentry__)\$"; | ||
1451 | $section_type = '@progbits'; | ||
1452 | $mcount_adjust = 0; | ||
1453 | diff --git a/sound/core/seq_device.c b/sound/core/seq_device.c | ||
1454 | index e9dbad93f9d09..c9223049551c4 100644 | ||
1455 | --- a/sound/core/seq_device.c | ||
1456 | +++ b/sound/core/seq_device.c | ||
1457 | @@ -147,6 +147,8 @@ static int snd_seq_device_dev_free(struct snd_device *device) | ||
1458 | struct snd_seq_device *dev = device->device_data; | ||
1459 | |||
1460 | cancel_autoload_drivers(); | ||
1461 | + if (dev->private_free) | ||
1462 | + dev->private_free(dev); | ||
1463 | put_device(&dev->dev); | ||
1464 | return 0; | ||
1465 | } | ||
1466 | @@ -174,11 +176,7 @@ static int snd_seq_device_dev_disconnect(struct snd_device *device) | ||
1467 | |||
1468 | static void snd_seq_dev_release(struct device *dev) | ||
1469 | { | ||
1470 | - struct snd_seq_device *sdev = to_seq_dev(dev); | ||
1471 | - | ||
1472 | - if (sdev->private_free) | ||
1473 | - sdev->private_free(sdev); | ||
1474 | - kfree(sdev); | ||
1475 | + kfree(to_seq_dev(dev)); | ||
1476 | } | ||
1477 | |||
1478 | /* | ||
1479 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
1480 | index abe371c01fba2..c4837c78a8624 100644 | ||
1481 | --- a/sound/pci/hda/patch_realtek.c | ||
1482 | +++ b/sound/pci/hda/patch_realtek.c | ||
1483 | @@ -517,6 +517,8 @@ static void alc_shutup_pins(struct hda_codec *codec) | ||
1484 | struct alc_spec *spec = codec->spec; | ||
1485 | |||
1486 | switch (codec->core.vendor_id) { | ||
1487 | + case 0x10ec0236: | ||
1488 | + case 0x10ec0256: | ||
1489 | case 0x10ec0283: | ||
1490 | case 0x10ec0286: | ||
1491 | case 0x10ec0288: | ||
1492 | @@ -2539,7 +2541,8 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = { | ||
1493 | SND_PCI_QUIRK(0x1558, 0x67e1, "Clevo PB71[DE][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
1494 | SND_PCI_QUIRK(0x1558, 0x67e5, "Clevo PC70D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
1495 | SND_PCI_QUIRK(0x1558, 0x70d1, "Clevo PC70[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
1496 | - SND_PCI_QUIRK(0x1558, 0x7714, "Clevo X170", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
1497 | + SND_PCI_QUIRK(0x1558, 0x7714, "Clevo X170SM", ALC1220_FIXUP_CLEVO_PB51ED_PINS), | ||
1498 | + SND_PCI_QUIRK(0x1558, 0x7715, "Clevo X170KM-G", ALC1220_FIXUP_CLEVO_PB51ED), | ||
1499 | SND_PCI_QUIRK(0x1558, 0x9501, "Clevo P950HR", ALC1220_FIXUP_CLEVO_P950), | ||
1500 | SND_PCI_QUIRK(0x1558, 0x9506, "Clevo P955HQ", ALC1220_FIXUP_CLEVO_P950), | ||
1501 | SND_PCI_QUIRK(0x1558, 0x950a, "Clevo P955H[PR]", ALC1220_FIXUP_CLEVO_P950), | ||
1502 | @@ -3521,7 +3524,8 @@ static void alc256_shutup(struct hda_codec *codec) | ||
1503 | /* If disable 3k pulldown control for alc257, the Mic detection will not work correctly | ||
1504 | * when booting with headset plugged. So skip setting it for the codec alc257 | ||
1505 | */ | ||
1506 | - if (codec->core.vendor_id != 0x10ec0257) | ||
1507 | + if (spec->codec_variant != ALC269_TYPE_ALC257 && | ||
1508 | + spec->codec_variant != ALC269_TYPE_ALC256) | ||
1509 | alc_update_coef_idx(codec, 0x46, 0, 3 << 12); | ||
1510 | |||
1511 | if (!spec->no_shutup_pins) | ||
1512 | @@ -9688,6 +9692,9 @@ enum { | ||
1513 | ALC671_FIXUP_HP_HEADSET_MIC2, | ||
1514 | ALC662_FIXUP_ACER_X2660G_HEADSET_MODE, | ||
1515 | ALC662_FIXUP_ACER_NITRO_HEADSET_MODE, | ||
1516 | + ALC668_FIXUP_ASUS_NO_HEADSET_MIC, | ||
1517 | + ALC668_FIXUP_HEADSET_MIC, | ||
1518 | + ALC668_FIXUP_MIC_DET_COEF, | ||
1519 | }; | ||
1520 | |||
1521 | static const struct hda_fixup alc662_fixups[] = { | ||
1522 | @@ -10071,6 +10078,29 @@ static const struct hda_fixup alc662_fixups[] = { | ||
1523 | .chained = true, | ||
1524 | .chain_id = ALC662_FIXUP_USI_FUNC | ||
1525 | }, | ||
1526 | + [ALC668_FIXUP_ASUS_NO_HEADSET_MIC] = { | ||
1527 | + .type = HDA_FIXUP_PINS, | ||
1528 | + .v.pins = (const struct hda_pintbl[]) { | ||
1529 | + { 0x1b, 0x04a1112c }, | ||
1530 | + { } | ||
1531 | + }, | ||
1532 | + .chained = true, | ||
1533 | + .chain_id = ALC668_FIXUP_HEADSET_MIC | ||
1534 | + }, | ||
1535 | + [ALC668_FIXUP_HEADSET_MIC] = { | ||
1536 | + .type = HDA_FIXUP_FUNC, | ||
1537 | + .v.func = alc269_fixup_headset_mic, | ||
1538 | + .chained = true, | ||
1539 | + .chain_id = ALC668_FIXUP_MIC_DET_COEF | ||
1540 | + }, | ||
1541 | + [ALC668_FIXUP_MIC_DET_COEF] = { | ||
1542 | + .type = HDA_FIXUP_VERBS, | ||
1543 | + .v.verbs = (const struct hda_verb[]) { | ||
1544 | + { 0x20, AC_VERB_SET_COEF_INDEX, 0x15 }, | ||
1545 | + { 0x20, AC_VERB_SET_PROC_COEF, 0x0d60 }, | ||
1546 | + {} | ||
1547 | + }, | ||
1548 | + }, | ||
1549 | }; | ||
1550 | |||
1551 | static const struct snd_pci_quirk alc662_fixup_tbl[] = { | ||
1552 | @@ -10106,6 +10136,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = { | ||
1553 | SND_PCI_QUIRK(0x1043, 0x15a7, "ASUS UX51VZH", ALC662_FIXUP_BASS_16), | ||
1554 | SND_PCI_QUIRK(0x1043, 0x177d, "ASUS N551", ALC668_FIXUP_ASUS_Nx51), | ||
1555 | SND_PCI_QUIRK(0x1043, 0x17bd, "ASUS N751", ALC668_FIXUP_ASUS_Nx51), | ||
1556 | + SND_PCI_QUIRK(0x1043, 0x185d, "ASUS G551JW", ALC668_FIXUP_ASUS_NO_HEADSET_MIC), | ||
1557 | SND_PCI_QUIRK(0x1043, 0x1963, "ASUS X71SL", ALC662_FIXUP_ASUS_MODE8), | ||
1558 | SND_PCI_QUIRK(0x1043, 0x1b73, "ASUS N55SF", ALC662_FIXUP_BASS_16), | ||
1559 | SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_BASS_MODE4_CHMAP), | ||
1560 | diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h | ||
1561 | index 441335abb4018..9620ae0003ce4 100644 | ||
1562 | --- a/sound/usb/quirks-table.h | ||
1563 | +++ b/sound/usb/quirks-table.h | ||
1564 | @@ -125,6 +125,48 @@ | ||
1565 | .bInterfaceClass = USB_CLASS_AUDIO, | ||
1566 | }, | ||
1567 | |||
1568 | +/* | ||
1569 | + * Creative Technology, Ltd Live! Cam Sync HD [VF0770] | ||
1570 | + * The device advertises 8 formats, but only a rate of 48kHz is honored by the | ||
1571 | + * hardware and 24 bits give chopped audio, so only report the one working | ||
1572 | + * combination. | ||
1573 | + */ | ||
1574 | +{ | ||
1575 | + USB_DEVICE(0x041e, 0x4095), | ||
1576 | + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { | ||
1577 | + .ifnum = QUIRK_ANY_INTERFACE, | ||
1578 | + .type = QUIRK_COMPOSITE, | ||
1579 | + .data = &(const struct snd_usb_audio_quirk[]) { | ||
1580 | + { | ||
1581 | + .ifnum = 2, | ||
1582 | + .type = QUIRK_AUDIO_STANDARD_MIXER, | ||
1583 | + }, | ||
1584 | + { | ||
1585 | + .ifnum = 3, | ||
1586 | + .type = QUIRK_AUDIO_FIXED_ENDPOINT, | ||
1587 | + .data = &(const struct audioformat) { | ||
1588 | + .formats = SNDRV_PCM_FMTBIT_S16_LE, | ||
1589 | + .channels = 2, | ||
1590 | + .fmt_bits = 16, | ||
1591 | + .iface = 3, | ||
1592 | + .altsetting = 4, | ||
1593 | + .altset_idx = 4, | ||
1594 | + .endpoint = 0x82, | ||
1595 | + .ep_attr = 0x05, | ||
1596 | + .rates = SNDRV_PCM_RATE_48000, | ||
1597 | + .rate_min = 48000, | ||
1598 | + .rate_max = 48000, | ||
1599 | + .nr_rates = 1, | ||
1600 | + .rate_table = (unsigned int[]) { 48000 }, | ||
1601 | + }, | ||
1602 | + }, | ||
1603 | + { | ||
1604 | + .ifnum = -1 | ||
1605 | + }, | ||
1606 | + }, | ||
1607 | + }, | ||
1608 | +}, | ||
1609 | + | ||
1610 | /* | ||
1611 | * HP Wireless Audio | ||
1612 | * When not ignored, causes instability issues for some users, forcing them to |