]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
fixes for 4.19
authorSasha Levin <sashal@kernel.org>
Wed, 4 Sep 2019 12:48:27 +0000 (08:48 -0400)
committerSasha Levin <sashal@kernel.org>
Wed, 4 Sep 2019 12:48:27 +0000 (08:48 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.19/mt76-mt76x0u-do-not-reset-radio-on-resume.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/mt76-mt76x0u-do-not-reset-radio-on-resume.patch b/queue-4.19/mt76-mt76x0u-do-not-reset-radio-on-resume.patch
new file mode 100644 (file)
index 0000000..d3906af
--- /dev/null
@@ -0,0 +1,98 @@
+From 31c69a3e94bf1ad8128a1d8090ea6021746a1cfe Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Wed, 4 Sep 2019 10:07:10 +0200
+Subject: mt76: mt76x0u: do not reset radio on resume
+
+commit 8f2d163cb26da87e7d8e1677368b8ba1ba4d30b3 upstream.
+
+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>
+Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/wireless/mediatek/mt76/mt76x0/init.c   | 4 ++--
+ drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0.h | 2 +-
+ drivers/net/wireless/mediatek/mt76/mt76x0/usb.c    | 4 ++--
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/init.c b/drivers/net/wireless/mediatek/mt76/mt76x0/init.c
+index 0a3e046d78db3..da2ba51dec352 100644
+--- a/drivers/net/wireless/mediatek/mt76/mt76x0/init.c
++++ b/drivers/net/wireless/mediatek/mt76/mt76x0/init.c
+@@ -369,7 +369,7 @@ static void mt76x0_stop_hardware(struct mt76x0_dev *dev)
+       mt76x0_chip_onoff(dev, false, false);
+ }
+-int mt76x0_init_hardware(struct mt76x0_dev *dev)
++int mt76x0_init_hardware(struct mt76x0_dev *dev, bool reset)
+ {
+       static const u16 beacon_offsets[16] = {
+               /* 512 byte per beacon */
+@@ -382,7 +382,7 @@ int mt76x0_init_hardware(struct mt76x0_dev *dev)
+       dev->beacon_offsets = beacon_offsets;
+-      mt76x0_chip_onoff(dev, true, true);
++      mt76x0_chip_onoff(dev, true, reset);
+       ret = mt76x0_wait_asic_ready(dev);
+       if (ret)
+diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0.h b/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0.h
+index fc9857f61771c..f9dfe5097b099 100644
+--- a/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0.h
++++ b/drivers/net/wireless/mediatek/mt76/mt76x0/mt76x0.h
+@@ -279,7 +279,7 @@ void mt76x0_addr_wr(struct mt76x0_dev *dev, const u32 offset, const u8 *addr);
+ /* Init */
+ struct mt76x0_dev *mt76x0_alloc_device(struct device *dev);
+-int mt76x0_init_hardware(struct mt76x0_dev *dev);
++int mt76x0_init_hardware(struct mt76x0_dev *dev, bool reset);
+ int mt76x0_register_device(struct mt76x0_dev *dev);
+ void mt76x0_cleanup(struct mt76x0_dev *dev);
+ void mt76x0_chip_onoff(struct mt76x0_dev *dev, bool enable, bool reset);
+diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c b/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c
+index 54ae1f113be23..5aacb1f6a841d 100644
+--- a/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c
++++ b/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c
+@@ -300,7 +300,7 @@ static int mt76x0_probe(struct usb_interface *usb_intf,
+       if (!(mt76_rr(dev, MT_EFUSE_CTRL) & MT_EFUSE_CTRL_SEL))
+               dev_warn(dev->mt76.dev, "Warning: eFUSE not present\n");
+-      ret = mt76x0_init_hardware(dev);
++      ret = mt76x0_init_hardware(dev, true);
+       if (ret)
+               goto err;
+@@ -354,7 +354,7 @@ static int mt76x0_resume(struct usb_interface *usb_intf)
+       struct mt76x0_dev *dev = usb_get_intfdata(usb_intf);
+       int ret;
+-      ret = mt76x0_init_hardware(dev);
++      ret = mt76x0_init_hardware(dev, false);
+       if (ret)
+               return ret;
+-- 
+2.20.1
+
index 62b51ae1a28d2029cca0093c393fdb66bb56de0d..d82b3a32ce79a73bcd762a884d35b04195047c7a 100644 (file)
@@ -90,3 +90,4 @@ nfs-pass-error-information-to-the-pgio-error-cleanup.patch
 nfs-ensure-o_direct-reports-an-error-if-the-bytes-re.patch
 i2c-piix4-fix-port-selection-for-amd-family-16h-mode.patch
 x86-ptrace-fix-up-botched-merge-of-spectrev1-fix.patch
+mt76-mt76x0u-do-not-reset-radio-on-resume.patch