diff mbox

mt76x2e MCU message 31 timed out

Message ID 20180711122947.GA5309@redhat.com (mailing list archive)
State RFC
Delegated to: Kalle Valo
Headers show

Commit Message

Stanislaw Gruszka July 11, 2018, 12:29 p.m. UTC
(correct Felix email address)

On Fri, Jun 22, 2018 at 05:51:53PM +0200, Janusz Dziedzic wrote:
> 2018-06-22 16:48 GMT+02:00 Stanislaw Gruszka <sgruszka@redhat.com>:
> > Hi
> >
> > On Fri, Jun 22, 2018 at 10:37:35AM +0200, Janusz Dziedzic wrote:
> >> Have this card in my laptop:
> >> 02:00.0 Network controller: MEDIATEK Corp. Device 7612
> >>
> >> [    8.478104] mt76x2e 0000:02:00.0: ASIC revision: 76120044
> >> [    8.489582] mt76x2e 0000:02:00.0: ROM patch already applied
> >> [    8.833476] mt76x2e 0000:02:00.0: Firmware Version: 0.0.00
> >> [    8.833477] mt76x2e 0000:02:00.0: Build: 1
> >> [    8.833479] mt76x2e 0000:02:00.0: Build Time: 201507311614____
> >> [    8.856115] mt76x2e 0000:02:00.0: Firmware running!
> >> [    9.558075] mt76x2e 0000:02:00.0 wlp2s0: renamed from wlan1
> >
> > I'm just curious. Does the card was installed in the laptop by default?
> > If so what is the model of the laptop?
> >
> No, I just buy this card on aliexpress and put into some dell (MTK
> MT7612 2x2 half miniPCIE).
> 
> >> Linux test4 4.17.0-rc7+ #5 SMP Mon May 28 12:35:22 CEST 2018 x86_64 GNU/Linux
> >>
> >> Seems iw scan works correctly and first assoc. After will run some
> >> traffic (iperf in such case) get:
> >>
> >> [  432.372081] wlp2s0: associate with 52:b4:f7:f0:16:c2 (try 2/3)
> >> [  432.375255] wlp2s0: RX AssocResp from 52:b4:f7:f0:16:c2
> >> (capab=0x511 status=0 aid=2)
> >> [  432.375336] wlp2s0: associated
> >> [  432.451097] IPv6: ADDRCONF(NETDEV_CHANGE): wlp2s0: link becomes ready
> >> [  522.562157] mt76x2e 0000:02:00.0: MCU message 31 (seq 13) timed out
> >> [  524.610281] mt76x2e 0000:02:00.0: MCU message 31 (seq 14) timed out
> >> [  526.658384] mt76x2e 0000:02:00.0: MCU message 31 (seq 15) timed out
> >> [  528.258455] mt76x2e 0000:02:00.0: MCU message 30 (seq 1) timed out
> >> [  529.282499] mt76x2e 0000:02:00.0: MCU message 30 (seq 2) timed out
> >> [  530.402544] mt76x2e 0000:02:00.0: MCU message 30 (seq 3) timed out
> >> [  531.426587] mt76x2e 0000:02:00.0: MCU message 30 (seq 4) timed out
> >> [  531.427444] wlp2s0: authenticate with 52:b4:f7:f0:14:ac
> >> [  532.450624] mt76x2e 0000:02:00.0: MCU message 30 (seq 5) timed out
> >> [  533.474666] mt76x2e 0000:02:00.0: MCU message 30 (seq 6) timed out
> >> [  534.498709] mt76x2e 0000:02:00.0: MCU message 30 (seq 7) timed out
> >> [  535.522736] mt76x2e 0000:02:00.0: MCU message 30 (seq 8) timed out
> >> [  535.522807] wlp2s0: send auth to 52:b4:f7:f0:14:ac (try 1/3)
> >> [  535.726740] wlp2s0: send auth to 52:b4:f7:f0:14:ac (try 2/3)
> >> [  535.930742] wlp2s0: send auth to 52:b4:f7:f0:14:ac (try 3/3)
> >> [  536.134747] wlp2s0: authentication with 52:b4:f7:f0:14:ac timed out
> >
> > I observed quite similar issue on some rt2800 devices when
> > I applied  this patch:
> > https://github.com/sgruszka/wireless-drivers-next/commit/846d205edd8c36d1b7828fee54bf4cf40bf8cb1a
> > It works on some devices and does not work on others with similar
> > symptoms - correctly associate but stop to work as soon as some
> > data traffic is performed.
> >
> > So, I would check if send IEEE80211_TX_CTL_RATE_CTRL_PROBE frames
> > with qsel = MT_QSEL_EDCA would help.
> >
> Thanks, will check this.

I guess it does not help? You can check attached patch instead
(note I only compile tested it).

Regards
Stanislaw
> 
> > Another thing to try is checkout vendor driver and see if there is need
> > to add extra code if device is_mt7612() .
> >
> > Regards
> > Stanislaw
> 
> 
> 
> -- 
> Janusz Dziedzic
From 4f7cf0a78dd34b88f8158197e911624a5c4a862a Mon Sep 17 00:00:00 2001
From: Stanislaw Gruszka <sgruszka@redhat.com>
Date: Wed, 11 Jul 2018 14:22:28 +0200
Subject: [PATCH v2] mt76x2: reset HW before probe

Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
 drivers/net/wireless/mediatek/mt76/mt76x2.h      | 1 +
 drivers/net/wireless/mediatek/mt76/mt76x2_init.c | 2 +-
 drivers/net/wireless/mediatek/mt76/mt76x2_pci.c  | 2 ++
 3 files changed, 4 insertions(+), 1 deletion(-)

Comments

Janusz Dziedzic July 11, 2018, 6:02 p.m. UTC | #1
2018-07-11 14:29 GMT+02:00 Stanislaw Gruszka <sgruszka@redhat.com>:
> (correct Felix email address)
>
> On Fri, Jun 22, 2018 at 05:51:53PM +0200, Janusz Dziedzic wrote:
>> 2018-06-22 16:48 GMT+02:00 Stanislaw Gruszka <sgruszka@redhat.com>:
>> > Hi
>> >
>> > On Fri, Jun 22, 2018 at 10:37:35AM +0200, Janusz Dziedzic wrote:
>> >> Have this card in my laptop:
>> >> 02:00.0 Network controller: MEDIATEK Corp. Device 7612
>> >>
>> >> [    8.478104] mt76x2e 0000:02:00.0: ASIC revision: 76120044
>> >> [    8.489582] mt76x2e 0000:02:00.0: ROM patch already applied
>> >> [    8.833476] mt76x2e 0000:02:00.0: Firmware Version: 0.0.00
>> >> [    8.833477] mt76x2e 0000:02:00.0: Build: 1
>> >> [    8.833479] mt76x2e 0000:02:00.0: Build Time: 201507311614____
>> >> [    8.856115] mt76x2e 0000:02:00.0: Firmware running!
>> >> [    9.558075] mt76x2e 0000:02:00.0 wlp2s0: renamed from wlan1
>> >
>> > I'm just curious. Does the card was installed in the laptop by default?
>> > If so what is the model of the laptop?
>> >
>> No, I just buy this card on aliexpress and put into some dell (MTK
>> MT7612 2x2 half miniPCIE).
>>
>> >> Linux test4 4.17.0-rc7+ #5 SMP Mon May 28 12:35:22 CEST 2018 x86_64 GNU/Linux
>> >>
>> >> Seems iw scan works correctly and first assoc. After will run some
>> >> traffic (iperf in such case) get:
>> >>
>> >> [  432.372081] wlp2s0: associate with 52:b4:f7:f0:16:c2 (try 2/3)
>> >> [  432.375255] wlp2s0: RX AssocResp from 52:b4:f7:f0:16:c2
>> >> (capab=0x511 status=0 aid=2)
>> >> [  432.375336] wlp2s0: associated
>> >> [  432.451097] IPv6: ADDRCONF(NETDEV_CHANGE): wlp2s0: link becomes ready
>> >> [  522.562157] mt76x2e 0000:02:00.0: MCU message 31 (seq 13) timed out
>> >> [  524.610281] mt76x2e 0000:02:00.0: MCU message 31 (seq 14) timed out
>> >> [  526.658384] mt76x2e 0000:02:00.0: MCU message 31 (seq 15) timed out
>> >> [  528.258455] mt76x2e 0000:02:00.0: MCU message 30 (seq 1) timed out
>> >> [  529.282499] mt76x2e 0000:02:00.0: MCU message 30 (seq 2) timed out
>> >> [  530.402544] mt76x2e 0000:02:00.0: MCU message 30 (seq 3) timed out
>> >> [  531.426587] mt76x2e 0000:02:00.0: MCU message 30 (seq 4) timed out
>> >> [  531.427444] wlp2s0: authenticate with 52:b4:f7:f0:14:ac
>> >> [  532.450624] mt76x2e 0000:02:00.0: MCU message 30 (seq 5) timed out
>> >> [  533.474666] mt76x2e 0000:02:00.0: MCU message 30 (seq 6) timed out
>> >> [  534.498709] mt76x2e 0000:02:00.0: MCU message 30 (seq 7) timed out
>> >> [  535.522736] mt76x2e 0000:02:00.0: MCU message 30 (seq 8) timed out
>> >> [  535.522807] wlp2s0: send auth to 52:b4:f7:f0:14:ac (try 1/3)
>> >> [  535.726740] wlp2s0: send auth to 52:b4:f7:f0:14:ac (try 2/3)
>> >> [  535.930742] wlp2s0: send auth to 52:b4:f7:f0:14:ac (try 3/3)
>> >> [  536.134747] wlp2s0: authentication with 52:b4:f7:f0:14:ac timed out
>> >
>> > I observed quite similar issue on some rt2800 devices when
>> > I applied  this patch:
>> > https://github.com/sgruszka/wireless-drivers-next/commit/846d205edd8c36d1b7828fee54bf4cf40bf8cb1a
>> > It works on some devices and does not work on others with similar
>> > symptoms - correctly associate but stop to work as soon as some
>> > data traffic is performed.
>> >
>> > So, I would check if send IEEE80211_TX_CTL_RATE_CTRL_PROBE frames
>> > with qsel = MT_QSEL_EDCA would help.
>> >
>> Thanks, will check this.
>
> I guess it does not help? You can check attached patch instead
> (note I only compile tested it).
>
Sure, result below:

root@test4:~# uname -a
Linux test4 4.18.0-rc4+ #7 SMP Wed Jul 11 15:43:36 CEST 2018 x86_64 GNU/Linux

root@test4:~# lspci |grep MEDIA
02:00.0 Network controller: MEDIATEK Corp. Device 7612

test@test4:~$ iperf -s -i2
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.1.114 port 5001 connected with 192.168.1.103 port 51156
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0- 2.0 sec  3.21 MBytes  13.5 Mbits/sec
[  4]  2.0- 4.0 sec  0.00 Bytes  0.00 bits/sec
[  4]  4.0- 6.0 sec  0.00 Bytes  0.00 bits/sec
[  4]  6.0- 8.0 sec  0.00 Bytes  0.00 bits/sec
[  4]  8.0-10.0 sec  0.00 Bytes  0.00 bits/sec
...

root@test4:~# modprobe -r mt76x2e
root@test4:~# modprobe mt76x2e
root@test4:~# ifconfig wlp2s0 up
SIOCSIFFLAGS: Connection timed out

[ 1222.427751] wlp2s0: associated
[ 1222.530438] IPv6: ADDRCONF(NETDEV_CHANGE): wlp2s0: link becomes ready
[ 1570.177690] wlp2s0: deauthenticating from e2:b4:f7:00:17:4e by
local choice (Reason: 3=DEAUTH_LEAVING)
[ 1586.686971] mt76x2e 0000:02:00.0: ASIC revision: 76120044
[ 1586.699224] mt76x2e 0000:02:00.0: ROM patch build: 20141115060606a
[ 1586.700652] mt76x2e 0000:02:00.0: Firmware Version: 0.0.00
[ 1586.700653] mt76x2e 0000:02:00.0: Build: 1
[ 1586.700655] mt76x2e 0000:02:00.0: Build Time: 201507311614____
[ 1586.721801] mt76x2e 0000:02:00.0: Firmware running!
[ 1587.737844] mt76x2e 0000:02:00.0: MCU message 1 (seq 1) timed out
[ 1587.738317] ieee80211 phy2: Selected rate control algorithm 'minstrel_ht'
[ 1587.741315] mt76x2e 0000:02:00.0 wlp2s0: renamed from wlan0
[ 1609.113782] mt76x2e 0000:02:00.0: MCU message 20 (seq 2) timed out
[ 1627.609749] mt76x2e 0000:02:00.0: MCU message 20 (seq 3) timed out
[ 1716.985370] mt76x2e 0000:02:00.0: MCU message 20 (seq 4) timed out


root@test4:~# modprobe -r mt76x2e
root@test4:~# modprobe  mt76x2e
root@test4:~# ifconfig wlp2s0 up
root@test4:~#

Seems when data stall (iperf) and next reload driver, works much
better - 1st or 2nd try for ifconfig up works correctly. So, for sure
patch improve hw (re)start.

Regarding iperf - as before :)

BR
Janusz

> Regards
> Stanislaw
>>
>> > Another thing to try is checkout vendor driver and see if there is need
>> > to add extra code if device is_mt7612() .
>> >
>> > Regards
>> > Stanislaw
>>
>>
>>
>> --
>> Janusz Dziedzic
diff mbox

Patch

diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2.h b/drivers/net/wireless/mediatek/mt76/mt76x2.h
index 71fcfa44fb2e..33318ac8fe81 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2.h
@@ -180,6 +180,7 @@  static inline void mt76x2_irq_disable(struct mt76x2_dev *dev, u32 mask)
 
 struct mt76x2_dev *mt76x2_alloc_device(struct device *pdev);
 int mt76x2_register_device(struct mt76x2_dev *dev);
+void mt76x2_set_wlan_state(struct mt76x2_dev *dev, bool enable);
 void mt76x2_init_debugfs(struct mt76x2_dev *dev);
 
 irqreturn_t mt76x2_irq_handler(int irq, void *dev_instance);
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2_init.c b/drivers/net/wireless/mediatek/mt76/mt76x2_init.c
index 79ab93613e06..782b350fee65 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2_init.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2_init.c
@@ -498,7 +498,7 @@  void mt76x2_set_tx_ackto(struct mt76x2_dev *dev)
 		       MT_TX_TIMEOUT_CFG_ACKTO, ackto);
 }
 
-static void
+void
 mt76x2_set_wlan_state(struct mt76x2_dev *dev, bool enable)
 {
 	u32 val = mt76_rr(dev, MT_WLAN_FUN_CTRL);
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2_pci.c b/drivers/net/wireless/mediatek/mt76/mt76x2_pci.c
index e66f047ea448..50f29d8393f1 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x2_pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x2_pci.c
@@ -54,6 +54,8 @@ 
 
 	mt76_mmio_init(&dev->mt76, pcim_iomap_table(pdev)[0]);
 
+	mt76x2_set_wlan_state(dev, false);
+
 	dev->mt76.rev = mt76_rr(dev, MT_ASIC_VERSION);
 	dev_info(dev->mt76.dev, "ASIC revision: %08x\n", dev->mt76.rev);