1 |
commit: 5cd274357420b76fb09796379f86ea8a576165eb |
2 |
Author: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sat Nov 6 13:44:49 2021 +0000 |
4 |
Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org> |
5 |
CommitDate: Sat Nov 6 13:44:49 2021 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=5cd27435 |
7 |
|
8 |
Linux patch 5.15.1 |
9 |
|
10 |
Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org> |
11 |
|
12 |
0000_README | 4 + |
13 |
1000_linux-5.15.1.patch | 512 ++++++++++++++++++++++++++++++++++++++++++++++++ |
14 |
2 files changed, 516 insertions(+) |
15 |
|
16 |
diff --git a/0000_README b/0000_README |
17 |
index 9bc9951..23b2f2d 100644 |
18 |
--- a/0000_README |
19 |
+++ b/0000_README |
20 |
@@ -43,6 +43,10 @@ EXPERIMENTAL |
21 |
Individual Patch Descriptions: |
22 |
-------------------------------------------------------------------------- |
23 |
|
24 |
+Patch: 1000_linux-5.15.1.patch |
25 |
+From: http://www.kernel.org |
26 |
+Desc: Linux 5.15.1 |
27 |
+ |
28 |
Patch: 1500_XATTR_USER_PREFIX.patch |
29 |
From: https://bugs.gentoo.org/show_bug.cgi?id=470644 |
30 |
Desc: Support for namespace user.pax.* on tmpfs. |
31 |
|
32 |
diff --git a/1000_linux-5.15.1.patch b/1000_linux-5.15.1.patch |
33 |
new file mode 100644 |
34 |
index 0000000..8174afc |
35 |
--- /dev/null |
36 |
+++ b/1000_linux-5.15.1.patch |
37 |
@@ -0,0 +1,512 @@ |
38 |
+diff --git a/Makefile b/Makefile |
39 |
+index ed6e7ec60eff6..ffcc7eadc44b8 100644 |
40 |
+--- a/Makefile |
41 |
++++ b/Makefile |
42 |
+@@ -1,7 +1,7 @@ |
43 |
+ # SPDX-License-Identifier: GPL-2.0 |
44 |
+ VERSION = 5 |
45 |
+ PATCHLEVEL = 15 |
46 |
+-SUBLEVEL = 0 |
47 |
++SUBLEVEL = 1 |
48 |
+ EXTRAVERSION = |
49 |
+ NAME = Trick or Treat |
50 |
+ |
51 |
+diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c |
52 |
+index 962041148482c..6c0f7f4f7d1de 100644 |
53 |
+--- a/drivers/amba/bus.c |
54 |
++++ b/drivers/amba/bus.c |
55 |
+@@ -377,9 +377,6 @@ static int amba_device_try_add(struct amba_device *dev, struct resource *parent) |
56 |
+ void __iomem *tmp; |
57 |
+ int i, ret; |
58 |
+ |
59 |
+- WARN_ON(dev->irq[0] == (unsigned int)-1); |
60 |
+- WARN_ON(dev->irq[1] == (unsigned int)-1); |
61 |
+- |
62 |
+ ret = request_resource(parent, &dev->res); |
63 |
+ if (ret) |
64 |
+ goto err_out; |
65 |
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h |
66 |
+index 269437b013280..289c7dc053634 100644 |
67 |
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h |
68 |
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h |
69 |
+@@ -1078,8 +1078,6 @@ struct amdgpu_device { |
70 |
+ char product_name[32]; |
71 |
+ char serial[20]; |
72 |
+ |
73 |
+- struct amdgpu_autodump autodump; |
74 |
+- |
75 |
+ atomic_t throttling_logging_enabled; |
76 |
+ struct ratelimit_state throttling_logging_rs; |
77 |
+ uint32_t ras_hw_enabled; |
78 |
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c |
79 |
+index 463b9c0283f7e..ec30d81586a79 100644 |
80 |
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c |
81 |
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c |
82 |
+@@ -27,7 +27,6 @@ |
83 |
+ #include <linux/pci.h> |
84 |
+ #include <linux/uaccess.h> |
85 |
+ #include <linux/pm_runtime.h> |
86 |
+-#include <linux/poll.h> |
87 |
+ |
88 |
+ #include "amdgpu.h" |
89 |
+ #include "amdgpu_pm.h" |
90 |
+@@ -37,85 +36,7 @@ |
91 |
+ #include "amdgpu_securedisplay.h" |
92 |
+ #include "amdgpu_fw_attestation.h" |
93 |
+ |
94 |
+-int amdgpu_debugfs_wait_dump(struct amdgpu_device *adev) |
95 |
+-{ |
96 |
+ #if defined(CONFIG_DEBUG_FS) |
97 |
+- unsigned long timeout = 600 * HZ; |
98 |
+- int ret; |
99 |
+- |
100 |
+- wake_up_interruptible(&adev->autodump.gpu_hang); |
101 |
+- |
102 |
+- ret = wait_for_completion_interruptible_timeout(&adev->autodump.dumping, timeout); |
103 |
+- if (ret == 0) { |
104 |
+- pr_err("autodump: timeout, move on to gpu recovery\n"); |
105 |
+- return -ETIMEDOUT; |
106 |
+- } |
107 |
+-#endif |
108 |
+- return 0; |
109 |
+-} |
110 |
+- |
111 |
+-#if defined(CONFIG_DEBUG_FS) |
112 |
+- |
113 |
+-static int amdgpu_debugfs_autodump_open(struct inode *inode, struct file *file) |
114 |
+-{ |
115 |
+- struct amdgpu_device *adev = inode->i_private; |
116 |
+- int ret; |
117 |
+- |
118 |
+- file->private_data = adev; |
119 |
+- |
120 |
+- ret = down_read_killable(&adev->reset_sem); |
121 |
+- if (ret) |
122 |
+- return ret; |
123 |
+- |
124 |
+- if (adev->autodump.dumping.done) { |
125 |
+- reinit_completion(&adev->autodump.dumping); |
126 |
+- ret = 0; |
127 |
+- } else { |
128 |
+- ret = -EBUSY; |
129 |
+- } |
130 |
+- |
131 |
+- up_read(&adev->reset_sem); |
132 |
+- |
133 |
+- return ret; |
134 |
+-} |
135 |
+- |
136 |
+-static int amdgpu_debugfs_autodump_release(struct inode *inode, struct file *file) |
137 |
+-{ |
138 |
+- struct amdgpu_device *adev = file->private_data; |
139 |
+- |
140 |
+- complete_all(&adev->autodump.dumping); |
141 |
+- return 0; |
142 |
+-} |
143 |
+- |
144 |
+-static unsigned int amdgpu_debugfs_autodump_poll(struct file *file, struct poll_table_struct *poll_table) |
145 |
+-{ |
146 |
+- struct amdgpu_device *adev = file->private_data; |
147 |
+- |
148 |
+- poll_wait(file, &adev->autodump.gpu_hang, poll_table); |
149 |
+- |
150 |
+- if (amdgpu_in_reset(adev)) |
151 |
+- return POLLIN | POLLRDNORM | POLLWRNORM; |
152 |
+- |
153 |
+- return 0; |
154 |
+-} |
155 |
+- |
156 |
+-static const struct file_operations autodump_debug_fops = { |
157 |
+- .owner = THIS_MODULE, |
158 |
+- .open = amdgpu_debugfs_autodump_open, |
159 |
+- .poll = amdgpu_debugfs_autodump_poll, |
160 |
+- .release = amdgpu_debugfs_autodump_release, |
161 |
+-}; |
162 |
+- |
163 |
+-static void amdgpu_debugfs_autodump_init(struct amdgpu_device *adev) |
164 |
+-{ |
165 |
+- init_completion(&adev->autodump.dumping); |
166 |
+- complete_all(&adev->autodump.dumping); |
167 |
+- init_waitqueue_head(&adev->autodump.gpu_hang); |
168 |
+- |
169 |
+- debugfs_create_file("amdgpu_autodump", 0600, |
170 |
+- adev_to_drm(adev)->primary->debugfs_root, |
171 |
+- adev, &autodump_debug_fops); |
172 |
+-} |
173 |
+ |
174 |
+ /** |
175 |
+ * amdgpu_debugfs_process_reg_op - Handle MMIO register reads/writes |
176 |
+@@ -1588,7 +1509,6 @@ int amdgpu_debugfs_init(struct amdgpu_device *adev) |
177 |
+ } |
178 |
+ |
179 |
+ amdgpu_ras_debugfs_create_all(adev); |
180 |
+- amdgpu_debugfs_autodump_init(adev); |
181 |
+ amdgpu_rap_debugfs_init(adev); |
182 |
+ amdgpu_securedisplay_debugfs_init(adev); |
183 |
+ amdgpu_fw_attestation_debugfs_init(adev); |
184 |
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h |
185 |
+index 141a8474e24f2..8b641f40fdf66 100644 |
186 |
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h |
187 |
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.h |
188 |
+@@ -26,10 +26,6 @@ |
189 |
+ /* |
190 |
+ * Debugfs |
191 |
+ */ |
192 |
+-struct amdgpu_autodump { |
193 |
+- struct completion dumping; |
194 |
+- struct wait_queue_head gpu_hang; |
195 |
+-}; |
196 |
+ |
197 |
+ int amdgpu_debugfs_regs_init(struct amdgpu_device *adev); |
198 |
+ int amdgpu_debugfs_init(struct amdgpu_device *adev); |
199 |
+@@ -37,4 +33,3 @@ void amdgpu_debugfs_fini(struct amdgpu_device *adev); |
200 |
+ void amdgpu_debugfs_fence_init(struct amdgpu_device *adev); |
201 |
+ void amdgpu_debugfs_firmware_init(struct amdgpu_device *adev); |
202 |
+ void amdgpu_debugfs_gem_init(struct amdgpu_device *adev); |
203 |
+-int amdgpu_debugfs_wait_dump(struct amdgpu_device *adev); |
204 |
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |
205 |
+index af9bdf16eefd4..b8d9004fb1635 100644 |
206 |
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |
207 |
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |
208 |
+@@ -2432,10 +2432,6 @@ static int amdgpu_device_ip_init(struct amdgpu_device *adev) |
209 |
+ if (!adev->gmc.xgmi.pending_reset) |
210 |
+ amdgpu_amdkfd_device_init(adev); |
211 |
+ |
212 |
+- r = amdgpu_amdkfd_resume_iommu(adev); |
213 |
+- if (r) |
214 |
+- goto init_failed; |
215 |
+- |
216 |
+ amdgpu_fru_get_product_info(adev); |
217 |
+ |
218 |
+ init_failed: |
219 |
+@@ -4466,10 +4462,6 @@ int amdgpu_device_pre_asic_reset(struct amdgpu_device *adev, |
220 |
+ if (reset_context->reset_req_dev == adev) |
221 |
+ job = reset_context->job; |
222 |
+ |
223 |
+- /* no need to dump if device is not in good state during probe period */ |
224 |
+- if (!adev->gmc.xgmi.pending_reset) |
225 |
+- amdgpu_debugfs_wait_dump(adev); |
226 |
+- |
227 |
+ if (amdgpu_sriov_vf(adev)) { |
228 |
+ /* stop the data exchange thread */ |
229 |
+ amdgpu_virt_fini_data_exchange(adev); |
230 |
+diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c |
231 |
+index 4a416231b24c8..a6afacc3b10cd 100644 |
232 |
+--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c |
233 |
++++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c |
234 |
+@@ -924,6 +924,9 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd, |
235 |
+ |
236 |
+ svm_migrate_init((struct amdgpu_device *)kfd->kgd); |
237 |
+ |
238 |
++ if(kgd2kfd_resume_iommu(kfd)) |
239 |
++ goto device_iommu_error; |
240 |
++ |
241 |
+ if (kfd_resume(kfd)) |
242 |
+ goto kfd_resume_error; |
243 |
+ |
244 |
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c |
245 |
+index 8080bba5b7a76..de9ec5ddb6c72 100644 |
246 |
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c |
247 |
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c |
248 |
+@@ -247,6 +247,7 @@ static ssize_t dp_link_settings_write(struct file *f, const char __user *buf, |
249 |
+ { |
250 |
+ struct amdgpu_dm_connector *connector = file_inode(f)->i_private; |
251 |
+ struct dc_link *link = connector->dc_link; |
252 |
++ struct dc *dc = (struct dc *)link->dc; |
253 |
+ struct dc_link_settings prefer_link_settings; |
254 |
+ char *wr_buf = NULL; |
255 |
+ const uint32_t wr_buf_size = 40; |
256 |
+@@ -313,7 +314,7 @@ static ssize_t dp_link_settings_write(struct file *f, const char __user *buf, |
257 |
+ prefer_link_settings.lane_count = param[0]; |
258 |
+ prefer_link_settings.link_rate = param[1]; |
259 |
+ |
260 |
+- dp_retrain_link_dp_test(link, &prefer_link_settings, false); |
261 |
++ dc_link_set_preferred_training_settings(dc, &prefer_link_settings, NULL, link, true); |
262 |
+ |
263 |
+ kfree(wr_buf); |
264 |
+ return size; |
265 |
+diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c |
266 |
+index de5f9c86b9a44..cafb0608ffb46 100644 |
267 |
+--- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c |
268 |
++++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c |
269 |
+@@ -2140,10 +2140,6 @@ static void __execlists_unhold(struct i915_request *rq) |
270 |
+ if (p->flags & I915_DEPENDENCY_WEAK) |
271 |
+ continue; |
272 |
+ |
273 |
+- /* Propagate any change in error status */ |
274 |
+- if (rq->fence.error) |
275 |
+- i915_request_set_error_once(w, rq->fence.error); |
276 |
+- |
277 |
+ if (w->engine != rq->engine) |
278 |
+ continue; |
279 |
+ |
280 |
+diff --git a/drivers/media/firewire/firedtv-avc.c b/drivers/media/firewire/firedtv-avc.c |
281 |
+index 2bf9467b917d1..71991f8638e6b 100644 |
282 |
+--- a/drivers/media/firewire/firedtv-avc.c |
283 |
++++ b/drivers/media/firewire/firedtv-avc.c |
284 |
+@@ -1165,7 +1165,11 @@ int avc_ca_pmt(struct firedtv *fdtv, char *msg, int length) |
285 |
+ read_pos += program_info_length; |
286 |
+ write_pos += program_info_length; |
287 |
+ } |
288 |
+- while (read_pos < length) { |
289 |
++ while (read_pos + 4 < length) { |
290 |
++ if (write_pos + 4 >= sizeof(c->operand) - 4) { |
291 |
++ ret = -EINVAL; |
292 |
++ goto out; |
293 |
++ } |
294 |
+ c->operand[write_pos++] = msg[read_pos++]; |
295 |
+ c->operand[write_pos++] = msg[read_pos++]; |
296 |
+ c->operand[write_pos++] = msg[read_pos++]; |
297 |
+@@ -1177,13 +1181,17 @@ int avc_ca_pmt(struct firedtv *fdtv, char *msg, int length) |
298 |
+ c->operand[write_pos++] = es_info_length >> 8; |
299 |
+ c->operand[write_pos++] = es_info_length & 0xff; |
300 |
+ if (es_info_length > 0) { |
301 |
++ if (read_pos >= length) { |
302 |
++ ret = -EINVAL; |
303 |
++ goto out; |
304 |
++ } |
305 |
+ pmt_cmd_id = msg[read_pos++]; |
306 |
+ if (pmt_cmd_id != 1 && pmt_cmd_id != 4) |
307 |
+ dev_err(fdtv->device, "invalid pmt_cmd_id %d at stream level\n", |
308 |
+ pmt_cmd_id); |
309 |
+ |
310 |
+- if (es_info_length > sizeof(c->operand) - 4 - |
311 |
+- write_pos) { |
312 |
++ if (es_info_length > sizeof(c->operand) - 4 - write_pos || |
313 |
++ es_info_length > length - read_pos) { |
314 |
+ ret = -EINVAL; |
315 |
+ goto out; |
316 |
+ } |
317 |
+diff --git a/drivers/media/firewire/firedtv-ci.c b/drivers/media/firewire/firedtv-ci.c |
318 |
+index 9363d005e2b61..e0d57e09dab0c 100644 |
319 |
+--- a/drivers/media/firewire/firedtv-ci.c |
320 |
++++ b/drivers/media/firewire/firedtv-ci.c |
321 |
+@@ -134,6 +134,8 @@ static int fdtv_ca_pmt(struct firedtv *fdtv, void *arg) |
322 |
+ } else { |
323 |
+ data_length = msg->msg[3]; |
324 |
+ } |
325 |
++ if (data_length > sizeof(msg->msg) - data_pos) |
326 |
++ return -EINVAL; |
327 |
+ |
328 |
+ return avc_ca_pmt(fdtv, &msg->msg[data_pos], data_length); |
329 |
+ } |
330 |
+diff --git a/drivers/net/ethernet/sfc/ethtool_common.c b/drivers/net/ethernet/sfc/ethtool_common.c |
331 |
+index bf1443539a1a4..bd552c7dffcb1 100644 |
332 |
+--- a/drivers/net/ethernet/sfc/ethtool_common.c |
333 |
++++ b/drivers/net/ethernet/sfc/ethtool_common.c |
334 |
+@@ -563,20 +563,14 @@ int efx_ethtool_get_link_ksettings(struct net_device *net_dev, |
335 |
+ { |
336 |
+ struct efx_nic *efx = netdev_priv(net_dev); |
337 |
+ struct efx_link_state *link_state = &efx->link_state; |
338 |
+- u32 supported; |
339 |
+ |
340 |
+ mutex_lock(&efx->mac_lock); |
341 |
+ efx_mcdi_phy_get_link_ksettings(efx, cmd); |
342 |
+ mutex_unlock(&efx->mac_lock); |
343 |
+ |
344 |
+ /* Both MACs support pause frames (bidirectional and respond-only) */ |
345 |
+- ethtool_convert_link_mode_to_legacy_u32(&supported, |
346 |
+- cmd->link_modes.supported); |
347 |
+- |
348 |
+- supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause; |
349 |
+- |
350 |
+- ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, |
351 |
+- supported); |
352 |
++ ethtool_link_ksettings_add_link_mode(cmd, supported, Pause); |
353 |
++ ethtool_link_ksettings_add_link_mode(cmd, supported, Asym_Pause); |
354 |
+ |
355 |
+ if (LOOPBACK_INTERNAL(efx)) { |
356 |
+ cmd->base.speed = link_state->speed; |
357 |
+diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c |
358 |
+index ec913ec991f3f..6e91bdb2e08d4 100644 |
359 |
+--- a/drivers/net/wireless/ath/wcn36xx/main.c |
360 |
++++ b/drivers/net/wireless/ath/wcn36xx/main.c |
361 |
+@@ -604,15 +604,6 @@ static int wcn36xx_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, |
362 |
+ } |
363 |
+ } |
364 |
+ } |
365 |
+- /* FIXME: Only enable bmps support when encryption is enabled. |
366 |
+- * For any reasons, when connected to open/no-security BSS, |
367 |
+- * the wcn36xx controller in bmps mode does not forward |
368 |
+- * 'wake-up' beacons despite AP sends DTIM with station AID. |
369 |
+- * It could be due to a firmware issue or to the way driver |
370 |
+- * configure the station. |
371 |
+- */ |
372 |
+- if (vif->type == NL80211_IFTYPE_STATION) |
373 |
+- vif_priv->allow_bmps = true; |
374 |
+ break; |
375 |
+ case DISABLE_KEY: |
376 |
+ if (!(IEEE80211_KEY_FLAG_PAIRWISE & key_conf->flags)) { |
377 |
+@@ -913,7 +904,6 @@ static void wcn36xx_bss_info_changed(struct ieee80211_hw *hw, |
378 |
+ vif->addr, |
379 |
+ bss_conf->aid); |
380 |
+ vif_priv->sta_assoc = false; |
381 |
+- vif_priv->allow_bmps = false; |
382 |
+ wcn36xx_smd_set_link_st(wcn, |
383 |
+ bss_conf->bssid, |
384 |
+ vif->addr, |
385 |
+diff --git a/drivers/net/wireless/ath/wcn36xx/pmc.c b/drivers/net/wireless/ath/wcn36xx/pmc.c |
386 |
+index 2d0780fefd477..2936aaf532738 100644 |
387 |
+--- a/drivers/net/wireless/ath/wcn36xx/pmc.c |
388 |
++++ b/drivers/net/wireless/ath/wcn36xx/pmc.c |
389 |
+@@ -23,10 +23,7 @@ int wcn36xx_pmc_enter_bmps_state(struct wcn36xx *wcn, |
390 |
+ { |
391 |
+ int ret = 0; |
392 |
+ struct wcn36xx_vif *vif_priv = wcn36xx_vif_to_priv(vif); |
393 |
+- |
394 |
+- if (!vif_priv->allow_bmps) |
395 |
+- return -ENOTSUPP; |
396 |
+- |
397 |
++ /* TODO: Make sure the TX chain clean */ |
398 |
+ ret = wcn36xx_smd_enter_bmps(wcn, vif); |
399 |
+ if (!ret) { |
400 |
+ wcn36xx_dbg(WCN36XX_DBG_PMC, "Entered BMPS\n"); |
401 |
+diff --git a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h |
402 |
+index add6e527e8330..e9560f35e9bcf 100644 |
403 |
+--- a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h |
404 |
++++ b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h |
405 |
+@@ -128,7 +128,6 @@ struct wcn36xx_vif { |
406 |
+ enum wcn36xx_hal_bss_type bss_type; |
407 |
+ |
408 |
+ /* Power management */ |
409 |
+- bool allow_bmps; |
410 |
+ enum wcn36xx_power_state pw_state; |
411 |
+ |
412 |
+ u8 bss_index; |
413 |
+diff --git a/drivers/soc/imx/gpcv2.c b/drivers/soc/imx/gpcv2.c |
414 |
+index 34a9ac1f2b9b1..8b7a01773aec2 100644 |
415 |
+--- a/drivers/soc/imx/gpcv2.c |
416 |
++++ b/drivers/soc/imx/gpcv2.c |
417 |
+@@ -244,6 +244,8 @@ static int imx_pgc_power_up(struct generic_pm_domain *genpd) |
418 |
+ goto out_regulator_disable; |
419 |
+ } |
420 |
+ |
421 |
++ reset_control_assert(domain->reset); |
422 |
++ |
423 |
+ if (domain->bits.pxx) { |
424 |
+ /* request the domain to power up */ |
425 |
+ regmap_update_bits(domain->regmap, GPC_PU_PGC_SW_PUP_REQ, |
426 |
+@@ -266,8 +268,6 @@ static int imx_pgc_power_up(struct generic_pm_domain *genpd) |
427 |
+ GPC_PGC_CTRL_PCR); |
428 |
+ } |
429 |
+ |
430 |
+- reset_control_assert(domain->reset); |
431 |
+- |
432 |
+ /* delay for reset to propagate */ |
433 |
+ udelay(5); |
434 |
+ |
435 |
+diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c |
436 |
+index 7ee6e4cc0d89e..00d35fe1fef0b 100644 |
437 |
+--- a/drivers/usb/core/hcd.c |
438 |
++++ b/drivers/usb/core/hcd.c |
439 |
+@@ -2795,7 +2795,6 @@ int usb_add_hcd(struct usb_hcd *hcd, |
440 |
+ { |
441 |
+ int retval; |
442 |
+ struct usb_device *rhdev; |
443 |
+- struct usb_hcd *shared_hcd; |
444 |
+ |
445 |
+ if (!hcd->skip_phy_initialization && usb_hcd_is_primary_hcd(hcd)) { |
446 |
+ hcd->phy_roothub = usb_phy_roothub_alloc(hcd->self.sysdev); |
447 |
+@@ -2956,26 +2955,13 @@ int usb_add_hcd(struct usb_hcd *hcd, |
448 |
+ goto err_hcd_driver_start; |
449 |
+ } |
450 |
+ |
451 |
+- /* starting here, usbcore will pay attention to the shared HCD roothub */ |
452 |
+- shared_hcd = hcd->shared_hcd; |
453 |
+- if (!usb_hcd_is_primary_hcd(hcd) && shared_hcd && HCD_DEFER_RH_REGISTER(shared_hcd)) { |
454 |
+- retval = register_root_hub(shared_hcd); |
455 |
+- if (retval != 0) |
456 |
+- goto err_register_root_hub; |
457 |
+- |
458 |
+- if (shared_hcd->uses_new_polling && HCD_POLL_RH(shared_hcd)) |
459 |
+- usb_hcd_poll_rh_status(shared_hcd); |
460 |
+- } |
461 |
+- |
462 |
+ /* starting here, usbcore will pay attention to this root hub */ |
463 |
+- if (!HCD_DEFER_RH_REGISTER(hcd)) { |
464 |
+- retval = register_root_hub(hcd); |
465 |
+- if (retval != 0) |
466 |
+- goto err_register_root_hub; |
467 |
++ retval = register_root_hub(hcd); |
468 |
++ if (retval != 0) |
469 |
++ goto err_register_root_hub; |
470 |
+ |
471 |
+- if (hcd->uses_new_polling && HCD_POLL_RH(hcd)) |
472 |
+- usb_hcd_poll_rh_status(hcd); |
473 |
+- } |
474 |
++ if (hcd->uses_new_polling && HCD_POLL_RH(hcd)) |
475 |
++ usb_hcd_poll_rh_status(hcd); |
476 |
+ |
477 |
+ return retval; |
478 |
+ |
479 |
+@@ -3013,7 +2999,6 @@ EXPORT_SYMBOL_GPL(usb_add_hcd); |
480 |
+ void usb_remove_hcd(struct usb_hcd *hcd) |
481 |
+ { |
482 |
+ struct usb_device *rhdev = hcd->self.root_hub; |
483 |
+- bool rh_registered; |
484 |
+ |
485 |
+ dev_info(hcd->self.controller, "remove, state %x\n", hcd->state); |
486 |
+ |
487 |
+@@ -3024,7 +3009,6 @@ void usb_remove_hcd(struct usb_hcd *hcd) |
488 |
+ |
489 |
+ dev_dbg(hcd->self.controller, "roothub graceful disconnect\n"); |
490 |
+ spin_lock_irq (&hcd_root_hub_lock); |
491 |
+- rh_registered = hcd->rh_registered; |
492 |
+ hcd->rh_registered = 0; |
493 |
+ spin_unlock_irq (&hcd_root_hub_lock); |
494 |
+ |
495 |
+@@ -3034,8 +3018,7 @@ void usb_remove_hcd(struct usb_hcd *hcd) |
496 |
+ cancel_work_sync(&hcd->died_work); |
497 |
+ |
498 |
+ mutex_lock(&usb_bus_idr_lock); |
499 |
+- if (rh_registered) |
500 |
+- usb_disconnect(&rhdev); /* Sets rhdev to NULL */ |
501 |
++ usb_disconnect(&rhdev); /* Sets rhdev to NULL */ |
502 |
+ mutex_unlock(&usb_bus_idr_lock); |
503 |
+ |
504 |
+ /* |
505 |
+diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c |
506 |
+index 541fe4dcc43a2..902f410874e8e 100644 |
507 |
+--- a/drivers/usb/host/xhci.c |
508 |
++++ b/drivers/usb/host/xhci.c |
509 |
+@@ -692,7 +692,6 @@ int xhci_run(struct usb_hcd *hcd) |
510 |
+ if (ret) |
511 |
+ xhci_free_command(xhci, command); |
512 |
+ } |
513 |
+- set_bit(HCD_FLAG_DEFER_RH_REGISTER, &hcd->flags); |
514 |
+ xhci_dbg_trace(xhci, trace_xhci_dbg_init, |
515 |
+ "Finished xhci_run for USB2 roothub"); |
516 |
+ |
517 |
+diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h |
518 |
+index 2c1fc9212cf28..548a028f2dabb 100644 |
519 |
+--- a/include/linux/usb/hcd.h |
520 |
++++ b/include/linux/usb/hcd.h |
521 |
+@@ -124,7 +124,6 @@ struct usb_hcd { |
522 |
+ #define HCD_FLAG_RH_RUNNING 5 /* root hub is running? */ |
523 |
+ #define HCD_FLAG_DEAD 6 /* controller has died? */ |
524 |
+ #define HCD_FLAG_INTF_AUTHORIZED 7 /* authorize interfaces? */ |
525 |
+-#define HCD_FLAG_DEFER_RH_REGISTER 8 /* Defer roothub registration */ |
526 |
+ |
527 |
+ /* The flags can be tested using these macros; they are likely to |
528 |
+ * be slightly faster than test_bit(). |
529 |
+@@ -135,7 +134,6 @@ struct usb_hcd { |
530 |
+ #define HCD_WAKEUP_PENDING(hcd) ((hcd)->flags & (1U << HCD_FLAG_WAKEUP_PENDING)) |
531 |
+ #define HCD_RH_RUNNING(hcd) ((hcd)->flags & (1U << HCD_FLAG_RH_RUNNING)) |
532 |
+ #define HCD_DEAD(hcd) ((hcd)->flags & (1U << HCD_FLAG_DEAD)) |
533 |
+-#define HCD_DEFER_RH_REGISTER(hcd) ((hcd)->flags & (1U << HCD_FLAG_DEFER_RH_REGISTER)) |
534 |
+ |
535 |
+ /* |
536 |
+ * Specifies if interfaces are authorized by default |
537 |
+diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c |
538 |
+index 8929d9abe8aa8..74e5bd2cc9329 100644 |
539 |
+--- a/sound/usb/quirks.c |
540 |
++++ b/sound/usb/quirks.c |
541 |
+@@ -1887,6 +1887,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = { |
542 |
+ QUIRK_FLAG_SHARE_MEDIA_DEVICE | QUIRK_FLAG_ALIGN_TRANSFER), |
543 |
+ DEVICE_FLG(0x21b4, 0x0081, /* AudioQuest DragonFly */ |
544 |
+ QUIRK_FLAG_GET_SAMPLE_RATE), |
545 |
++ DEVICE_FLG(0x2708, 0x0002, /* Audient iD14 */ |
546 |
++ QUIRK_FLAG_IGNORE_CTL_ERROR), |
547 |
+ DEVICE_FLG(0x2912, 0x30c8, /* Audioengine D1 */ |
548 |
+ QUIRK_FLAG_GET_SAMPLE_RATE), |
549 |
+ DEVICE_FLG(0x30be, 0x0101, /* Schiit Hel */ |