]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/4.19.27/usb-dwc3-gadget-fix-the-uninitialized-link_state-whe.patch
Linux 4.14.105
[thirdparty/kernel/stable-queue.git] / releases / 4.19.27 / usb-dwc3-gadget-fix-the-uninitialized-link_state-whe.patch
1 From 54750ed4b67023d6fc0618684e49463a809833c7 Mon Sep 17 00:00:00 2001
2 From: Zeng Tao <prime.zeng@hisilicon.com>
3 Date: Wed, 26 Dec 2018 19:22:00 +0800
4 Subject: usb: dwc3: gadget: Fix the uninitialized link_state when udc starts
5
6 [ Upstream commit 88b1bb1f3b88e0bf20b05d543a53a5b99bd7ceb6 ]
7
8 Currently the link_state is uninitialized and the default value is 0(U0)
9 before the first time we start the udc, and after we start the udc then
10 stop the udc, the link_state will be undefined.
11 We may have the following warnings if we start the udc again with
12 an undefined link_state:
13
14 WARNING: CPU: 0 PID: 327 at drivers/usb/dwc3/gadget.c:294 dwc3_send_gadget_ep_cmd+0x304/0x308
15 dwc3 100e0000.hidwc3_0: wakeup failed --> -22
16 [...]
17 Call Trace:
18 [<c010f270>] (unwind_backtrace) from [<c010b3d8>] (show_stack+0x10/0x14)
19 [<c010b3d8>] (show_stack) from [<c034a4dc>] (dump_stack+0x84/0x98)
20 [<c034a4dc>] (dump_stack) from [<c0118000>] (__warn+0xe8/0x100)
21 [<c0118000>] (__warn) from [<c0118050>](warn_slowpath_fmt+0x38/0x48)
22 [<c0118050>] (warn_slowpath_fmt) from [<c0442ec0>](dwc3_send_gadget_ep_cmd+0x304/0x308)
23 [<c0442ec0>] (dwc3_send_gadget_ep_cmd) from [<c0445e68>](dwc3_ep0_start_trans+0x48/0xf4)
24 [<c0445e68>] (dwc3_ep0_start_trans) from [<c0446750>](dwc3_ep0_out_start+0x64/0x80)
25 [<c0446750>] (dwc3_ep0_out_start) from [<c04451c0>](__dwc3_gadget_start+0x1e0/0x278)
26 [<c04451c0>] (__dwc3_gadget_start) from [<c04452e0>](dwc3_gadget_start+0x88/0x10c)
27 [<c04452e0>] (dwc3_gadget_start) from [<c045ee54>](udc_bind_to_driver+0x88/0xbc)
28 [<c045ee54>] (udc_bind_to_driver) from [<c045f29c>](usb_gadget_probe_driver+0xf8/0x140)
29 [<c045f29c>] (usb_gadget_probe_driver) from [<bf005424>](gadget_dev_desc_UDC_store+0xac/0xc4 [libcomposite])
30 [<bf005424>] (gadget_dev_desc_UDC_store [libcomposite]) from[<c023d8e0>] (configfs_write_file+0xd4/0x160)
31 [<c023d8e0>] (configfs_write_file) from [<c01d51e8>] (__vfs_write+0x1c/0x114)
32 [<c01d51e8>] (__vfs_write) from [<c01d5ff4>] (vfs_write+0xa4/0x168)
33 [<c01d5ff4>] (vfs_write) from [<c01d6d40>] (SyS_write+0x3c/0x90)
34 [<c01d6d40>] (SyS_write) from [<c0107400>] (ret_fast_syscall+0x0/0x3c)
35
36 Signed-off-by: Zeng Tao <prime.zeng@hisilicon.com>
37 Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
38 Signed-off-by: Sasha Levin <sashal@kernel.org>
39 ---
40 drivers/usb/dwc3/gadget.c | 1 +
41 1 file changed, 1 insertion(+)
42
43 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
44 index f6cd7feeb1c4f..700fb626ad03b 100644
45 --- a/drivers/usb/dwc3/gadget.c
46 +++ b/drivers/usb/dwc3/gadget.c
47 @@ -1864,6 +1864,7 @@ static int __dwc3_gadget_start(struct dwc3 *dwc)
48
49 /* begin to receive SETUP packets */
50 dwc->ep0state = EP0_SETUP_PHASE;
51 + dwc->link_state = DWC3_LINK_STATE_SS_DIS;
52 dwc3_ep0_out_start(dwc);
53
54 dwc3_gadget_enable_irq(dwc);
55 --
56 2.19.1
57