mirror of
https://github.com/armbian/build
synced 2025-09-24 19:47:06 +07:00
* sunxi-5.18: rebase megous patces to v5.18.3 * sunxi-5.18: Add upstream patches - tag: orange-pi-5.18-20220609-1318 * Check applicability to version 5.18.3 * sunxi-5.18: switch to version 5.18.3
147 lines
6.0 KiB
Diff
147 lines
6.0 KiB
Diff
From 2075698fe87a34c5cffa18a6738f5696b65027c9 Mon Sep 17 00:00:00 2001
|
|
From: Po Hao Huang <phhuang@realtek.com>
|
|
Date: Fri, 20 May 2022 15:17:26 +0800
|
|
Subject: [PATCH 522/533] rtw89: fix channel inconsistency during hw_scan
|
|
|
|
Previously channel maintained by driver could be different from the
|
|
ones hardware actually is. Restore these variables back to prevent
|
|
unexpected behavior.
|
|
|
|
Signed-off-by: Po Hao Huang <phhuang@realtek.com>
|
|
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
|
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
|
Link: https://lore.kernel.org/r/20220520071731.38563-2-pkshih@realtek.com
|
|
---
|
|
drivers/net/wireless/realtek/rtw89/core.c | 2 +-
|
|
drivers/net/wireless/realtek/rtw89/fw.c | 20 ++++++++++++++-----
|
|
drivers/net/wireless/realtek/rtw89/fw.h | 5 +----
|
|
drivers/net/wireless/realtek/rtw89/mac.c | 15 ++++++++------
|
|
drivers/net/wireless/realtek/rtw89/mac80211.c | 2 +-
|
|
5 files changed, 27 insertions(+), 17 deletions(-)
|
|
|
|
diff --git a/drivers/net/wireless/realtek/rtw89/core.c b/drivers/net/wireless/realtek/rtw89/core.c
|
|
index c23ecf4675f3..7c12ac10945b 100644
|
|
--- a/drivers/net/wireless/realtek/rtw89/core.c
|
|
+++ b/drivers/net/wireless/realtek/rtw89/core.c
|
|
@@ -1608,7 +1608,7 @@ static void rtw89_core_update_rx_status(struct rtw89_dev *rtwdev,
|
|
|
|
if (rtwdev->scanning &&
|
|
RTW89_CHK_FW_FEATURE(SCAN_OFFLOAD, &rtwdev->fw)) {
|
|
- u8 chan = hal->current_channel;
|
|
+ u8 chan = hal->current_primary_channel;
|
|
u8 band = hal->current_band_type;
|
|
enum nl80211_band nl_band;
|
|
|
|
diff --git a/drivers/net/wireless/realtek/rtw89/fw.c b/drivers/net/wireless/realtek/rtw89/fw.c
|
|
index 168d853e2c1d..04f6da04781b 100644
|
|
--- a/drivers/net/wireless/realtek/rtw89/fw.c
|
|
+++ b/drivers/net/wireless/realtek/rtw89/fw.c
|
|
@@ -2343,6 +2343,9 @@ void rtw89_hw_scan_complete(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
|
|
rtwvif->scan_req = NULL;
|
|
rtwvif->scan_ies = NULL;
|
|
rtwdev->scan_info.scanning_vif = NULL;
|
|
+
|
|
+ if (rtwvif->net_type != RTW89_NET_TYPE_NO_LINK)
|
|
+ rtw89_store_op_chan(rtwdev, false);
|
|
}
|
|
|
|
void rtw89_hw_scan_abort(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif)
|
|
@@ -2374,15 +2377,22 @@ int rtw89_hw_scan_offload(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
|
|
return ret;
|
|
}
|
|
|
|
-void rtw89_store_op_chan(struct rtw89_dev *rtwdev)
|
|
+void rtw89_store_op_chan(struct rtw89_dev *rtwdev, bool backup)
|
|
{
|
|
struct rtw89_hw_scan_info *scan_info = &rtwdev->scan_info;
|
|
struct rtw89_hal *hal = &rtwdev->hal;
|
|
|
|
- scan_info->op_pri_ch = hal->current_primary_channel;
|
|
- scan_info->op_chan = hal->current_channel;
|
|
- scan_info->op_bw = hal->current_band_width;
|
|
- scan_info->op_band = hal->current_band_type;
|
|
+ if (backup) {
|
|
+ scan_info->op_pri_ch = hal->current_primary_channel;
|
|
+ scan_info->op_chan = hal->current_channel;
|
|
+ scan_info->op_bw = hal->current_band_width;
|
|
+ scan_info->op_band = hal->current_band_type;
|
|
+ } else {
|
|
+ hal->current_primary_channel = scan_info->op_pri_ch;
|
|
+ hal->current_channel = scan_info->op_chan;
|
|
+ hal->current_band_width = scan_info->op_bw;
|
|
+ hal->current_band_type = scan_info->op_band;
|
|
+ }
|
|
}
|
|
|
|
#define H2C_FW_CPU_EXCEPTION_LEN 4
|
|
diff --git a/drivers/net/wireless/realtek/rtw89/fw.h b/drivers/net/wireless/realtek/rtw89/fw.h
|
|
index 95a55c4213db..e75ad22aa85d 100644
|
|
--- a/drivers/net/wireless/realtek/rtw89/fw.h
|
|
+++ b/drivers/net/wireless/realtek/rtw89/fw.h
|
|
@@ -2633,17 +2633,14 @@ int rtw89_fw_msg_reg(struct rtw89_dev *rtwdev,
|
|
struct rtw89_mac_c2h_info *c2h_info);
|
|
int rtw89_fw_h2c_fw_log(struct rtw89_dev *rtwdev, bool enable);
|
|
void rtw89_fw_st_dbg_dump(struct rtw89_dev *rtwdev);
|
|
-void rtw89_store_op_chan(struct rtw89_dev *rtwdev);
|
|
+void rtw89_store_op_chan(struct rtw89_dev *rtwdev, bool backup);
|
|
void rtw89_hw_scan_start(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
|
|
struct ieee80211_scan_request *req);
|
|
void rtw89_hw_scan_complete(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
|
|
bool aborted);
|
|
int rtw89_hw_scan_offload(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
|
|
bool enable);
|
|
-void rtw89_hw_scan_status_report(struct rtw89_dev *rtwdev, struct sk_buff *skb);
|
|
-void rtw89_hw_scan_chan_switch(struct rtw89_dev *rtwdev, struct sk_buff *skb);
|
|
void rtw89_hw_scan_abort(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif);
|
|
-void rtw89_store_op_chan(struct rtw89_dev *rtwdev);
|
|
int rtw89_fw_h2c_trigger_cpu_exception(struct rtw89_dev *rtwdev);
|
|
|
|
#endif
|
|
diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c
|
|
index facd0abb50bd..f5f63f9746f2 100644
|
|
--- a/drivers/net/wireless/realtek/rtw89/mac.c
|
|
+++ b/drivers/net/wireless/realtek/rtw89/mac.c
|
|
@@ -3681,17 +3681,20 @@ rtw89_mac_c2h_scanofld_rsp(struct rtw89_dev *rtwdev, struct sk_buff *c2h,
|
|
rtw89_hw_scan_complete(rtwdev, vif, false);
|
|
break;
|
|
case RTW89_SCAN_ENTER_CH_NOTIFY:
|
|
- if (rtw89_is_op_chan(rtwdev, band, chan))
|
|
+ hal->prev_band_type = hal->current_band_type;
|
|
+ hal->current_band_type = band;
|
|
+ hal->prev_primary_channel = hal->current_primary_channel;
|
|
+ hal->current_primary_channel = chan;
|
|
+ hal->current_channel = chan;
|
|
+ hal->current_band_width = RTW89_CHANNEL_WIDTH_20;
|
|
+ if (rtw89_is_op_chan(rtwdev, band, chan)) {
|
|
+ rtw89_store_op_chan(rtwdev, false);
|
|
ieee80211_wake_queues(rtwdev->hw);
|
|
+ }
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
-
|
|
- hal->prev_band_type = hal->current_band_type;
|
|
- hal->prev_primary_channel = hal->current_channel;
|
|
- hal->current_channel = chan;
|
|
- hal->current_band_type = band;
|
|
}
|
|
|
|
static void
|
|
diff --git a/drivers/net/wireless/realtek/rtw89/mac80211.c b/drivers/net/wireless/realtek/rtw89/mac80211.c
|
|
index f24e4a208376..6d0c62c545a7 100644
|
|
--- a/drivers/net/wireless/realtek/rtw89/mac80211.c
|
|
+++ b/drivers/net/wireless/realtek/rtw89/mac80211.c
|
|
@@ -350,7 +350,7 @@ static void rtw89_ops_bss_info_changed(struct ieee80211_hw *hw,
|
|
rtw89_phy_set_bss_color(rtwdev, vif);
|
|
rtw89_chip_cfg_txpwr_ul_tb_offset(rtwdev, vif);
|
|
rtw89_mac_port_update(rtwdev, rtwvif);
|
|
- rtw89_store_op_chan(rtwdev);
|
|
+ rtw89_store_op_chan(rtwdev, true);
|
|
} else {
|
|
/* Abort ongoing scan if cancel_scan isn't issued
|
|
* when disconnected by peer
|
|
--
|
|
2.35.3
|
|
|