91 lines
3.3 KiB
Diff
91 lines
3.3 KiB
Diff
From: Sven Joachim <svenjoac@gmx.de>
|
|
Date: Mon, 31 Jul 2017 18:10:45 +0200
|
|
Subject: rtlwifi: Fix fallback firmware loading
|
|
Origin: https://git.kernel.org/linus/1d9b168d8ea9a0f51947d0e2f84856e77d2fe7ff
|
|
Bug-Debian: https://bugs.debian.org/869084
|
|
|
|
Commit f70e4df2b384 ("rtlwifi: Add code to read new versions of
|
|
firmware") added code to load an old firmware file if the new one is
|
|
not available. Unfortunately that code is never reached because
|
|
request_firmware_nowait() does not wait for the firmware to show up
|
|
and returns 0 even if the file is not there.
|
|
|
|
Use the existing fallback mechanism introduced by commit 62009b7f1279
|
|
("rtlwifi: rtl8192cu: Add new firmware") instead.
|
|
|
|
Fixes: f70e4df2b384 ("rtlwifi: Add code to read new versions of firmware")
|
|
Cc: stable@vger.kernel.org
|
|
Signed-off-by: Sven Joachim <svenjoac@gmx.de>
|
|
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
|
|
---
|
|
drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c | 17 +++++------------
|
|
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c | 17 +++++------------
|
|
2 files changed, 10 insertions(+), 24 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
|
|
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
|
|
@@ -187,18 +187,10 @@ int rtl8723be_init_sw_vars(struct ieee80
|
|
rtlpriv->io.dev, GFP_KERNEL, hw,
|
|
rtl_fw_cb);
|
|
if (err) {
|
|
- /* Failed to get firmware. Check if old version available */
|
|
- fw_name = "rtlwifi/rtl8723befw.bin";
|
|
- pr_info("Using firmware %s\n", fw_name);
|
|
- err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
|
|
- rtlpriv->io.dev, GFP_KERNEL, hw,
|
|
- rtl_fw_cb);
|
|
- if (err) {
|
|
- pr_err("Failed to request firmware!\n");
|
|
- vfree(rtlpriv->rtlhal.pfirmware);
|
|
- rtlpriv->rtlhal.pfirmware = NULL;
|
|
- return 1;
|
|
- }
|
|
+ pr_err("Failed to request firmware!\n");
|
|
+ vfree(rtlpriv->rtlhal.pfirmware);
|
|
+ rtlpriv->rtlhal.pfirmware = NULL;
|
|
+ return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
@@ -289,6 +281,7 @@ static const struct rtl_hal_cfg rtl8723b
|
|
.bar_id = 2,
|
|
.write_readback = true,
|
|
.name = "rtl8723be_pci",
|
|
+ .alt_fw_name = "rtlwifi/rtl8723befw.bin",
|
|
.ops = &rtl8723be_hal_ops,
|
|
.mod_params = &rtl8723be_mod_params,
|
|
.maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL,
|
|
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
|
|
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
|
|
@@ -216,18 +216,10 @@ int rtl8821ae_init_sw_vars(struct ieee80
|
|
rtlpriv->io.dev, GFP_KERNEL, hw,
|
|
rtl_fw_cb);
|
|
if (err) {
|
|
- /* Failed to get firmware. Check if old version available */
|
|
- fw_name = "rtlwifi/rtl8821aefw.bin";
|
|
- pr_info("Using firmware %s\n", fw_name);
|
|
- err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
|
|
- rtlpriv->io.dev, GFP_KERNEL, hw,
|
|
- rtl_fw_cb);
|
|
- if (err) {
|
|
- pr_err("Failed to request normal firmware!\n");
|
|
- vfree(rtlpriv->rtlhal.wowlan_firmware);
|
|
- vfree(rtlpriv->rtlhal.pfirmware);
|
|
- return 1;
|
|
- }
|
|
+ pr_err("Failed to request normal firmware!\n");
|
|
+ vfree(rtlpriv->rtlhal.wowlan_firmware);
|
|
+ vfree(rtlpriv->rtlhal.pfirmware);
|
|
+ return 1;
|
|
}
|
|
/*load wowlan firmware*/
|
|
pr_info("Using firmware %s\n", wowlan_fw_name);
|
|
@@ -331,6 +323,7 @@ static const struct rtl_hal_cfg rtl8821a
|
|
.bar_id = 2,
|
|
.write_readback = true,
|
|
.name = "rtl8821ae_pci",
|
|
+ .alt_fw_name = "rtlwifi/rtl8821aefw.bin",
|
|
.ops = &rtl8821ae_hal_ops,
|
|
.mod_params = &rtl8821ae_mod_params,
|
|
.maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL,
|