]>
Commit | Line | Data |
---|---|---|
c5c12c9c AF |
1 | From 5bb6f6e1d44aa91323857715dfddb63337f8307b Mon Sep 17 00:00:00 2001 |
2 | From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= <bjorn@mork.no> | |
3 | Date: Sun, 3 Jul 2016 22:24:50 +0200 | |
4 | Subject: cdc_ncm: workaround for EM7455 "silent" data interface | |
5 | MIME-Version: 1.0 | |
6 | Content-Type: text/plain; charset=UTF-8 | |
7 | Content-Transfer-Encoding: 8bit | |
8 | ||
9 | [ Upstream commit c086e7096170390594c425114d98172bc9aceb8a ] | |
10 | ||
11 | Several Lenovo users have reported problems with their Sierra | |
12 | Wireless EM7455 modem. The driver has loaded successfully and | |
13 | the MBIM management channel has appeared to work, including | |
14 | establishing a connection to the mobile network. But no frames | |
15 | have been received over the data interface. | |
16 | ||
17 | The problem affects all EM7455 and MC7455, and is assumed to | |
18 | affect other modems based on the same Qualcomm chipset and | |
19 | baseband firmware. | |
20 | ||
21 | Testing narrowed the problem down to what seems to be a | |
22 | firmware timing bug during initialization. Adding a short sleep | |
23 | while probing is sufficient to make the problem disappear. | |
24 | Experiments have shown that 1-2 ms is too little to have any | |
25 | effect, while 10-20 ms is enough to reliably succeed. | |
26 | ||
27 | Reported-by: Stefan Armbruster <ml001@armbruster-it.de> | |
28 | Reported-by: Ralph Plawetzki <ralph@purejava.org> | |
29 | Reported-by: Andreas Fett <andreas.fett@secunet.com> | |
30 | Reported-by: Rasmus Lerdorf <rasmus@lerdorf.com> | |
31 | Reported-by: Samo Ratnik <samo.ratnik@gmail.com> | |
32 | Reported-and-tested-by: Aleksander Morgado <aleksander@aleksander.es> | |
33 | Signed-off-by: Bjørn Mork <bjorn@mork.no> | |
34 | Signed-off-by: David S. Miller <davem@davemloft.net> | |
35 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
36 | --- | |
37 | drivers/net/usb/cdc_ncm.c | 7 +++++++ | |
38 | 1 file changed, 7 insertions(+) | |
39 | ||
40 | diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c | |
41 | index c663722..584504e 100644 | |
42 | --- a/drivers/net/usb/cdc_ncm.c | |
43 | +++ b/drivers/net/usb/cdc_ncm.c | |
44 | @@ -438,6 +438,13 @@ advance: | |
45 | if (cdc_ncm_setup(dev)) | |
46 | goto error2; | |
47 | ||
48 | + /* Some firmwares need a pause here or they will silently fail | |
49 | + * to set up the interface properly. This value was decided | |
50 | + * empirically on a Sierra Wireless MC7455 running 02.08.02.00 | |
51 | + * firmware. | |
52 | + */ | |
53 | + usleep_range(10000, 20000); | |
54 | + | |
55 | /* configure data interface */ | |
56 | temp = usb_set_interface(dev->udev, iface_no, data_altsetting); | |
57 | if (temp) { | |
58 | -- | |
59 | cgit v0.12 | |
60 |