[5.3] mt76: mt76x0u: do not reset radio on resume
diff mbox series

Message ID 1563446290-2813-1-git-send-email-sgruszka@redhat.com
State Accepted
Commit 8f2d163cb26da87e7d8e1677368b8ba1ba4d30b3
Delegated to: Kalle Valo
Headers show
Series
  • [5.3] mt76: mt76x0u: do not reset radio on resume
Related show

Commit Message

Stanislaw Gruszka July 18, 2019, 10:38 a.m. UTC
On some machines mt76x0u firmware can hung during resume,
what result on messages like below:

[  475.480062] mt76x0 1-8:1.0: Error: MCU response pre-completed!
[  475.990066] mt76x0 1-8:1.0: Error: send MCU cmd failed:-110
[  475.990075] mt76x0 1-8:1.0: Error: MCU response pre-completed!
[  476.500003] mt76x0 1-8:1.0: Error: send MCU cmd failed:-110
[  476.500012] mt76x0 1-8:1.0: Error: MCU response pre-completed!
[  477.010046] mt76x0 1-8:1.0: Error: send MCU cmd failed:-110
[  477.010055] mt76x0 1-8:1.0: Error: MCU response pre-completed!
[  477.529997] mt76x0 1-8:1.0: Error: send MCU cmd failed:-110
[  477.530006] mt76x0 1-8:1.0: Error: MCU response pre-completed!
[  477.824907] mt76x0 1-8:1.0: Error: send MCU cmd failed:-71
[  477.824916] mt76x0 1-8:1.0: Error: MCU response pre-completed!
[  477.825029] usb 1-8: USB disconnect, device number 6

and possible whole system freeze.

This can be avoided, if we do not perform mt76x0_chip_onoff() reset.

Cc: stable@vger.kernel.org
Fixes: 134b2d0d1fcf ("mt76x0: init files")
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
 drivers/net/wireless/mediatek/mt76/mt76x0/usb.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Comments

Stanislaw Gruszka July 19, 2019, 5:48 a.m. UTC | #1
On Fri, Jul 19, 2019 at 12:45:23AM +0000, Sasha Levin wrote:
> v5.1.18: Failed to apply! Possible dependencies:
>     Unable to calculate
> 
> v4.19.59: Failed to apply! Possible dependencies:
<snip>

> How should we proceed with this patch?

I'll provide backported version of the patch for 4.19 and 5.1 
after it will be merged to Linus' tree.

Stanislaw
Kalle Valo Aug. 20, 2019, 1:58 p.m. UTC | #2
Stanislaw Gruszka <sgruszka@redhat.com> wrote:

> On some machines mt76x0u firmware can hung during resume,
> what result on messages like below:
> 
> [  475.480062] mt76x0 1-8:1.0: Error: MCU response pre-completed!
> [  475.990066] mt76x0 1-8:1.0: Error: send MCU cmd failed:-110
> [  475.990075] mt76x0 1-8:1.0: Error: MCU response pre-completed!
> [  476.500003] mt76x0 1-8:1.0: Error: send MCU cmd failed:-110
> [  476.500012] mt76x0 1-8:1.0: Error: MCU response pre-completed!
> [  477.010046] mt76x0 1-8:1.0: Error: send MCU cmd failed:-110
> [  477.010055] mt76x0 1-8:1.0: Error: MCU response pre-completed!
> [  477.529997] mt76x0 1-8:1.0: Error: send MCU cmd failed:-110
> [  477.530006] mt76x0 1-8:1.0: Error: MCU response pre-completed!
> [  477.824907] mt76x0 1-8:1.0: Error: send MCU cmd failed:-71
> [  477.824916] mt76x0 1-8:1.0: Error: MCU response pre-completed!
> [  477.825029] usb 1-8: USB disconnect, device number 6
> 
> and possible whole system freeze.
> 
> This can be avoided, if we do not perform mt76x0_chip_onoff() reset.
> 
> Cc: stable@vger.kernel.org
> Fixes: 134b2d0d1fcf ("mt76x0: init files")
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>

Patch applied to wireless-drivers.git, thanks.

8f2d163cb26d mt76: mt76x0u: do not reset radio on resume

Patch
diff mbox series

diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c b/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c
index 627ed1fc7b15..645f4d15fb61 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c
@@ -136,11 +136,11 @@  static int mt76x0u_start(struct ieee80211_hw *hw)
 	.release_buffered_frames = mt76_release_buffered_frames,
 };
 
-static int mt76x0u_init_hardware(struct mt76x02_dev *dev)
+static int mt76x0u_init_hardware(struct mt76x02_dev *dev, bool reset)
 {
 	int err;
 
-	mt76x0_chip_onoff(dev, true, true);
+	mt76x0_chip_onoff(dev, true, reset);
 
 	if (!mt76x02_wait_for_mac(&dev->mt76))
 		return -ETIMEDOUT;
@@ -173,7 +173,7 @@  static int mt76x0u_register_device(struct mt76x02_dev *dev)
 	if (err < 0)
 		goto out_err;
 
-	err = mt76x0u_init_hardware(dev);
+	err = mt76x0u_init_hardware(dev, true);
 	if (err < 0)
 		goto out_err;
 
@@ -309,7 +309,7 @@  static int __maybe_unused mt76x0_resume(struct usb_interface *usb_intf)
 	if (ret < 0)
 		goto err;
 
-	ret = mt76x0u_init_hardware(dev);
+	ret = mt76x0u_init_hardware(dev, false);
 	if (ret)
 		goto err;