Linux wireless drivers development
 help / color / mirror / Atom feed
* [PATCH 03/17] mt7615: mcu: remove bss_info_convert_vif_type routine
From: Lorenzo Bianconi @ 2019-05-04 15:28 UTC (permalink / raw)
  To: nbd; +Cc: lorenzo.bianconi, linux-wireless, ryder.lee, royluo
In-Reply-To: <cover.1556981521.git.lorenzo@kernel.org>

Remove bss_info_convert_vif_type routine since it is run just in
mt7615_mcu_set_bss_info and the switch over vif->type is already there.
Simplify mt7615_mcu_set_bss_info routine

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
 .../net/wireless/mediatek/mt76/mt7615/mcu.c   | 73 +++++++------------
 1 file changed, 27 insertions(+), 46 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
index 2a632c0debe9..2a73ac8b0d90 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
@@ -842,39 +842,28 @@ static int __mt7615_mcu_set_bss_info(struct mt7615_dev *dev,
 				   MCU_Q_SET, MCU_S2D_H2N, NULL);
 }
 
-static void bss_info_convert_vif_type(enum nl80211_iftype type,
-				      u32 *network_type, u32 *conn_type)
-{
-	switch (type) {
-	case NL80211_IFTYPE_AP:
-		if (network_type)
-			*network_type = NETWORK_INFRA;
-		if (conn_type)
-			*conn_type = CONNECTION_INFRA_AP;
-		break;
-	case NL80211_IFTYPE_STATION:
-		if (network_type)
-			*network_type = NETWORK_INFRA;
-		if (conn_type)
-			*conn_type = CONNECTION_INFRA_STA;
-		break;
-	default:
-		WARN_ON(1);
-		break;
-	};
-}
-
-int mt7615_mcu_set_bss_info(struct mt7615_dev *dev, struct ieee80211_vif *vif,
-			    int en)
+int mt7615_mcu_set_bss_info(struct mt7615_dev *dev,
+			    struct ieee80211_vif *vif, int en)
 {
 	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
-	struct bss_info bss_info = {0};
-	u8 bmc_tx_wlan_idx = 0;
-	u32 network_type = 0, conn_type = 0;
+	struct bss_info bss_info = {
+		.bss_idx = mvif->idx,
+		.omac_idx = mvif->omac_idx,
+		.band_idx = mvif->band_idx,
+		.bcn_interval = vif->bss_conf.beacon_int,
+		.dtim_period = vif->bss_conf.dtim_period,
+		.enable = en,
+		.feature = BIT(BSS_INFO_BASIC),
+		.wmm_idx = mvif->wmm_idx,
+	};
 
-	if (vif->type == NL80211_IFTYPE_AP) {
-		bmc_tx_wlan_idx = mvif->sta.wcid.idx;
-	} else if (vif->type == NL80211_IFTYPE_STATION) {
+	switch (vif->type) {
+	case NL80211_IFTYPE_AP:
+		bss_info.bmc_tx_wlan_idx = mvif->sta.wcid.idx;
+		bss_info.network_type = NETWORK_INFRA;
+		bss_info.conn_type = CONNECTION_INFRA_AP;
+		break;
+	case NL80211_IFTYPE_STATION: {
 		/* find the unicast entry for sta mode bmc tx */
 		struct ieee80211_sta *ap_sta;
 		struct mt7615_sta *msta;
@@ -888,27 +877,19 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev, struct ieee80211_vif *vif,
 		}
 
 		msta = (struct mt7615_sta *)ap_sta->drv_priv;
-		bmc_tx_wlan_idx = msta->wcid.idx;
+		bss_info.bmc_tx_wlan_idx = msta->wcid.idx;
+		bss_info.network_type = NETWORK_INFRA;
+		bss_info.conn_type = CONNECTION_INFRA_STA;
 
 		rcu_read_unlock();
-	} else {
+		break;
+	}
+	default:
 		WARN_ON(1);
+		break;
 	}
-
-	bss_info_convert_vif_type(vif->type, &network_type, &conn_type);
-
-	bss_info.bss_idx = mvif->idx;
 	memcpy(bss_info.bssid, vif->bss_conf.bssid, ETH_ALEN);
-	bss_info.omac_idx = mvif->omac_idx;
-	bss_info.band_idx = mvif->band_idx;
-	bss_info.bmc_tx_wlan_idx = bmc_tx_wlan_idx;
-	bss_info.wmm_idx = mvif->wmm_idx;
-	bss_info.network_type = network_type;
-	bss_info.conn_type = conn_type;
-	bss_info.bcn_interval = vif->bss_conf.beacon_int;
-	bss_info.dtim_period = vif->bss_conf.dtim_period;
-	bss_info.enable = en;
-	bss_info.feature = BIT(BSS_INFO_BASIC);
+
 	if (en) {
 		bss_info.feature |= BIT(BSS_INFO_OMAC);
 		if (mvif->omac_idx > EXT_BSSID_START)
-- 
2.20.1


^ permalink raw reply related

* [PATCH 02/17] mt7615: mcu: simplify __mt7615_mcu_set_sta_rec
From: Lorenzo Bianconi @ 2019-05-04 15:28 UTC (permalink / raw)
  To: nbd; +Cc: lorenzo.bianconi, linux-wireless, ryder.lee, royluo
In-Reply-To: <cover.1556981521.git.lorenzo@kernel.org>

Do not loop over cmd payload in __mt7615_mcu_set_sta_rec since it is
already done in before running __mt7615_mcu_set_sta_rec (e.g.
mt7615_mcu_set_sta_rec)

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
 .../net/wireless/mediatek/mt76/mt7615/mcu.c   | 51 ++++++++-----------
 1 file changed, 21 insertions(+), 30 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
index 3de20c8111cf..2a632c0debe9 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
@@ -1101,9 +1101,10 @@ int mt7615_mcu_del_wtbl_all(struct mt7615_dev *dev)
 	return __mt7615_mcu_set_wtbl(dev, 0, WTBL_RESET_ALL, 0, NULL, 0);
 }
 
-static int __mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, int bss_idx,
-				    int wlan_idx, int muar_idx, void *buf,
-				    int buf_len)
+static int
+__mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, int bss_idx,
+			 int wlan_idx, int muar_idx, int ntlv,
+			 void *buf, int buf_len)
 {
 	struct req_hdr {
 		u8 bss_idx;
@@ -1112,31 +1113,16 @@ static int __mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, int bss_idx,
 		u8 is_tlv_append;
 		u8 muar_idx;
 		u8 rsv[2];
-	} __packed req_hdr = {0};
-	struct tlv {
-		__le16 tag;
-		__le16 len;
-		u8 buf[0];
-	} __packed;
+	} __packed req_hdr = {
+		.bss_idx = bss_idx,
+		.wlan_idx = wlan_idx,
+		.tlv_num = cpu_to_le16(ntlv),
+		.is_tlv_append = !!ntlv,
+		.muar_idx = muar_idx,
+	};
 	struct sk_buff *skb;
-	u16 tlv_num = 0;
-	int offset = 0;
-
-	while (offset < buf_len) {
-		struct tlv *tlv = (struct tlv *)((u8 *)buf + offset);
-
-		tlv_num++;
-		offset += tlv->len;
-	}
 
 	skb = mt7615_mcu_msg_alloc(NULL, sizeof(req_hdr) + buf_len);
-
-	req_hdr.bss_idx = bss_idx;
-	req_hdr.wlan_idx = wlan_idx;
-	req_hdr.tlv_num = cpu_to_le16(tlv_num);
-	req_hdr.is_tlv_append = tlv_num ? 1 : 0;
-	req_hdr.muar_idx = muar_idx;
-
 	memcpy(skb_put(skb, sizeof(req_hdr)), &req_hdr, sizeof(req_hdr));
 
 	if (buf && buf_len)
@@ -1167,7 +1153,7 @@ int mt7615_mcu_set_sta_rec_bmc(struct mt7615_dev *dev,
 	}
 
 	return __mt7615_mcu_set_sta_rec(dev, mvif->idx, mvif->sta.wcid.idx,
-					mvif->omac_idx, &sta_rec_basic,
+					mvif->omac_idx, 1, &sta_rec_basic,
 					buf_len);
 }
 
@@ -1216,7 +1202,7 @@ int mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, struct ieee80211_vif *vif,
 	}
 
 	return __mt7615_mcu_set_sta_rec(dev, mvif->idx, msta->wcid.idx,
-					mvif->omac_idx, &sta_rec_basic,
+					mvif->omac_idx, 1, &sta_rec_basic,
 					buf_len);
 }
 
@@ -1435,6 +1421,7 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif,
 	sta_rec_ht->tag = cpu_to_le16(STA_REC_HT);
 	sta_rec_ht->len = cpu_to_le16(sizeof(*sta_rec_ht));
 	sta_rec_ht->ht_cap = cpu_to_le16(sta->ht_cap.cap);
+	ntlv = 1;
 
 	if (sta->vht_cap.vht_supported) {
 		struct sta_rec_vht *sta_rec_vht;
@@ -1448,10 +1435,12 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif,
 			cpu_to_le16(sta->vht_cap.vht_mcs.rx_mcs_map);
 		sta_rec_vht->vht_tx_mcs_map =
 			cpu_to_le16(sta->vht_cap.vht_mcs.tx_mcs_map);
+		ntlv++;
 	}
 
 	ret = __mt7615_mcu_set_sta_rec(dev, mvif->idx, msta->wcid.idx,
-				       mvif->omac_idx, buf, buf_len);
+				       mvif->omac_idx, ntlv, buf,
+				       buf_len);
 	kfree(buf);
 	return ret;
 }
@@ -1508,7 +1497,8 @@ int mt7615_mcu_set_tx_ba(struct mt7615_dev *dev,
 	sta_rec_ba.winsize = cpu_to_le16(ba_size);
 
 	return __mt7615_mcu_set_sta_rec(dev, mvif->idx, msta->wcid.idx,
-					mvif->omac_idx, &sta_rec_ba, buf_len);
+					mvif->omac_idx, 1, &sta_rec_ba,
+					buf_len);
 }
 
 int mt7615_mcu_set_rx_ba(struct mt7615_dev *dev,
@@ -1535,7 +1525,8 @@ int mt7615_mcu_set_rx_ba(struct mt7615_dev *dev,
 	sta_rec_ba.winsize = cpu_to_le16(params->buf_size);
 
 	ret = __mt7615_mcu_set_sta_rec(dev, mvif->idx, msta->wcid.idx,
-				       mvif->omac_idx, &sta_rec_ba, buf_len);
+				       mvif->omac_idx, 1, &sta_rec_ba,
+				       buf_len);
 	if (ret || !add)
 		return ret;
 
-- 
2.20.1


^ permalink raw reply related

* [PATCH 01/17] mt7615: mcu: simplify __mt7615_mcu_set_wtbl
From: Lorenzo Bianconi @ 2019-05-04 15:28 UTC (permalink / raw)
  To: nbd; +Cc: lorenzo.bianconi, linux-wireless, ryder.lee, royluo
In-Reply-To: <cover.1556981521.git.lorenzo@kernel.org>

Do not loop over cmd payload in __mt7615_mcu_set_wtbl since it is
already done in before running __mt7615_mcu_set_wtbl (e.g.
mt7615_mcu_set_wtbl_key)

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
 .../net/wireless/mediatek/mt76/mt7615/mcu.c   | 62 ++++++++-----------
 1 file changed, 26 insertions(+), 36 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
index dc1301effa24..3de20c8111cf 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
@@ -918,37 +918,24 @@ int mt7615_mcu_set_bss_info(struct mt7615_dev *dev, struct ieee80211_vif *vif,
 	return __mt7615_mcu_set_bss_info(dev, &bss_info);
 }
 
-static int __mt7615_mcu_set_wtbl(struct mt7615_dev *dev, int wlan_idx,
-				 int operation, void *buf, int buf_len)
+static int
+__mt7615_mcu_set_wtbl(struct mt7615_dev *dev, int wlan_idx,
+		      int operation, int ntlv, void *buf,
+		      int buf_len)
 {
 	struct req_hdr {
 		u8 wlan_idx;
 		u8 operation;
 		__le16 tlv_num;
 		u8 rsv[4];
-	} __packed req_hdr = {0};
-	struct tlv {
-		__le16 tag;
-		__le16 len;
-		u8 buf[0];
-	} __packed;
+	} __packed req_hdr = {
+		.wlan_idx = wlan_idx,
+		.operation = operation,
+		.tlv_num = cpu_to_le16(ntlv),
+	};
 	struct sk_buff *skb;
-	u16 tlv_num = 0;
-	int offset = 0;
-
-	while (offset < buf_len) {
-		struct tlv *tlv = (struct tlv *)((u8 *)buf + offset);
-
-		tlv_num++;
-		offset += tlv->len;
-	}
 
 	skb = mt7615_mcu_msg_alloc(NULL, sizeof(req_hdr) + buf_len);
-
-	req_hdr.wlan_idx = wlan_idx;
-	req_hdr.operation = operation;
-	req_hdr.tlv_num = cpu_to_le16(tlv_num);
-
 	memcpy(skb_put(skb, sizeof(req_hdr)), &req_hdr, sizeof(req_hdr));
 
 	if (buf && buf_len)
@@ -1015,8 +1002,8 @@ int mt7615_mcu_set_wtbl_key(struct mt7615_dev *dev, int wcid,
 		wtbl_sec_key.key_len = sizeof(wtbl_sec_key.key_material);
 	}
 
-	return __mt7615_mcu_set_wtbl(dev, wcid, WTBL_SET, &wtbl_sec_key,
-				     buf_len);
+	return __mt7615_mcu_set_wtbl(dev, wcid, WTBL_SET, 1,
+				     &wtbl_sec_key, buf_len);
 }
 
 int mt7615_mcu_add_wtbl_bmc(struct mt7615_dev *dev, struct ieee80211_vif *vif)
@@ -1047,7 +1034,8 @@ int mt7615_mcu_add_wtbl_bmc(struct mt7615_dev *dev, struct ieee80211_vif *vif)
 	wtbl_rx->rv = 1;
 
 	ret = __mt7615_mcu_set_wtbl(dev, mvif->sta.wcid.idx,
-				    WTBL_RESET_AND_SET, buf, buf_len);
+				    WTBL_RESET_AND_SET, 2, buf,
+				    buf_len);
 
 	kfree(buf);
 	return ret;
@@ -1058,7 +1046,7 @@ int mt7615_mcu_del_wtbl_bmc(struct mt7615_dev *dev, struct ieee80211_vif *vif)
 	struct mt7615_vif *mvif = (struct mt7615_vif *)vif->drv_priv;
 
 	return __mt7615_mcu_set_wtbl(dev, mvif->sta.wcid.idx,
-				     WTBL_RESET_AND_SET, NULL, 0);
+				     WTBL_RESET_AND_SET, 0, NULL, 0);
 }
 
 int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,
@@ -1092,8 +1080,8 @@ int mt7615_mcu_add_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,
 	wtbl_rx->rca2 = 1;
 	wtbl_rx->rv = 1;
 
-	ret = __mt7615_mcu_set_wtbl(dev, msta->wcid.idx,
-				    WTBL_RESET_AND_SET, buf, buf_len);
+	ret = __mt7615_mcu_set_wtbl(dev, msta->wcid.idx, WTBL_RESET_AND_SET,
+				    2, buf, buf_len);
 
 	kfree(buf);
 	return ret;
@@ -1105,12 +1093,12 @@ int mt7615_mcu_del_wtbl(struct mt7615_dev *dev, struct ieee80211_vif *vif,
 	struct mt7615_sta *msta = (struct mt7615_sta *)sta->drv_priv;
 
 	return __mt7615_mcu_set_wtbl(dev, msta->wcid.idx,
-				     WTBL_RESET_AND_SET, NULL, 0);
+				     WTBL_RESET_AND_SET, 0, NULL, 0);
 }
 
 int mt7615_mcu_del_wtbl_all(struct mt7615_dev *dev)
 {
-	return __mt7615_mcu_set_wtbl(dev, 0, WTBL_RESET_ALL, NULL, 0);
+	return __mt7615_mcu_set_wtbl(dev, 0, WTBL_RESET_ALL, 0, NULL, 0);
 }
 
 static int __mt7615_mcu_set_sta_rec(struct mt7615_dev *dev, int bss_idx,
@@ -1367,7 +1355,7 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif,
 	struct wtbl_ht *wtbl_ht;
 	struct wtbl_raw *wtbl_raw;
 	struct sta_rec_ht *sta_rec_ht;
-	int buf_len, ret;
+	int buf_len, ret, ntlv = 2;
 	u32 msk, val = 0;
 	u8 *buf;
 
@@ -1400,6 +1388,7 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif,
 		wtbl_vht->len = cpu_to_le16(sizeof(*wtbl_vht));
 		wtbl_vht->ldpc = sta->vht_cap.cap & IEEE80211_VHT_CAP_RXLDPC;
 		wtbl_vht->vht = 1;
+		ntlv++;
 
 		if (sta->vht_cap.cap & IEEE80211_VHT_CAP_SHORT_GI_80)
 			val |= MT_WTBL_W5_SHORT_GI_80;
@@ -1416,6 +1405,7 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif,
 		wtbl_smps->tag = cpu_to_le16(WTBL_SMPS);
 		wtbl_smps->len = cpu_to_le16(sizeof(*wtbl_smps));
 		wtbl_smps->smps = 1;
+		ntlv++;
 	}
 
 	/* sgi */
@@ -1431,8 +1421,8 @@ int mt7615_mcu_set_ht_cap(struct mt7615_dev *dev, struct ieee80211_vif *vif,
 	wtbl_raw->msk = cpu_to_le32(~msk);
 	wtbl_raw->val = cpu_to_le32(val);
 
-	ret = __mt7615_mcu_set_wtbl(dev, msta->wcid.idx, WTBL_SET, buf,
-				    buf_len);
+	ret = __mt7615_mcu_set_wtbl(dev, msta->wcid.idx, WTBL_SET, ntlv,
+				    buf, buf_len);
 	if (ret) {
 		kfree(buf);
 		return ret;
@@ -1501,8 +1491,8 @@ int mt7615_mcu_set_tx_ba(struct mt7615_dev *dev,
 		wtbl_ba.ba_winsize_idx = idx;
 	}
 
-	ret = __mt7615_mcu_set_wtbl(dev, msta->wcid.idx, WTBL_SET, &wtbl_ba,
-				    buf_len);
+	ret = __mt7615_mcu_set_wtbl(dev, msta->wcid.idx, WTBL_SET, 1,
+				    &wtbl_ba, buf_len);
 	if (ret)
 		return ret;
 
@@ -1561,7 +1551,7 @@ int mt7615_mcu_set_rx_ba(struct mt7615_dev *dev,
 	wtbl_ba.rst_ba_sb = 1;
 
 	return  __mt7615_mcu_set_wtbl(dev, msta->wcid.idx, WTBL_SET,
-				      &wtbl_ba, buf_len);
+				      1, &wtbl_ba, buf_len);
 }
 
 void mt7615_mcu_set_rates(struct mt7615_dev *dev, struct mt7615_sta *sta,
-- 
2.20.1


^ permalink raw reply related

* [PATCH 00/17] use standard signature for mt7615 mcu api
From: Lorenzo Bianconi @ 2019-05-04 15:28 UTC (permalink / raw)
  To: nbd; +Cc: lorenzo.bianconi, linux-wireless, ryder.lee, royluo

Introduce mt76_mcu_ops data structure in mt7615 mcu code in order
to reuse the code with other bus types and unify the code with mt7603
driver

Changes since RFC:
- rebase ontop of https://patchwork.kernel.org/patch/10928753/
- fix net_type initialization in mt7615_mcu_set_bss_info

Lorenzo Bianconi (17):
  mt7615: mcu: simplify __mt7615_mcu_set_wtbl
  mt7615: mcu: simplify __mt7615_mcu_set_sta_rec
  mt7615: mcu: remove bss_info_convert_vif_type routine
  mt7615: mcu: use proper msg size in mt7615_mcu_add_wtbl_bmc
  mt7615: mcu: use proper msg size in mt7615_mcu_add_wtbl
  mt7615: mcu: unify mt7615_mcu_add_wtbl_bmc and mt7615_mcu_del_wtbl_bmc
  mt7615: mcu: remove unused parameter in mt7615_mcu_del_wtbl
  mt7615: remove query from mt7615_mcu_msg_send signature
  mt7615: remove dest from mt7615_mcu_msg_send signature
  mt7615: mcu: remove skb_ret from mt7615_mcu_msg_send
  mt7615: mcu: unify __mt7615_mcu_set_dev_info and
    mt7615_mcu_set_dev_info
  mt7615: mcu: do not use function pointers whenever possible
  mt7615: mcu: remove unused structure in mcu.h
  mt7615: mcu: use standard signature for mt7615_mcu_msg_send
  mt7615: initialize mt76_mcu_ops data structure
  mt7615: mcu: init mcu_restart function pointer
  mt7615: mcu: run __mt76_mcu_send_msg in mt7615_mcu_send_firmware

 .../net/wireless/mediatek/mt76/mt7615/main.c  |   17 +-
 .../net/wireless/mediatek/mt76/mt7615/mcu.c   | 1147 ++++++++---------
 .../net/wireless/mediatek/mt76/mt7615/mcu.h   |   49 +-
 .../wireless/mediatek/mt76/mt7615/mt7615.h    |   11 +-
 4 files changed, 556 insertions(+), 668 deletions(-)

-- 
2.20.1


^ permalink raw reply

* Re: [PATCH] net: wireless: ath9k: Return an error when ath9k_hw_reset() fails
From: Heiner Kallweit @ 2019-05-04 11:02 UTC (permalink / raw)
  To: Jia-Ju Bai, ath9k-devel, kvalo, davem
  Cc: linux-wireless, netdev, linux-kernel
In-Reply-To: <20190504100815.19876-1-baijiaju1990@gmail.com>

On 04.05.2019 12:08, Jia-Ju Bai wrote:
> ath9k_hw_reset() in ath9k_start() can fail, and in this case, 
> ath9k_start() should return an error instead of executing the 
> subsequent code.
> 
Such mechanical patches w/o understanding the code are always
problematic. Do you have any proof that this error is fatal?
I think it is not, else we wouldn't have this line:
ah->reset_power_on = false;
Also you should consider that a mutex and a spinlock are held.
Maybe changing the error message to a warning would be more
appropriate. But this I would leave to somebody being more
familiar with this driver.

> Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
> ---
>  drivers/net/wireless/ath/ath9k/main.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
> index f23cb2f3d296..f78e7c46764d 100644
> --- a/drivers/net/wireless/ath/ath9k/main.c
> +++ b/drivers/net/wireless/ath/ath9k/main.c
> @@ -681,6 +681,7 @@ static int ath9k_start(struct ieee80211_hw *hw)
>  			"Unable to reset hardware; reset status %d (freq %u MHz)\n",
>  			r, curchan->center_freq);
>  		ah->reset_power_on = false;
> +		return r;
>  	}
>  
>  	/* Setup our intr mask. */
> 


^ permalink raw reply

* [PATCH] rtw88: Make some symbols static
From: YueHaibing @ 2019-05-04 10:32 UTC (permalink / raw)
  To: yhchuang, kvalo; +Cc: linux-kernel, netdev, linux-wireless, davem, YueHaibing

Fix sparse warnings:

drivers/net/wireless/realtek/rtw88/phy.c:851:4: warning: symbol 'rtw_cck_size' was not declared. Should it be static?
drivers/net/wireless/realtek/rtw88/phy.c:852:4: warning: symbol 'rtw_ofdm_size' was not declared. Should it be static?
drivers/net/wireless/realtek/rtw88/phy.c:853:4: warning: symbol 'rtw_ht_1s_size' was not declared. Should it be static?
drivers/net/wireless/realtek/rtw88/phy.c:854:4: warning: symbol 'rtw_ht_2s_size' was not declared. Should it be static?
drivers/net/wireless/realtek/rtw88/phy.c:855:4: warning: symbol 'rtw_vht_1s_size' was not declared. Should it be static?
drivers/net/wireless/realtek/rtw88/phy.c:856:4: warning: symbol 'rtw_vht_2s_size' was not declared. Should it be static?
drivers/net/wireless/realtek/rtw88/fw.c:11:6: warning: symbol 'rtw_fw_c2h_cmd_handle_ext' was not declared. Should it be static?
drivers/net/wireless/realtek/rtw88/fw.c:50:6: warning: symbol 'rtw_fw_send_h2c_command' was not declared. Should it be static?

Reported-by: Hulk Robot <hulkci@huawei.com>
Signed-off-by: YueHaibing <yuehaibing@huawei.com>
---
 drivers/net/wireless/realtek/rtw88/fw.c  |  6 ++++--
 drivers/net/wireless/realtek/rtw88/phy.c | 13 +++++++------
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtw88/fw.c b/drivers/net/wireless/realtek/rtw88/fw.c
index cf4265c..62847797 100644
--- a/drivers/net/wireless/realtek/rtw88/fw.c
+++ b/drivers/net/wireless/realtek/rtw88/fw.c
@@ -8,7 +8,8 @@
 #include "reg.h"
 #include "debug.h"
 
-void rtw_fw_c2h_cmd_handle_ext(struct rtw_dev *rtwdev, struct sk_buff *skb)
+static void rtw_fw_c2h_cmd_handle_ext(struct rtw_dev *rtwdev,
+				      struct sk_buff *skb)
 {
 	struct rtw_c2h_cmd *c2h;
 	u8 sub_cmd_id;
@@ -47,7 +48,8 @@ void rtw_fw_c2h_cmd_handle(struct rtw_dev *rtwdev, struct sk_buff *skb)
 	}
 }
 
-void rtw_fw_send_h2c_command(struct rtw_dev *rtwdev, u8 *h2c)
+static void rtw_fw_send_h2c_command(struct rtw_dev *rtwdev,
+				    u8 *h2c)
 {
 	u8 box;
 	u8 box_state;
diff --git a/drivers/net/wireless/realtek/rtw88/phy.c b/drivers/net/wireless/realtek/rtw88/phy.c
index 4381b36..2105fc4 100644
--- a/drivers/net/wireless/realtek/rtw88/phy.c
+++ b/drivers/net/wireless/realtek/rtw88/phy.c
@@ -848,12 +848,13 @@ u8 rtw_vht_2s_rates[] = {
 	DESC_RATEVHT2SS_MCS6, DESC_RATEVHT2SS_MCS7,
 	DESC_RATEVHT2SS_MCS8, DESC_RATEVHT2SS_MCS9
 };
-u8 rtw_cck_size = ARRAY_SIZE(rtw_cck_rates);
-u8 rtw_ofdm_size = ARRAY_SIZE(rtw_ofdm_rates);
-u8 rtw_ht_1s_size = ARRAY_SIZE(rtw_ht_1s_rates);
-u8 rtw_ht_2s_size = ARRAY_SIZE(rtw_ht_2s_rates);
-u8 rtw_vht_1s_size = ARRAY_SIZE(rtw_vht_1s_rates);
-u8 rtw_vht_2s_size = ARRAY_SIZE(rtw_vht_2s_rates);
+
+static u8 rtw_cck_size = ARRAY_SIZE(rtw_cck_rates);
+static u8 rtw_ofdm_size = ARRAY_SIZE(rtw_ofdm_rates);
+static u8 rtw_ht_1s_size = ARRAY_SIZE(rtw_ht_1s_rates);
+static u8 rtw_ht_2s_size = ARRAY_SIZE(rtw_ht_2s_rates);
+static u8 rtw_vht_1s_size = ARRAY_SIZE(rtw_vht_1s_rates);
+static u8 rtw_vht_2s_size = ARRAY_SIZE(rtw_vht_2s_rates);
 u8 *rtw_rate_section[RTW_RATE_SECTION_MAX] = {
 	rtw_cck_rates, rtw_ofdm_rates,
 	rtw_ht_1s_rates, rtw_ht_2s_rates,
-- 
2.7.4



^ permalink raw reply related

* [PATCH] mt76: mt7615: Make mt7615_irq_handler static
From: YueHaibing @ 2019-05-04 10:22 UTC (permalink / raw)
  To: nbd, lorenzo.bianconi83, ryder.lee, royluo, kvalo, matthias.bgg
  Cc: linux-kernel, netdev, linux-mediatek, linux-arm-kernel,
	linux-wireless, YueHaibing

Fix sparse warning:

drivers/net/wireless/mediatek/mt76/mt7615/pci.c:37:13:
 warning: symbol 'mt7615_irq_handler' was not declared. Should it be static?

Signed-off-by: YueHaibing <yuehaibing@huawei.com>
---
 drivers/net/wireless/mediatek/mt76/mt7615/pci.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/pci.c b/drivers/net/wireless/mediatek/mt76/mt7615/pci.c
index 11122bd..c181e59 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/pci.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/pci.c
@@ -34,7 +34,7 @@ void mt7615_rx_poll_complete(struct mt76_dev *mdev, enum mt76_rxq_id q)
 	mt7615_irq_enable(dev, MT_INT_RX_DONE(q));
 }
 
-irqreturn_t mt7615_irq_handler(int irq, void *dev_instance)
+static irqreturn_t mt7615_irq_handler(int irq, void *dev_instance)
 {
 	struct mt7615_dev *dev = dev_instance;
 	u32 intr;
-- 
2.7.4



^ permalink raw reply related

* [PATCH] net: wireless: ath9k: Return an error when ath9k_hw_reset() fails
From: Jia-Ju Bai @ 2019-05-04 10:08 UTC (permalink / raw)
  To: ath9k-devel, kvalo, davem
  Cc: linux-wireless, netdev, linux-kernel, Jia-Ju Bai

ath9k_hw_reset() in ath9k_start() can fail, and in this case, 
ath9k_start() should return an error instead of executing the 
subsequent code.

Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
---
 drivers/net/wireless/ath/ath9k/main.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index f23cb2f3d296..f78e7c46764d 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -681,6 +681,7 @@ static int ath9k_start(struct ieee80211_hw *hw)
 			"Unable to reset hardware; reset status %d (freq %u MHz)\n",
 			r, curchan->center_freq);
 		ah->reset_power_on = false;
+		return r;
 	}
 
 	/* Setup our intr mask. */
-- 
2.17.0


^ permalink raw reply related

* Re: [PATCH] mt76: mt7615: Use after free in mt7615_mcu_set_bcn()
From: Lorenzo Bianconi @ 2019-05-04  9:52 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: Felix Fietkau, Ryder Lee, Lorenzo Bianconi, Roy Luo, Kalle Valo,
	Matthias Brugger, linux-wireless, linux-mediatek, kernel-janitors
In-Reply-To: <20190503130909.GI29695@mwanda>

[-- Attachment #1: Type: text/plain, Size: 1564 bytes --]

Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>

> We dereference "skb" when we assign:
> 
> 	req.pkt_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
>                                                 ^^^^^^^^
> So this patch just moves the dev_kfree_skb() down a bit to avoid the
> use after free.
> 
> Fixes: 04b8e65922f6 ("mt76: add mac80211 driver for MT7615 PCIe-based chipsets")
> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> ---
>  drivers/net/wireless/mediatek/mt76/mt7615/mcu.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
> index ea67c6022fe6..dc1301effa24 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
> @@ -1270,7 +1270,6 @@ int mt7615_mcu_set_bcn(struct mt7615_dev *dev, struct ieee80211_vif *vif,
>  	mt7615_mac_write_txwi(dev, (__le32 *)(req.pkt), skb, wcid, NULL,
>  			      0, NULL);
>  	memcpy(req.pkt + MT_TXD_SIZE, skb->data, skb->len);
> -	dev_kfree_skb(skb);
>  
>  	req.omac_idx = mvif->omac_idx;
>  	req.enable = en;
> @@ -1281,6 +1280,7 @@ int mt7615_mcu_set_bcn(struct mt7615_dev *dev, struct ieee80211_vif *vif,
>  	req.pkt_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
>  	req.tim_ie_pos = cpu_to_le16(MT_TXD_SIZE + tim_off);
>  
> +	dev_kfree_skb(skb);
>  	skb = mt7615_mcu_msg_alloc(&req, sizeof(req));
>  
>  	return mt7615_mcu_msg_send(dev, skb, MCU_EXT_CMD_BCN_OFFLOAD,
> -- 
> 2.18.0
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply

* [PATCH] net: wireless: iwlwifi: Fix double-free problems in iwl_req_fw_callback()
From: Jia-Ju Bai @ 2019-05-04  9:33 UTC (permalink / raw)
  To: johannes.berg, emmanuel.grumbach, luciano.coelho, linuxwifi,
	kvalo, davem
  Cc: linux-wireless, netdev, linux-kernel, Jia-Ju Bai

In the error handling code of iwl_req_fw_callback(), iwl_dealloc_ucode()
is called to free data. In iwl_drv_stop(), iwl_dealloc_ucode() is called
again, which can cause double-free problems.

To fix this bug, the call to iwl_dealloc_ucode() in
iwl_req_fw_callback() is deleted.

This bug is found by a runtime fuzzing tool named FIZZER written by us.

Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
---
 drivers/net/wireless/intel/iwlwifi/iwl-drv.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-drv.c b/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
index 689a65b11cc3..4fd1737d768b 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-drv.c
@@ -1579,7 +1579,6 @@ static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context)
 	goto free;
 
  out_free_fw:
-	iwl_dealloc_ucode(drv);
 	release_firmware(ucode_raw);
  out_unbind:
 	complete(&drv->request_firmware_complete);
-- 
2.17.0


^ permalink raw reply related

* [PATCH] net: wireless: b43: Avoid possible double calls to b43_one_core_detach()
From: Jia-Ju Bai @ 2019-05-04  9:10 UTC (permalink / raw)
  To: kvalo, davem, colin.king, yuehaibing
  Cc: linux-wireless, b43-dev, netdev, linux-kernel, Jia-Ju Bai

In b43_request_firmware(), when ieee80211_register_hw() fails,
b43_one_core_detach() is called. In b43_bcma_remove() and
b43_ssb_remove(), b43_one_core_detach() is called again. In this case, 
null-pointer dereferences and double-free problems can occur when 
the driver is removed.

To fix this bug, the call to b43_one_core_detach() in
b43_request_firmware() is deleted.

This bug is found by a runtime fuzzing tool named FIZZER written by us.

Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
---
 drivers/net/wireless/broadcom/b43/main.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/drivers/net/wireless/broadcom/b43/main.c b/drivers/net/wireless/broadcom/b43/main.c
index 74be3c809225..e666a472a0da 100644
--- a/drivers/net/wireless/broadcom/b43/main.c
+++ b/drivers/net/wireless/broadcom/b43/main.c
@@ -2610,18 +2610,13 @@ static void b43_request_firmware(struct work_struct *work)
 
 	err = ieee80211_register_hw(wl->hw);
 	if (err)
-		goto err_one_core_detach;
+		goto out;
 	wl->hw_registered = true;
 	b43_leds_register(wl->current_dev);
 
 	/* Register HW RNG driver */
 	b43_rng_init(wl);
 
-	goto out;
-
-err_one_core_detach:
-	b43_one_core_detach(dev->dev);
-
 out:
 	kfree(ctx);
 }
-- 
2.17.0


^ permalink raw reply related

* [bug report] rtw88: new Realtek 802.11ac driver
From: Dan Carpenter @ 2019-05-03 20:12 UTC (permalink / raw)
  To: yhchuang; +Cc: linux-wireless

Hello Yan-Hsuan Chuang,

The patch e3037485c68e: "rtw88: new Realtek 802.11ac driver" from Apr
26, 2019, leads to the following static checker warning:

	drivers/net/wireless/realtek/rtw88/efuse.c:78 rtw_dump_logical_efuse_map()
	error: buffer overflow 'log_map' 768 <= 768

drivers/net/wireless/realtek/rtw88/efuse.c
    38  static int rtw_dump_logical_efuse_map(struct rtw_dev *rtwdev, u8 *phy_map,
    39                                        u8 *log_map)
    40  {
    41          u32 physical_size = rtwdev->efuse.physical_size;
    42          u32 protect_size = rtwdev->efuse.protect_size;
    43          u32 logical_size = rtwdev->efuse.logical_size;
    44          u32 phy_idx, log_idx;
    45          u8 hdr1, hdr2;
    46          u8 blk_idx;
    47          u8 word_en;
    48          int i;
    49  
    50          for (phy_idx = 0; phy_idx < physical_size - protect_size;) {
    51                  hdr1 = phy_map[phy_idx];
    52                  hdr2 = phy_map[phy_idx + 1];
    53                  if (invalid_efuse_header(hdr1, hdr2))
    54                          break;
    55  
    56                  if ((hdr1 & 0x1f) == 0xf) {
    57                          /* 2-byte header format */
    58                          blk_idx = get_efuse_blk_idx_2_byte(hdr1, hdr2);
    59                          word_en = hdr2 & 0xf;
    60                          phy_idx += 2;
    61                  } else {
    62                          /* 1-byte header format */
    63                          blk_idx = get_efuse_blk_idx_1_byte(hdr1);
    64                          word_en = hdr1 & 0xf;
    65                          phy_idx += 1;
    66                  }
    67  
    68                  for (i = 0; i < 4; i++) {
    69                          if (invalid_efuse_content(word_en, i))
    70                                  continue;
    71  
    72                          log_idx = block_idx_to_logical_idx(blk_idx, i);
    73                          if (phy_idx + 1 > physical_size - protect_size ||
    74                              log_idx + 1 > logical_size)
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
This is a false positive because we know that "log_idx + 1" is an odd
number and logical_size is even so they can't be equal...  But I wonder
if it would make it more readable to change the > to >=?

The log_map[] array has logical_size elements.  It's allocated in
rtw_parse_efuse_map().

    75                                  return -EINVAL;
    76  
    77                          log_map[log_idx] = phy_map[phy_idx];
    78                          log_map[log_idx + 1] = phy_map[phy_idx + 1];
                                ^^^^^^^^^^^^^^^^^^^

    79                          phy_idx += 2;
    80                  }
    81          }
    82          return 0;

regards,
dan carpenter

^ permalink raw reply

* Re: [PATCH] ath10k: remove mmc_hw_reset while hif power down
From: Grant Grundler @ 2019-05-03 18:01 UTC (permalink / raw)
  To: Wen Gong; +Cc: ath10k, linux-wireless
In-Reply-To: <1556417825-13713-1-git-send-email-wgong@codeaurora.org>

[repeating comments I made in the gerrit review for Chrome OS :
https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/1585667
]

On Sat, Apr 27, 2019 at 7:17 PM Wen Gong <wgong@codeaurora.org> wrote:
>
> For sdio 3.0 chip, the clock will drop from 200M Hz to 50M Hz after load
> ath10k driver, it is because mmc_hw_reset will reset the sdio's power,
> then mmc will consider it as sdio 2.0 and drop the clock.

Wen,
5468e784c0600551ca03263f5255a375c05f88e7 commit message gives reasons
for adding the mmc_hw_reset() call. The commit message for removing
gives different reason for removal. Both are good but second one is
incomplete.

The commit message for removal should ALSO explain why adding this
call wasn't necessary in the first place OR move the call to a
different code path.

> Remove mmc_hw_reset will avoid the drop of clock.

This commit message makes it clear the original patch introduced a new
problem. But the original patch fixed a different problem and that
this proposed change seems likely to re-introduce and the commit
message should explain why that isn't true (or how the original was
fixed differently)

cheers,
grant

>
> Tested with QCA6174 SDIO with firmware
> WLAN.RMH.4.4.1-00007-QCARMSWP-1.
>
> Signed-off-by: Wen Gong <wgong@codeaurora.org>
> ---
>  drivers/net/wireless/ath/ath10k/sdio.c | 4 ----
>  1 file changed, 4 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath10k/sdio.c b/drivers/net/wireless/ath/ath10k/sdio.c
> index fae56c6..f1d2af8 100644
> --- a/drivers/net/wireless/ath/ath10k/sdio.c
> +++ b/drivers/net/wireless/ath/ath10k/sdio.c
> @@ -1433,10 +1433,6 @@ static void ath10k_sdio_hif_power_down(struct ath10k *ar)
>                 return;
>         }
>
> -       ret = mmc_hw_reset(ar_sdio->func->card->host);
> -       if (ret)
> -               ath10k_warn(ar, "unable to reset sdio: %d\n", ret);
> -
>         sdio_release_host(ar_sdio->func);
>
>         ar_sdio->is_disabled = true;
> --
> 1.9.1
>

^ permalink raw reply

* pull request: iwlwifi firmware updates 2019-05-03
From: Luca Coelho @ 2019-05-03 16:40 UTC (permalink / raw)
  To: linux-firmware@kernel.org
  Cc: linux-wireless@vger.kernel.org, linuxwifi, kyle@infradead.org,
	jwboyer@kernel.org, ben@decadent.org.uk
In-Reply-To: <1546157106.3213.3.camel@intel.com>

[-- Attachment #1: Type: text/plain, Size: 1513 bytes --]

Hi,

This contains some new versions of firmwares for the 9000 series of
devices and the firmware for a new device, namely 22260.

Please pull or let me know if there are any issues.

--
Cheers,
Luca.


The following changes since commit 92e17d0dd2437140fab044ae62baf69b35d7d1fa:

  amdgpu: update vega20 to the latest 19.10 firmware (2019-05-02 06:24:19 -0400)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/linux-firmware.git tags/iwlwifi-fw-2019-05-03

for you to fetch changes up to 95a93535b723085ff74845eb8733d01c8ff5c052:

  iwlwifi: update -46 firmwares for 22260 and 9000 series (2019-05-03 19:33:53 +0300)

----------------------------------------------------------------
updates for -46.ucode for 9260, 9000 and 22260

----------------------------------------------------------------
Luca Coelho (3):
      iwlwifi: add -46.ucode firmwares for 9000 series
      iwlwifi: add firmware for 22260 and update 9000 series -46 firmwares
      iwlwifi: update -46 firmwares for 22260 and 9000 series

 WHENCE                            |   9 +++++++++
 iwlwifi-9000-pu-b0-jf-b0-46.ucode | Bin 0 -> 1448644 bytes
 iwlwifi-9260-th-b0-jf-b0-46.ucode | Bin 0 -> 1456088 bytes
 iwlwifi-cc-a0-46.ucode            | Bin 0 -> 1044072 bytes
 4 files changed, 9 insertions(+)
 create mode 100644 iwlwifi-9000-pu-b0-jf-b0-46.ucode
 create mode 100644 iwlwifi-9260-th-b0-jf-b0-46.ucode
 create mode 100644 iwlwifi-cc-a0-46.ucode

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply

* [PATCH v4 07/10] net: wireless: support of_get_mac_address new ERR_PTR error
From: Petr Štetiar @ 2019-05-03 14:27 UTC (permalink / raw)
  To: netdev, devicetree, QCA ath9k Development, Kalle Valo,
	David S. Miller, Felix Fietkau, Lorenzo Bianconi,
	Matthias Brugger, Stanislaw Gruszka, Helmut Schaa
  Cc: Andrew Lunn, Florian Fainelli, Heiner Kallweit, Frank Rowand,
	Srinivas Kandagatla, Maxime Ripard, Petr Štetiar,
	linux-wireless, linux-kernel, linux-arm-kernel, linux-mediatek
In-Reply-To: <1556893635-18549-1-git-send-email-ynezz@true.cz>

There was NVMEM support added to of_get_mac_address, so it could now return
ERR_PTR encoded error values, so we need to adjust all current users of
of_get_mac_address to this new fact.

Signed-off-by: Petr Štetiar <ynezz@true.cz>
---

 Changes since v3:

  * IS_ERR_OR_NULL -> IS_ERR

 drivers/net/wireless/ath/ath9k/init.c          | 2 +-
 drivers/net/wireless/mediatek/mt76/eeprom.c    | 2 +-
 drivers/net/wireless/ralink/rt2x00/rt2x00dev.c | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c
index 98141b6..a04d861 100644
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -642,7 +642,7 @@ static int ath9k_of_init(struct ath_softc *sc)
 	}
 
 	mac = of_get_mac_address(np);
-	if (mac)
+	if (!IS_ERR(mac))
 		ether_addr_copy(common->macaddr, mac);
 
 	return 0;
diff --git a/drivers/net/wireless/mediatek/mt76/eeprom.c b/drivers/net/wireless/mediatek/mt76/eeprom.c
index a1529920d..0496493 100644
--- a/drivers/net/wireless/mediatek/mt76/eeprom.c
+++ b/drivers/net/wireless/mediatek/mt76/eeprom.c
@@ -94,7 +94,7 @@
 		return;
 
 	mac = of_get_mac_address(np);
-	if (mac)
+	if (!IS_ERR(mac))
 		memcpy(dev->macaddr, mac, ETH_ALEN);
 #endif
 
diff --git a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
index 357c094..19a794a 100644
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
@@ -1007,7 +1007,7 @@ void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr
 	const char *mac_addr;
 
 	mac_addr = of_get_mac_address(rt2x00dev->dev->of_node);
-	if (mac_addr)
+	if (!IS_ERR(mac_addr))
 		ether_addr_copy(eeprom_mac_addr, mac_addr);
 
 	if (!is_valid_ether_addr(eeprom_mac_addr)) {
-- 
1.9.1


^ permalink raw reply related

* [PATCH v4 02/10] dt-bindings: doc: reflect new NVMEM of_get_mac_address behaviour
From: Petr Štetiar @ 2019-05-03 14:27 UTC (permalink / raw)
  To: netdev, devicetree, David S. Miller, Rob Herring, Mark Rutland,
	Andrew Lunn, Vivien Didelot, Florian Fainelli, Yisen Zhuang,
	Salil Mehta, Woojung Huh, Microchip Linux Driver Support,
	Kunihiko Hayashi, Masahiro Yamada, Jassi Brar, Kalle Valo,
	Matthias Brugger
  Cc: Heiner Kallweit, Frank Rowand, Srinivas Kandagatla, Maxime Ripard,
	Petr Štetiar, linux-kernel, linux-arm-kernel, linux-wireless,
	linux-mediatek
In-Reply-To: <1556893635-18549-1-git-send-email-ynezz@true.cz>

As of_get_mac_address now supports NVMEM under the hood, we need to update
the bindings documentation with the new nvmem-cell* properties, which would
mean copy&pasting a lot of redundant information to every binding
documentation currently referencing some of the MAC address properties.

So I've just removed all the references to the optional MAC address
properties and replaced them with the small note referencing
net/ethernet.txt file.

Signed-off-by: Petr Štetiar <ynezz@true.cz>
---

 Changes since v2:

 * replaced only MAC address related optional properties with a text
   referencing ethernet.txt

 Documentation/devicetree/bindings/net/altera_tse.txt           |  5 ++---
 Documentation/devicetree/bindings/net/amd-xgbe.txt             |  5 +++--
 Documentation/devicetree/bindings/net/brcm,amac.txt            |  4 ++--
 Documentation/devicetree/bindings/net/cpsw.txt                 |  4 +++-
 Documentation/devicetree/bindings/net/davinci_emac.txt         |  5 +++--
 Documentation/devicetree/bindings/net/dsa/dsa.txt              |  5 ++---
 Documentation/devicetree/bindings/net/ethernet.txt             |  6 ++++--
 Documentation/devicetree/bindings/net/hisilicon-femac.txt      |  4 +++-
 .../devicetree/bindings/net/hisilicon-hix5hd2-gmac.txt         |  4 +++-
 Documentation/devicetree/bindings/net/keystone-netcp.txt       | 10 +++++-----
 Documentation/devicetree/bindings/net/macb.txt                 |  5 ++---
 Documentation/devicetree/bindings/net/marvell-pxa168.txt       |  4 +++-
 Documentation/devicetree/bindings/net/microchip,enc28j60.txt   |  3 ++-
 Documentation/devicetree/bindings/net/microchip,lan78xx.txt    |  5 ++---
 Documentation/devicetree/bindings/net/qca,qca7000.txt          |  4 +++-
 Documentation/devicetree/bindings/net/samsung-sxgbe.txt        |  4 +++-
 .../devicetree/bindings/net/snps,dwc-qos-ethernet.txt          |  5 +++--
 .../devicetree/bindings/net/socionext,uniphier-ave4.txt        |  4 ++--
 Documentation/devicetree/bindings/net/socionext-netsec.txt     |  5 +++--
 .../devicetree/bindings/net/wireless/mediatek,mt76.txt         |  5 +++--
 Documentation/devicetree/bindings/net/wireless/qca,ath9k.txt   |  4 ++--
 21 files changed, 58 insertions(+), 42 deletions(-)

diff --git a/Documentation/devicetree/bindings/net/altera_tse.txt b/Documentation/devicetree/bindings/net/altera_tse.txt
index 0e21df9..0b7d4d3 100644
--- a/Documentation/devicetree/bindings/net/altera_tse.txt
+++ b/Documentation/devicetree/bindings/net/altera_tse.txt
@@ -46,9 +46,8 @@ Required properties:
 	- reg: phy id used to communicate to phy.
 	- device_type: Must be "ethernet-phy".
 
-Optional properties:
-- local-mac-address: See ethernet.txt in the same directory.
-- max-frame-size: See ethernet.txt in the same directory.
+The MAC address will be determined using the optional properties defined in
+ethernet.txt.
 
 Example:
 
diff --git a/Documentation/devicetree/bindings/net/amd-xgbe.txt b/Documentation/devicetree/bindings/net/amd-xgbe.txt
index 93dcb79..9c27dfc 100644
--- a/Documentation/devicetree/bindings/net/amd-xgbe.txt
+++ b/Documentation/devicetree/bindings/net/amd-xgbe.txt
@@ -24,8 +24,6 @@ Required properties:
 - phy-mode: See ethernet.txt file in the same directory
 
 Optional properties:
-- mac-address: mac address to be assigned to the device. Can be overridden
-  by UEFI.
 - dma-coherent: Present if dma operations are coherent
 - amd,per-channel-interrupt: Indicates that Rx and Tx complete will generate
   a unique interrupt for each DMA channel - this requires an additional
@@ -34,6 +32,9 @@ Optional properties:
     0 - 1GbE and 10GbE (default)
     1 - 2.5GbE and 10GbE
 
+The MAC address will be determined using the optional properties defined in
+ethernet.txt.
+
 The following optional properties are represented by an array with each
 value corresponding to a particular speed. The first array value represents
 the setting for the 1GbE speed, the second value for the 2.5GbE speed and
diff --git a/Documentation/devicetree/bindings/net/brcm,amac.txt b/Documentation/devicetree/bindings/net/brcm,amac.txt
index 0bfad65..0120ebe 100644
--- a/Documentation/devicetree/bindings/net/brcm,amac.txt
+++ b/Documentation/devicetree/bindings/net/brcm,amac.txt
@@ -16,8 +16,8 @@ Required properties:
 				registers (required for Northstar2)
  - interrupts:	Interrupt number
 
-Optional properties:
-- mac-address:	See ethernet.txt file in the same directory
+The MAC address will be determined using the optional properties
+defined in ethernet.txt.
 
 Examples:
 
diff --git a/Documentation/devicetree/bindings/net/cpsw.txt b/Documentation/devicetree/bindings/net/cpsw.txt
index 3264e19..7c7ac5e 100644
--- a/Documentation/devicetree/bindings/net/cpsw.txt
+++ b/Documentation/devicetree/bindings/net/cpsw.txt
@@ -49,10 +49,12 @@ Required properties:
 
 Optional properties:
 - dual_emac_res_vlan	: Specifies VID to be used to segregate the ports
-- mac-address		: See ethernet.txt file in the same directory
 - phy_id		: Specifies slave phy id (deprecated, use phy-handle)
 - phy-handle		: See ethernet.txt file in the same directory
 
+The MAC address will be determined using the optional properties
+defined in ethernet.txt.
+
 Slave sub-nodes:
 - fixed-link		: See fixed-link.txt file in the same directory
 
diff --git a/Documentation/devicetree/bindings/net/davinci_emac.txt b/Documentation/devicetree/bindings/net/davinci_emac.txt
index ca83dcc..5e3579e 100644
--- a/Documentation/devicetree/bindings/net/davinci_emac.txt
+++ b/Documentation/devicetree/bindings/net/davinci_emac.txt
@@ -20,11 +20,12 @@ Required properties:
 Optional properties:
 - phy-handle: See ethernet.txt file in the same directory.
               If absent, davinci_emac driver defaults to 100/FULL.
-- nvmem-cells: phandle, reference to an nvmem node for the MAC address
-- nvmem-cell-names: string, should be "mac-address" if nvmem is to be used
 - ti,davinci-rmii-en: 1 byte, 1 means use RMII
 - ti,davinci-no-bd-ram: boolean, does EMAC have BD RAM?
 
+The MAC address will be determined using the optional properties
+defined in ethernet.txt.
+
 Example (enbw_cmc board):
 	eth0: emac@1e20000 {
 		compatible = "ti,davinci-dm6467-emac";
diff --git a/Documentation/devicetree/bindings/net/dsa/dsa.txt b/Documentation/devicetree/bindings/net/dsa/dsa.txt
index d66a529..a237567 100644
--- a/Documentation/devicetree/bindings/net/dsa/dsa.txt
+++ b/Documentation/devicetree/bindings/net/dsa/dsa.txt
@@ -71,9 +71,8 @@ properties, described in binding documents:
 			  Documentation/devicetree/bindings/net/fixed-link.txt
 			  for details.
 
-- local-mac-address	: See
-			  Documentation/devicetree/bindings/net/ethernet.txt
-			  for details.
+The MAC address will be determined using the optional properties
+defined in ethernet.txt.
 
 Example
 
diff --git a/Documentation/devicetree/bindings/net/ethernet.txt b/Documentation/devicetree/bindings/net/ethernet.txt
index a686215..6992444 100644
--- a/Documentation/devicetree/bindings/net/ethernet.txt
+++ b/Documentation/devicetree/bindings/net/ethernet.txt
@@ -4,12 +4,14 @@ NOTE: All 'phy*' properties documented below are Ethernet specific. For the
 generic PHY 'phys' property, see
 Documentation/devicetree/bindings/phy/phy-bindings.txt.
 
-- local-mac-address: array of 6 bytes, specifies the MAC address that was
-  assigned to the network device;
 - mac-address: array of 6 bytes, specifies the MAC address that was last used by
   the boot program; should be used in cases where the MAC address assigned to
   the device by the boot program is different from the "local-mac-address"
   property;
+- local-mac-address: array of 6 bytes, specifies the MAC address that was
+  assigned to the network device;
+- nvmem-cells: phandle, reference to an nvmem node for the MAC address
+- nvmem-cell-names: string, should be "mac-address" if nvmem is to be used
 - max-speed: number, specifies maximum speed in Mbit/s supported by the device;
 - max-frame-size: number, maximum transfer unit (IEEE defined MTU), rather than
   the maximum frame size (there's contradiction in the Devicetree
diff --git a/Documentation/devicetree/bindings/net/hisilicon-femac.txt b/Documentation/devicetree/bindings/net/hisilicon-femac.txt
index d11af5e..5f96976 100644
--- a/Documentation/devicetree/bindings/net/hisilicon-femac.txt
+++ b/Documentation/devicetree/bindings/net/hisilicon-femac.txt
@@ -14,7 +14,6 @@ Required properties:
 	the PHY reset signal(optional).
 - reset-names: should contain the reset signal name "mac"(required)
 	and "phy"(optional).
-- mac-address: see ethernet.txt [1].
 - phy-mode: see ethernet.txt [1].
 - phy-handle: see ethernet.txt [1].
 - hisilicon,phy-reset-delays-us: triplet of delays if PHY reset signal given.
@@ -22,6 +21,9 @@ Required properties:
 	The 2nd cell is reset pulse in micro seconds.
 	The 3rd cell is reset post-delay in micro seconds.
 
+The MAC address will be determined using the optional properties
+defined in ethernet.txt[1].
+
 [1] Documentation/devicetree/bindings/net/ethernet.txt
 
 Example:
diff --git a/Documentation/devicetree/bindings/net/hisilicon-hix5hd2-gmac.txt b/Documentation/devicetree/bindings/net/hisilicon-hix5hd2-gmac.txt
index eea73ad..cddf46b 100644
--- a/Documentation/devicetree/bindings/net/hisilicon-hix5hd2-gmac.txt
+++ b/Documentation/devicetree/bindings/net/hisilicon-hix5hd2-gmac.txt
@@ -18,7 +18,6 @@ Required properties:
 - #size-cells: must be <0>.
 - phy-mode: see ethernet.txt [1].
 - phy-handle: see ethernet.txt [1].
-- mac-address: see ethernet.txt [1].
 - clocks: clock phandle and specifier pair.
 - clock-names: contain the clock name "mac_core"(required) and "mac_ifc"(optional).
 - resets: should contain the phandle to the MAC core reset signal(optional),
@@ -31,6 +30,9 @@ Required properties:
 	The 2nd cell is reset pulse in micro seconds.
 	The 3rd cell is reset post-delay in micro seconds.
 
+The MAC address will be determined using the properties defined in
+ethernet.txt[1].
+
 - PHY subnode: inherits from phy binding [2]
 
 [1] Documentation/devicetree/bindings/net/ethernet.txt
diff --git a/Documentation/devicetree/bindings/net/keystone-netcp.txt b/Documentation/devicetree/bindings/net/keystone-netcp.txt
index 04ba1dc..3a65aab 100644
--- a/Documentation/devicetree/bindings/net/keystone-netcp.txt
+++ b/Documentation/devicetree/bindings/net/keystone-netcp.txt
@@ -135,14 +135,14 @@ Optional properties:
 		are swapped.  The netcp driver will swap the two DWORDs
 		back to the proper order when this property is set to 2
 		when it obtains the mac address from efuse.
-- local-mac-address:	the driver is designed to use the of_get_mac_address api
-			only if efuse-mac is 0. When efuse-mac is 0, the MAC
-			address is obtained from local-mac-address. If this
-			attribute is not present, then the driver will use a
-			random MAC address.
 - "netcp-device label":	phandle to the device specification for each of NetCP
 			sub-module attached to this interface.
 
+The MAC address will be determined using the optional properties defined in
+ethernet.txt, as provided by the of_get_mac_address API and only if efuse-mac
+is set to 0. If any of the optional MAC address properties are not present,
+then the driver will use random MAC address.
+
 Example binding:
 
 netcp: netcp@2000000 {
diff --git a/Documentation/devicetree/bindings/net/macb.txt b/Documentation/devicetree/bindings/net/macb.txt
index 8b80515..9c5e944 100644
--- a/Documentation/devicetree/bindings/net/macb.txt
+++ b/Documentation/devicetree/bindings/net/macb.txt
@@ -26,9 +26,8 @@ Required properties:
 	Optional elements: 'tsu_clk'
 - clocks: Phandles to input clocks.
 
-Optional properties:
-- nvmem-cells: phandle, reference to an nvmem node for the MAC address
-- nvmem-cell-names: string, should be "mac-address" if nvmem is to be used
+The MAC address will be determined using the optional properties
+defined in ethernet.txt.
 
 Optional properties for PHY child node:
 - reset-gpios : Should specify the gpio for phy reset
diff --git a/Documentation/devicetree/bindings/net/marvell-pxa168.txt b/Documentation/devicetree/bindings/net/marvell-pxa168.txt
index 845a148..5574af3 100644
--- a/Documentation/devicetree/bindings/net/marvell-pxa168.txt
+++ b/Documentation/devicetree/bindings/net/marvell-pxa168.txt
@@ -11,7 +11,9 @@ Optional properties:
 - #address-cells: must be 1 when using sub-nodes.
 - #size-cells: must be 0 when using sub-nodes.
 - phy-handle: see ethernet.txt file in the same directory.
-- local-mac-address: see ethernet.txt file in the same directory.
+
+The MAC address will be determined using the optional properties
+defined in ethernet.txt.
 
 Sub-nodes:
 Each PHY can be represented as a sub-node. This is not mandatory.
diff --git a/Documentation/devicetree/bindings/net/microchip,enc28j60.txt b/Documentation/devicetree/bindings/net/microchip,enc28j60.txt
index 24626e0..a827592 100644
--- a/Documentation/devicetree/bindings/net/microchip,enc28j60.txt
+++ b/Documentation/devicetree/bindings/net/microchip,enc28j60.txt
@@ -21,8 +21,9 @@ Optional properties:
 - spi-max-frequency: Maximum frequency of the SPI bus when accessing the ENC28J60.
   According to the ENC28J80 datasheet, the chip allows a maximum of 20 MHz, however,
   board designs may need to limit this value.
-- local-mac-address: See ethernet.txt in the same directory.
 
+The MAC address will be determined using the optional properties
+defined in ethernet.txt.
 
 Example (for NXP i.MX28 with pin control stuff for GPIO irq):
 
diff --git a/Documentation/devicetree/bindings/net/microchip,lan78xx.txt b/Documentation/devicetree/bindings/net/microchip,lan78xx.txt
index 76786a0..11a6795 100644
--- a/Documentation/devicetree/bindings/net/microchip,lan78xx.txt
+++ b/Documentation/devicetree/bindings/net/microchip,lan78xx.txt
@@ -7,9 +7,8 @@ The Device Tree properties, if present, override the OTP and EEPROM.
 Required properties:
 - compatible: Should be one of "usb424,7800", "usb424,7801" or "usb424,7850".
 
-Optional properties:
-- local-mac-address:   see ethernet.txt
-- mac-address:         see ethernet.txt
+The MAC address will be determined using the optional properties
+defined in ethernet.txt.
 
 Optional properties of the embedded PHY:
 - microchip,led-modes: a 0..4 element vector, with each element configuring
diff --git a/Documentation/devicetree/bindings/net/qca,qca7000.txt b/Documentation/devicetree/bindings/net/qca,qca7000.txt
index e4a8a51..21c36e5 100644
--- a/Documentation/devicetree/bindings/net/qca,qca7000.txt
+++ b/Documentation/devicetree/bindings/net/qca,qca7000.txt
@@ -23,7 +23,6 @@ Optional properties:
 		      Numbers smaller than 1000000 or greater than 16000000
 		      are invalid. Missing the property will set the SPI
 		      frequency to 8000000 Hertz.
-- local-mac-address : see ./ethernet.txt
 - qca,legacy-mode   : Set the SPI data transfer of the QCA7000 to legacy mode.
 		      In this mode the SPI master must toggle the chip select
 		      between each data word. In burst mode these gaps aren't
@@ -31,6 +30,9 @@ Optional properties:
 		      the QCA7000 is setup via GPIO pin strapping. If the
 		      property is missing the driver defaults to burst mode.
 
+The MAC address will be determined using the optional properties
+defined in ethernet.txt.
+
 SPI Example:
 
 /* Freescale i.MX28 SPI master*/
diff --git a/Documentation/devicetree/bindings/net/samsung-sxgbe.txt b/Documentation/devicetree/bindings/net/samsung-sxgbe.txt
index 46e5911..2cff6d8 100644
--- a/Documentation/devicetree/bindings/net/samsung-sxgbe.txt
+++ b/Documentation/devicetree/bindings/net/samsung-sxgbe.txt
@@ -21,10 +21,12 @@ Required properties:
   range.
 
 Optional properties:
-- mac-address: 6 bytes, mac address
 - max-frame-size: Maximum Transfer Unit (IEEE defined MTU), rather
 		  than the maximum frame size.
 
+The MAC address will be determined using the optional properties
+defined in ethernet.txt.
+
 Example:
 
 	aliases {
diff --git a/Documentation/devicetree/bindings/net/snps,dwc-qos-ethernet.txt b/Documentation/devicetree/bindings/net/snps,dwc-qos-ethernet.txt
index 36f1aef..ad3c6e1 100644
--- a/Documentation/devicetree/bindings/net/snps,dwc-qos-ethernet.txt
+++ b/Documentation/devicetree/bindings/net/snps,dwc-qos-ethernet.txt
@@ -103,8 +103,6 @@ Required properties:
 
 Optional properties:
 - dma-coherent: Present if dma operations are coherent
-- mac-address: See ethernet.txt in the same directory
-- local-mac-address: See ethernet.txt in the same directory
 - phy-reset-gpios: Phandle and specifier for any GPIO used to reset the PHY.
   See ../gpio/gpio.txt.
 - snps,en-lpi: If present it enables use of the AXI low-power interface
@@ -133,6 +131,9 @@ Optional properties:
     - device_type: Must be "ethernet-phy".
     - fixed-mode device tree subnode: see fixed-link.txt in the same directory
 
+The MAC address will be determined using the optional properties
+defined in ethernet.txt.
+
 Examples:
 ethernet2@40010000 {
 	clock-names = "phy_ref_clk", "apb_pclk";
diff --git a/Documentation/devicetree/bindings/net/socionext,uniphier-ave4.txt b/Documentation/devicetree/bindings/net/socionext,uniphier-ave4.txt
index fc8f017..4e85fc4 100644
--- a/Documentation/devicetree/bindings/net/socionext,uniphier-ave4.txt
+++ b/Documentation/devicetree/bindings/net/socionext,uniphier-ave4.txt
@@ -31,8 +31,8 @@ Required properties:
  - socionext,syscon-phy-mode: A phandle to syscon with one argument
 	that configures phy mode. The argument is the ID of MAC instance.
 
-Optional properties:
- - local-mac-address: See ethernet.txt in the same directory.
+The MAC address will be determined using the optional properties
+defined in ethernet.txt.
 
 Required subnode:
  - mdio: A container for child nodes representing phy nodes.
diff --git a/Documentation/devicetree/bindings/net/socionext-netsec.txt b/Documentation/devicetree/bindings/net/socionext-netsec.txt
index 0cff94f..9d6c9feb 100644
--- a/Documentation/devicetree/bindings/net/socionext-netsec.txt
+++ b/Documentation/devicetree/bindings/net/socionext-netsec.txt
@@ -26,11 +26,12 @@ Required properties:
 Optional properties: (See ethernet.txt file in the same directory)
 - dma-coherent: Boolean property, must only be present if memory
 	accesses performed by the device are cache coherent.
-- local-mac-address: See ethernet.txt in the same directory.
-- mac-address: See ethernet.txt in the same directory.
 - max-speed: See ethernet.txt in the same directory.
 - max-frame-size: See ethernet.txt in the same directory.
 
+The MAC address will be determined using the optional properties
+defined in ethernet.txt.
+
 Example:
 	eth0: ethernet@522d0000 {
 		compatible = "socionext,synquacer-netsec";
diff --git a/Documentation/devicetree/bindings/net/wireless/mediatek,mt76.txt b/Documentation/devicetree/bindings/net/wireless/mediatek,mt76.txt
index 7b9a776..7466550 100644
--- a/Documentation/devicetree/bindings/net/wireless/mediatek,mt76.txt
+++ b/Documentation/devicetree/bindings/net/wireless/mediatek,mt76.txt
@@ -13,11 +13,12 @@ properties:
 
 Optional properties:
 
-- mac-address: See ethernet.txt in the parent directory
-- local-mac-address: See ethernet.txt in the parent directory
 - ieee80211-freq-limit: See ieee80211.txt
 - mediatek,mtd-eeprom: Specify a MTD partition + offset containing EEPROM data
 
+The driver is using of_get_mac_address API, so the MAC address can be as well
+be set with corresponding optional properties defined in net/ethernet.txt.
+
 Optional nodes:
 - led: Properties for a connected LED
   Optional properties:
diff --git a/Documentation/devicetree/bindings/net/wireless/qca,ath9k.txt b/Documentation/devicetree/bindings/net/wireless/qca,ath9k.txt
index b7396c8..aaaeeb5 100644
--- a/Documentation/devicetree/bindings/net/wireless/qca,ath9k.txt
+++ b/Documentation/devicetree/bindings/net/wireless/qca,ath9k.txt
@@ -34,9 +34,9 @@ Optional properties:
 			ath9k wireless chip (in this case the calibration /
 			EEPROM data will be loaded from userspace using the
 			kernel firmware loader).
-- mac-address: See ethernet.txt in the parent directory
-- local-mac-address: See ethernet.txt in the parent directory
 
+The MAC address will be determined using the optional properties defined in
+net/ethernet.txt.
 
 In this example, the node is defined as child node of the PCI controller:
 &pci0 {
-- 
1.9.1


^ permalink raw reply related

* [PATCH] mt76: mt7615: Use after free in mt7615_mcu_set_bcn()
From: Dan Carpenter @ 2019-05-03 13:09 UTC (permalink / raw)
  To: Felix Fietkau, Ryder Lee
  Cc: Lorenzo Bianconi, Roy Luo, Kalle Valo, Matthias Brugger,
	linux-wireless, linux-mediatek, kernel-janitors

We dereference "skb" when we assign:

	req.pkt_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
                                                ^^^^^^^^
So this patch just moves the dev_kfree_skb() down a bit to avoid the
use after free.

Fixes: 04b8e65922f6 ("mt76: add mac80211 driver for MT7615 PCIe-based chipsets")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
 drivers/net/wireless/mediatek/mt76/mt7615/mcu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
index ea67c6022fe6..dc1301effa24 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
@@ -1270,7 +1270,6 @@ int mt7615_mcu_set_bcn(struct mt7615_dev *dev, struct ieee80211_vif *vif,
 	mt7615_mac_write_txwi(dev, (__le32 *)(req.pkt), skb, wcid, NULL,
 			      0, NULL);
 	memcpy(req.pkt + MT_TXD_SIZE, skb->data, skb->len);
-	dev_kfree_skb(skb);
 
 	req.omac_idx = mvif->omac_idx;
 	req.enable = en;
@@ -1281,6 +1280,7 @@ int mt7615_mcu_set_bcn(struct mt7615_dev *dev, struct ieee80211_vif *vif,
 	req.pkt_len = cpu_to_le16(MT_TXD_SIZE + skb->len);
 	req.tim_ie_pos = cpu_to_le16(MT_TXD_SIZE + tim_off);
 
+	dev_kfree_skb(skb);
 	skb = mt7615_mcu_msg_alloc(&req, sizeof(req));
 
 	return mt7615_mcu_msg_send(dev, skb, MCU_EXT_CMD_BCN_OFFLOAD,
-- 
2.18.0


^ permalink raw reply related

* [PATCH] mt76: Fix a signedness bug in mt7615_add_interface()
From: Dan Carpenter @ 2019-05-03 12:54 UTC (permalink / raw)
  To: Felix Fietkau, Ryder Lee
  Cc: Lorenzo Bianconi, Roy Luo, Kalle Valo, Matthias Brugger,
	linux-wireless, linux-mediatek, kernel-janitors

The problem is that "mvif->omac_idx" is a u8 so it can't be negative
and the error handling won't work.  The get_omac_idx() function returns
-1 on error.

Fixes: 04b8e65922f6 ("mt76: add mac80211 driver for MT7615 PCIe-based chipsets")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
 drivers/net/wireless/mediatek/mt76/mt7615/main.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt7615/main.c b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
index 80e6b211f60b..8d7a47d1b205 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7615/main.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7615/main.c
@@ -77,11 +77,12 @@ static int mt7615_add_interface(struct ieee80211_hw *hw,
 		goto out;
 	}
 
-	mvif->omac_idx = get_omac_idx(vif->type, dev->omac_mask);
-	if (mvif->omac_idx < 0) {
+	idx = get_omac_idx(vif->type, dev->omac_mask);
+	if (idx < 0) {
 		ret = -ENOSPC;
 		goto out;
 	}
+	mvif->omac_idx = idx;
 
 	/* TODO: DBDC support. Use band 0 and wmm 0 for now */
 	mvif->band_idx = 0;
-- 
2.18.0


^ permalink raw reply related

* [PATCH] rtw88: avoid circular locking between local->iflist_mtx and rtwdev->mutex
From: Stanislaw Gruszka @ 2019-05-03 12:29 UTC (permalink / raw)
  To: linux-wireless; +Cc: Yan-Hsuan Chuang, Stanislaw Gruszka

Remove circular lock dependency by using atomic version of interfaces
iterate in watch_dog_work(), hence avoid taking local->iflist_mtx
(rtw_vif_watch_dog_iter() only update some data, it can be called from
atomic context). Fixes below LOCKDEP warning:

[ 1157.219415] ======================================================
[ 1157.225772] [ INFO: possible circular locking dependency detected ]
[ 1157.232150] 3.10.0-1043.el7.sgruszka1.x86_64.debug #1 Not tainted
[ 1157.238346] -------------------------------------------------------
[ 1157.244635] kworker/u4:2/14490 is trying to acquire lock:
[ 1157.250194]  (&rtwdev->mutex){+.+.+.}, at: [<ffffffffc098322b>] rtw_ops_config+0x2b/0x90 [rtw88]
[ 1157.259151]
but task is already holding lock:
[ 1157.265085]  (&local->iflist_mtx){+.+...}, at: [<ffffffffc0b8ab7a>] ieee80211_mgd_probe_ap.part.28+0xca/0x160 [mac80211]
[ 1157.276169]
which lock already depends on the new lock.

[ 1157.284488]
the existing dependency chain (in reverse order) is:
[ 1157.292101]
-> #2 (&local->iflist_mtx){+.+...}:
[ 1157.296919]        [<ffffffffbc741a29>] lock_acquire+0x99/0x1e0
[ 1157.302955]        [<ffffffffbce72793>] mutex_lock_nested+0x93/0x410
[ 1157.309416]        [<ffffffffc0b6038f>] ieee80211_iterate_interfaces+0x2f/0x60 [mac80211]
[ 1157.317730]        [<ffffffffc09811ab>] rtw_watch_dog_work+0xcb/0x130 [rtw88]
[ 1157.325003]        [<ffffffffbc6d77bc>] process_one_work+0x22c/0x720
[ 1157.331481]        [<ffffffffbc6d7dd6>] worker_thread+0x126/0x3b0
[ 1157.337589]        [<ffffffffbc6e107f>] kthread+0xef/0x100
[ 1157.343260]        [<ffffffffbce848b7>] ret_from_fork_nospec_end+0x0/0x39
[ 1157.350091]
-> #1 ((&(&rtwdev->watch_dog_work)->work)){+.+...}:
[ 1157.356314]        [<ffffffffbc741a29>] lock_acquire+0x99/0x1e0
[ 1157.362427]        [<ffffffffbc6d570b>] flush_work+0x5b/0x310
[ 1157.368287]        [<ffffffffbc6d740e>] __cancel_work_timer+0xae/0x170
[ 1157.374940]        [<ffffffffbc6d7583>] cancel_delayed_work_sync+0x13/0x20
[ 1157.381930]        [<ffffffffc0982b49>] rtw_core_stop+0x29/0x50 [rtw88]
[ 1157.388679]        [<ffffffffc098bee6>] rtw_enter_ips+0x16/0x20 [rtw88]
[ 1157.395428]        [<ffffffffc0983242>] rtw_ops_config+0x42/0x90 [rtw88]
[ 1157.402173]        [<ffffffffc0b13343>] ieee80211_hw_config+0xc3/0x680 [mac80211]
[ 1157.409854]        [<ffffffffc0b3925b>] ieee80211_do_open+0x69b/0x9c0 [mac80211]
[ 1157.417418]        [<ffffffffc0b395e9>] ieee80211_open+0x69/0x70 [mac80211]
[ 1157.424496]        [<ffffffffbcd03442>] __dev_open+0xe2/0x160
[ 1157.430356]        [<ffffffffbcd03773>] __dev_change_flags+0xa3/0x180
[ 1157.436922]        [<ffffffffbcd03879>] dev_change_flags+0x29/0x60
[ 1157.443224]        [<ffffffffbcda14c4>] devinet_ioctl+0x794/0x890
[ 1157.449331]        [<ffffffffbcda27b5>] inet_ioctl+0x75/0xa0
[ 1157.455087]        [<ffffffffbccd54eb>] sock_do_ioctl+0x2b/0x60
[ 1157.461178]        [<ffffffffbccd5753>] sock_ioctl+0x233/0x310
[ 1157.467109]        [<ffffffffbc8bd820>] do_vfs_ioctl+0x410/0x6c0
[ 1157.473233]        [<ffffffffbc8bdb71>] SyS_ioctl+0xa1/0xc0
[ 1157.478914]        [<ffffffffbce84a5e>] system_call_fastpath+0x25/0x2a
[ 1157.485569]
-> #0 (&rtwdev->mutex){+.+.+.}:
[ 1157.490022]        [<ffffffffbc7409d1>] __lock_acquire+0xec1/0x1630
[ 1157.496305]        [<ffffffffbc741a29>] lock_acquire+0x99/0x1e0
[ 1157.502413]        [<ffffffffbce72793>] mutex_lock_nested+0x93/0x410
[ 1157.508890]        [<ffffffffc098322b>] rtw_ops_config+0x2b/0x90 [rtw88]
[ 1157.515724]        [<ffffffffc0b13343>] ieee80211_hw_config+0xc3/0x680 [mac80211]
[ 1157.523370]        [<ffffffffc0b8a4ca>] ieee80211_recalc_ps.part.27+0x9a/0x180 [mac80211]
[ 1157.531685]        [<ffffffffc0b8abc5>] ieee80211_mgd_probe_ap.part.28+0x115/0x160 [mac80211]
[ 1157.540353]        [<ffffffffc0b8b40d>] ieee80211_beacon_connection_loss_work+0x4d/0x80 [mac80211]
[ 1157.549513]        [<ffffffffbc6d77bc>] process_one_work+0x22c/0x720
[ 1157.555886]        [<ffffffffbc6d7dd6>] worker_thread+0x126/0x3b0
[ 1157.562170]        [<ffffffffbc6e107f>] kthread+0xef/0x100
[ 1157.567765]        [<ffffffffbce848b7>] ret_from_fork_nospec_end+0x0/0x39
[ 1157.574579]
other info that might help us debug this:

[ 1157.582788] Chain exists of:
  &rtwdev->mutex --> (&(&rtwdev->watch_dog_work)->work) --> &local->iflist_mtx

[ 1157.593024]  Possible unsafe locking scenario:

[ 1157.599046]        CPU0                    CPU1
[ 1157.603653]        ----                    ----
[ 1157.608258]   lock(&local->iflist_mtx);
[ 1157.612180]                                lock((&(&rtwdev->watch_dog_work)->work));
[ 1157.620074]                                lock(&local->iflist_mtx);
[ 1157.626555]   lock(&rtwdev->mutex);
[ 1157.630124]
 *** DEADLOCK ***

[ 1157.636148] 4 locks held by kworker/u4:2/14490:
[ 1157.640755]  #0:  (%s#6){.+.+.+}, at: [<ffffffffbc6d774a>] process_one_work+0x1ba/0x720
[ 1157.648965]  #1:  ((&ifmgd->beacon_connection_loss_work)){+.+.+.}, at: [<ffffffffbc6d774a>] process_one_work+0x1ba/0x720
[ 1157.659950]  #2:  (&wdev->mtx){+.+.+.}, at: [<ffffffffc0b8aad5>] ieee80211_mgd_probe_ap.part.28+0x25/0x160 [mac80211]
[ 1157.670901]  #3:  (&local->iflist_mtx){+.+...}, at: [<ffffffffc0b8ab7a>] ieee80211_mgd_probe_ap.part.28+0xca/0x160 [mac80211]
[ 1157.682466]

Fixes: e3037485c68e ("rtw88: new Realtek 802.11ac driver")
Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
---
 drivers/net/wireless/realtek/rtw88/main.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c
index 9893e5e297e3..f63c34a2e356 100644
--- a/drivers/net/wireless/realtek/rtw88/main.c
+++ b/drivers/net/wireless/realtek/rtw88/main.c
@@ -162,7 +162,8 @@ static void rtw_watch_dog_work(struct work_struct *work)
 	rtwdev->stats.tx_cnt = 0;
 	rtwdev->stats.rx_cnt = 0;
 
-	rtw_iterate_vifs(rtwdev, rtw_vif_watch_dog_iter, &data);
+	/* use atomic version to avoid taking local->iflist_mtx mutex */
+	rtw_iterate_vifs_atomic(rtwdev, rtw_vif_watch_dog_iter, &data);
 
 	/* fw supports only one station associated to enter lps, if there are
 	 * more than two stations associated to the AP, then we can not enter
-- 
1.9.3


^ permalink raw reply related

* Re: [RFC] rtw88: fix subscript above array bounds compiler warning
From: Stanislaw Gruszka @ 2019-05-03 12:24 UTC (permalink / raw)
  To: Tony Chuang; +Cc: linux-wireless@vger.kernel.org
In-Reply-To: <F7CD281DE3E379468C6D07993EA72F84D17E8846@RTITMBSVM04.realtek.com.tw>

On Fri, May 03, 2019 at 12:01:05PM +0000, Tony Chuang wrote:
> > Subject: [RFC] rtw88: fix subscript above array bounds compiler warning
> > 
> > My compiler complain about:
> > 
> > drivers/net/wireless/realtek/rtw88/phy.c: In function
> > ‘rtw_phy_rf_power_2_rssi’:
> > drivers/net/wireless/realtek/rtw88/phy.c:430:26: warning: array subscript is
> > above array bounds [-Warray-bounds]
> >   linear = db_invert_table[i][j];
> > 
> > According to comment power_db should be in range 1 ~ 96 .
> > Correct rtw_phy_power_2_db() to make max power 96 db
> > (still min is 0). This make the warning gone.
> > 
> > However power >= 20 check still looks somewhat suspicious to me.
> > 
> > Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
> > ---
> >  drivers/net/wireless/realtek/rtw88/phy.c | 6 +++---
> >  1 file changed, 3 insertions(+), 3 deletions(-)
> > 
> > diff --git a/drivers/net/wireless/realtek/rtw88/phy.c
> > b/drivers/net/wireless/realtek/rtw88/phy.c
> > index 35a35dbca85f..a716a44d78b0 100644
> > --- a/drivers/net/wireless/realtek/rtw88/phy.c
> > +++ b/drivers/net/wireless/realtek/rtw88/phy.c
> > @@ -410,12 +410,12 @@ void rtw_phy_dynamic_mechanism(struct rtw_dev
> > *rtwdev)
> > 
> >  static u8 rtw_phy_power_2_db(s8 power)
> >  {
> > -	if (power <= -100 || power >= 20)
> > +	if (power <= -96 || power >= 20)
> >  		return 0;
> >  	else if (power >= 0)
> > -		return 100;
> > +		return 96;
> >  	else
> > -		return 100 + power;
> > +		return 96 + power;
> >  }
> > 
> >  static u64 rtw_phy_db_2_linear(u8 power_db)
> > --
> 
> I think I should check with the radio team, that if the power from the
> rx descriptor generated by hardware can possibly get >= 20
> 
> And also check what the actual logic they expected to deal with the power.
> Thanks for reporting it.

Yeah, this could be just teoretical issue as we can not get power
values >= 0 from HW. However I think compiler correctly complains, as
for power_db=100 we get i = ((100 - 1) >> 3) = 12 , what exceed by one
max first index of db_invert_table[][], which should be in range
0 - 11.

Stanislaw


^ permalink raw reply

* pull-request: wireless-drivers-next 2019-05-03
From: Kalle Valo @ 2019-05-03 12:21 UTC (permalink / raw)
  To: David Miller; +Cc: linux-wireless, netdev, linux-kernel

Hi Dave,

here's a pull request to net-next for 5.2, more information below. Also
there's a conflict in iwlwifi again and this time I added the conflict
resolution to the signed tag based on our discussion earlier this week.
Please let me know what you think or there are any problems.

Kalle

The following changes since commit 5c2e6e14a0ad24a35d9d2b318204c8c012d9d618:

  Merge branch 'net-add-reset-controller-driven-PHY-reset' (2019-04-18 17:43:11 -0700)

are available in the git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next.git tags/wireless-drivers-next-for-davem-2019-05-03

for you to fetch changes up to f9b628d61faef9b6d411f13cf4be41470b7a7adb:

  rtw88: add license for Makefile (2019-05-03 15:06:12 +0300)

----------------------------------------------------------------
wireless-drivers-next patches for 5.2

Most likely the last patchset of new feature for 5.2, and this time we
have quite a lot of new features. Most obvious being rtw88 from
Realtek which supports RTL8822BE and RTL8822CE 802.11ac devices. We
have also new hardware support for existing drivers and improvements.

There's one conflict in iwlwifi, my example conflict resolution below.

Major changes:

iwlwifi

* bump the 20000-series FW API version

* work on new hardware continues

* RTT confidence indication support for Fine Timing Measurement (FTM)

* an improvement in HE (802.11ax) rate-scaling

* add command version parsing from the fimware TLVs

* add support for a new WoWLAN patterns firmware API

rsi

* add support for rs9116

mwifiex

* add support for SD8987

brcmfmac

* add quirk for ACEPC T8 and T11 mini PCs

rt2x00

* add RT3883 support

qtnfmac

* fix debugfs interface to support multiple cards

rtw88

* new driver

mt76

* share more code across drivers

* add support for MT7615 chipset

* rework DMA API

* tx/rx performance optimizations

* use NAPI for tx cleanup on mt76x02

* AP mode support for USB devices

* USB stability fixes

* tx power handling fixes for 76x2

* endian fixes

Conflicts:

There's a trivial conflict in
drivers/net/wireless/intel/iwlwifi/fw/file.h, just leave
IWL_UCODE_TLV_FW_FSEQ_VERSION to the file. 'git diff' output should be
just empty:

diff --cc drivers/net/wireless/intel/iwlwifi/fw/file.h
index cd622af90077,b0671e16e1ce..000000000000
--- a/drivers/net/wireless/intel/iwlwifi/fw/file.h
+++ b/drivers/net/wireless/intel/iwlwifi/fw/file.h

----------------------------------------------------------------
Aditya Pakki (1):
      rsi: Fix NULL pointer dereference in kmalloc

Ahmad Masri (4):
      wil6210: prevent device memory access while in reset or suspend
      wil6210: check mid is valid
      wil6210: fix report of rx packet checksum in edma mode
      wil6210: add support for ucode tracing

Alexei Avshalom Lazar (1):
      wil6210: align to latest auto generated wmi.h

Alexey Khoroshilov (1):
      mwl8k: fix error handling in mwl8k_post_cmd()

Andrei Otcheretianski (1):
      iwlwifi: mvm: Don't sleep in RX path

Avraham Stern (2):
      iwlwifi: mvm: support rtt confidence indication
      iwlwifi: mvm: report FTM start time TSF when applicable

Colin Ian King (3):
      iwlegacy: fix spelling mistake "acumulative" -> "accumulative"
      mwifiex: fix spelling mistake "capabilties" -> "capabilities"
      rtw88: fix shift of more than 32 bits of a integer

Dan Carpenter (2):
      mwifiex: prevent an array overflow
      brcm80211: potential NULL dereference in brcmf_cfg80211_vndr_cmds_dcmd_handler()

Dedy Lansky (2):
      wil6210: use OEM MAC address from OTP
      wil6210: free edma_rx_swtail upon reset

Felix Fietkau (11):
      mt76: fix tx power issues
      mt76: use readl/writel instead of ioread32/iowrite32
      mt76: use mac80211 txq scheduling
      mt76: reduce locking in mt76_dma_tx_cleanup
      mt76: store wcid tx rate info in one u32 reduce locking
      mt76: move tx tasklet to struct mt76_dev
      mt76: only schedule txqs from the tx tasklet
      mt76: mt76x02: use napi polling for tx cleanup
      mt76: mt76x02: remove irqsave/restore in locking for tx status fifo
      mt76: mt7603: fix initialization of max rx length
      mt76: mt7615: use sizeof instead of sizeof_field

Gabor Juhos (1):
      rt2x00: add RT3883 support

Gregory Greenman (1):
      iwlwifi: rs: consider LDPC capability in case of HE

Gustavo A. R. Silva (5):
      rndis_wlan: use struct_size() helper
      mwifiex: use struct_size() in kzalloc()
      zd1211rw: use struct_size() helper
      rtlwifi: rtl8723ae: Fix missing break in switch statement
      rtw88: phy: mark expected switch fall-throughs

Hans de Goede (1):
      brcmfmac: Add DMI nvram filename quirk for ACEPC T8 and T11 mini PCs

Igor Mitsyanko (1):
      qtnfmac: allow to control DFS slave radar detection

Jeff Xie (1):
      mwl8k: move spin_lock_bh to spin_lock in tasklet

Johannes Berg (3):
      iwlwifi: pcie: initialize debug_rfkill to -1
      iwlwifi: pcie: don't crash on invalid RX interrupt
      iwlwifi: parse command version TLV

Kalle Valo (5):
      Merge ath-next from git://git.kernel.org/.../kvalo/ath.git
      Merge tag 'iwlwifi-next-for-kalle-2019-04-18-2' of git://git.kernel.org/.../iwlwifi/iwlwifi-next
      Revert "brcmfmac: send mailbox interrupt twice for specific hardware device"
      Merge tag 'iwlwifi-next-for-kalle-2019-04-29' of git://git.kernel.org/.../iwlwifi/iwlwifi-next
      Merge tag 'mt76-for-kvalo-2019-05-01' of https://github.com/nbd168/wireless

Kangjie Lu (1):
      net: cw1200: fix a NULL pointer dereference

Larry Finger (1):
      b43: Remove empty function lpphy_papd_cal()

Liad Kaufman (1):
      iwlwifi: mvm: limit TLC according to our HE capabilities

Lior David (1):
      wil6210: fix return code of wmi_mgmt_tx and wmi_mgmt_tx_ext

Lorenzo Bianconi (35):
      mt76: mmio: move mt76x02_set_irq_mask in mt76 module
      mt76: dma: move mt76x02_init_{tx,rx}_queue in mt76 module
      mt76: remove mt76_queue dependency from tx_queue_skb function pointer
      mt76: remove mt76_queue dependency from tx_prepare_skb function pointer
      mt76: remove mt76_queue dependency from tx_complete_skb function pointer
      mt76: introduce mt76_sw_queue data structure
      mt76: introduce mt76_txq_id field in mt76_queue_entry
      mt76: move mt76x02_insert_hdr_pad in mt76-core module
      mt76: mmio: move mt76_insert_hdr_pad in mt76_dma_tx_queue_skb
      mt76: move skb dma mapping before running tx_prepare_skb
      mt76: introduce mt76_tx_info data structure
      mt76: dma: add static qualifier to mt76_dma_tx_queue_skb
      mt7603: remove mt7603_mcu_init routine
      mt7603: core: do not use magic numbers in mt7603_reg_map
      mt76: usb: reduce code indentation in mt76u_alloc_tx
      mt76: introduce mt76_free_device routine
      mt76: move mac_work in mt76_dev
      mt76: usb: reduce locking in mt76u_tx_tasklet
      mt76: set txwi_size according to the driver value
      mt76: add skb pointer to mt76_tx_info
      mt76: dma: introduce skb field in mt76_txwi_cache
      mt76: dma: add skb check for dummy pointer
      mt76: mt7603: remove query from mt7603_mcu_msg_send signature
      mt76: mt7603: use standard signature for mt7603_mcu_msg_send
      mt76: mt7603: initialize mt76_mcu_ops data structure
      mt76: introduce mt76_mcu_restart macro
      mt76: mt7603: init mcu_restart function pointer
      mt76: mt7603: run __mt76_mcu_send_msg in mt7603_mcu_send_firmware
      mt76: mt7603: report firmware version using ethtool
      mt76: move beacon_int in mt76_dev
      mt76: move beacon_mask in mt76_dev
      mt76: move pre_tbtt_tasklet in mt76_dev
      mt76: mt7603: enable/disable pre_tbtt_tasklet in mt7603_set_channel
      mt76: do not enable/disable pre_tbtt_tasklet in scan_start/scan_complete
      mt76: mt7603: dynamically alloc mcu req in mt7603_mcu_set_eeprom

Luca Coelho (5):
      iwlwifi: bump FW API to 47 for 22000 series
      iwlwifi: remove unused 0x40C0 PCI device IDs
      iwlwifi: mvm: support v2 of the WoWLAN patterns command
      iwlwifi: bump FW API to 48 for 22000 series
      iwlwifi: pcie: remove stray character in iwl_pcie_rx_alloc_page()

Maya Erez (6):
      wil6210: increase PCP stop command timeout
      wil6210: do not set BIT_USER_SUPPORT_T_POWER_ON_0 in Talyn-MB
      wil6210: update WIL_MCS_MAX to 15
      wil6210: prevent access to RGF_CAF_ICR in Talyn
      wil6210: reset buff id in status message after completion
      wil6210: print error in FW and board files load failures

Nathan Chancellor (2):
      iwlwifi: mvm: Change an 'else if' into an 'else' in iwl_mvm_send_add_bcast_sta
      rtw88: Make RA_MASK macros ULL

Pan Bian (1):
      p54: drop device reference count if fails to enable device

Paolo Bonzini (1):
      wlcore: simplify/fix/optimize reg_ch_conf_pending operations

Petr Štetiar (1):
      mwl8k: Fix rate_idx underflow

Rafał Miłecki (1):
      brcmfmac: print firmware messages after a firmware crash

Ryder Lee (6):
      mt76: add mac80211 driver for MT7615 PCIe-based chipsets
      mt76: add unlikely() for dma_mapping_error() check
      mt76: use macro for sn and seq_ctrl conversion
      MAINTAINERS: update entry for mt76 wireless driver
      mt76: fix endianness sparse warnings
      mt76: add TX/RX antenna pattern capabilities

Sergey Matyukevich (2):
      qtnfmac: handle channel switch events for connected stations only
      qtnfmac: modify debugfs to support multiple cards

Shahar S Matityahu (12):
      iwlwifi: dbg_ini: support notification and dhc regions type parsing
      iwlwifi: add FW_INFO debug level
      iwlwifi: dbg_ini: add debug prints to the ini flows
      iwlwifi: dbg: add periphery memory dumping support to ax210 device family
      iwlwifi: dbg: add lmac and umac PC registers to periphery dump
      iwlwifi: dbg_ini: set dump bit only when trigger collection is certain
      iwlwifi: support fseq tlv and print fseq version
      iwlwifi: dbg_ini: add lmac and umac error tables dumping support
      iwlwifi: dbg_ini: add periodic trigger support
      iwlwifi: dbg: replace dump info device family with HW type
      iwlwifi: avoid allocating memory for region with disabled domain
      iwlwifi: dbg_ini: check for valid region type during regions parsing

Shaul Triebitz (2):
      iwlwifi: mvm: set 512 TX queue slots for AX210 devices
      iwlwifi: unite macros with same meaning

Siva Rebbagondla (8):
      rsi: add new device model for 9116
      rsi: move common part of firmware load to separate function
      rsi: add firmware loading for 9116 device
      rsi: change in device init frame sequence for 9116
      rsi: new bootup parameters for 9116
      rsi: send new tx command frame wlan9116 features
      rsi: reset device changes for 9116
      rsi: miscallaneous changes for 9116 and common

Stanislaw Gruszka (39):
      rt2x00: use ratelimited variants dev_warn/dev_err
      rt2x00: check number of EPROTO errors
      rt2x00: do not print error when queue is full
      rt2800: partially restore old mmio txstatus behaviour
      rt2800: new flush implementation for SoC devices
      rt2800: move txstatus pending routine
      rt2800mmio: fetch tx status changes
      rt2800mmio: use timer and work for handling tx statuses timeouts
      rt2x00: remove last_nostatus_check
      rt2x00: remove not used entry field
      rt2x00mmio: remove legacy comment
      mt76x02: introduce mt76x02_beacon.c
      mt76x02: add hrtimer for pre TBTT for USB
      mt76x02: introduce beacon_ops
      mt76x02u: implement beacon_ops
      mt76x02: generalize some mmio beaconing functions
      mt76x02u: add sta_ps
      mt76x02: disable HW encryption for group frames
      mt76x02u: implement pre TBTT work for USB
      mt76x02: make beacon slots bigger for USB
      mt76x02u: add mt76_release_buffered_frames
      mt76: unify set_tim
      mt76x02: enable AP mode for USB
      mt76usb: change mt76u_submit_buf
      mt76: remove rx_page_lock
      mt76usb: change mt76u_fill_rx_sg arguments
      mt76usb: use usb_dev private data
      mt76usb: remove mt76u_buf redundant fileds
      mt76usb: move mt76u_buf->done to queue entry
      mt76usb: remove mt76u_buf and use urb directly
      mt76usb: remove MT_RXQ_MAIN queue from mt76u_urb_alloc
      mt76usb: resue mt76u_urb_alloc for tx
      mt76usb: remove unneded sg_init_table
      mt76usb: allocate urb and sg as linear data
      mt76usb: remove queue variable from rx_tasklet
      mt76: mt76x02u: remove bogus stop on suspend
      mt76usb: fix tx/rx stop
      mt76: mt76x02: remove bogus mutex usage
      mt76: usb: use EP max packet aligned buffer sizes for rx

Tamás Szűcs (1):
      mwifiex: add support for SD8987 chipset

Tomislav Požega (1):
      rt2x00: code-style fix in rt2800usb.c

Wright Feng (3):
      brcmfmac: send mailbox interrupt twice for specific hardware device
      brcmfmac: send mailbox interrupt twice for specific hardware device
      brcmfmac: set txflow request id from 1 to pktids array size

Yan-Hsuan Chuang (2):
      rtw88: new Realtek 802.11ac driver
      rtw88: add license for Makefile

YueHaibing (6):
      ray_cs: Check return value of pcmcia_register_driver
      ray_cs: use remove_proc_subtree to simplify procfs code
      ssb: Fix possible NULL pointer dereference in ssb_host_pcmcia_exit
      at76c50x-usb: Don't register led_trigger if usb_register_driver failed
      rtlwifi: rtl8192cu: remove set but not used variable 'turbo_scanoff'
      iwlwifi: Use correct channel_profile iniwl_get_nvm

kbuild test robot (1):
      mt76: mt76x02: mt76x02_poll_tx() can be static

 MAINTAINERS                                        |     8 +
 drivers/net/wireless/ath/wil6210/cfg80211.c        |    11 +-
 drivers/net/wireless/ath/wil6210/debugfs.c         |    38 +-
 drivers/net/wireless/ath/wil6210/fw_inc.c          |     6 +-
 drivers/net/wireless/ath/wil6210/main.c            |    78 +-
 drivers/net/wireless/ath/wil6210/netdev.c          |    10 +-
 drivers/net/wireless/ath/wil6210/pcie_bus.c        |     4 +-
 drivers/net/wireless/ath/wil6210/pm.c              |    35 +-
 drivers/net/wireless/ath/wil6210/txrx_edma.c       |    74 +-
 drivers/net/wireless/ath/wil6210/txrx_edma.h       |    47 +-
 drivers/net/wireless/ath/wil6210/wil6210.h         |    11 +-
 drivers/net/wireless/ath/wil6210/wil_crash_dump.c  |    18 +-
 drivers/net/wireless/ath/wil6210/wmi.c             |    24 +-
 drivers/net/wireless/ath/wil6210/wmi.h             |    91 +-
 drivers/net/wireless/atmel/at76c50x-usb.c          |     4 +-
 drivers/net/wireless/broadcom/b43/phy_lp.c         |    11 -
 .../net/wireless/broadcom/brcm80211/brcmfmac/dmi.c |    26 +
 .../wireless/broadcom/brcm80211/brcmfmac/msgbuf.c  |     6 +-
 .../wireless/broadcom/brcm80211/brcmfmac/pcie.c    |    31 +-
 .../wireless/broadcom/brcm80211/brcmfmac/vendor.c  |     5 +-
 drivers/net/wireless/intel/iwlegacy/3945-debug.c   |     8 +-
 drivers/net/wireless/intel/iwlwifi/cfg/22000.c     |    19 +-
 drivers/net/wireless/intel/iwlwifi/fw/api/d3.h     |   136 +-
 .../net/wireless/intel/iwlwifi/fw/api/dbg-tlv.h    |     4 +
 .../net/wireless/intel/iwlwifi/fw/api/location.h   |    77 +-
 drivers/net/wireless/intel/iwlwifi/fw/api/txq.h    |     3 +
 drivers/net/wireless/intel/iwlwifi/fw/dbg.c        |   187 +-
 drivers/net/wireless/intel/iwlwifi/fw/dbg.h        |     3 +
 drivers/net/wireless/intel/iwlwifi/fw/error-dump.h |     4 +-
 drivers/net/wireless/intel/iwlwifi/fw/file.h       |    33 +-
 drivers/net/wireless/intel/iwlwifi/fw/img.h        |     7 +-
 drivers/net/wireless/intel/iwlwifi/fw/init.c       |     2 +
 drivers/net/wireless/intel/iwlwifi/fw/runtime.h    |     1 +
 drivers/net/wireless/intel/iwlwifi/iwl-config.h    |     1 -
 drivers/net/wireless/intel/iwlwifi/iwl-csr.h       |     1 +
 drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c   |     2 +-
 drivers/net/wireless/intel/iwlwifi/iwl-debug.h     |     2 +
 drivers/net/wireless/intel/iwlwifi/iwl-drv.c       |    26 +-
 drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c |     2 +-
 drivers/net/wireless/intel/iwlwifi/mvm/d3.c        |    58 +-
 .../net/wireless/intel/iwlwifi/mvm/ftm-initiator.c |    33 +-
 drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c  |     2 +-
 drivers/net/wireless/intel/iwlwifi/mvm/ops.c       |     1 +
 drivers/net/wireless/intel/iwlwifi/mvm/rs-fw.c     |    50 +-
 drivers/net/wireless/intel/iwlwifi/mvm/sta.c       |    11 +-
 .../net/wireless/intel/iwlwifi/mvm/time-event.c    |     2 +-
 .../wireless/intel/iwlwifi/pcie/ctxt-info-gen3.c   |     3 +-
 .../net/wireless/intel/iwlwifi/pcie/ctxt-info.c    |     6 +-
 drivers/net/wireless/intel/iwlwifi/pcie/drv.c      |     5 -
 drivers/net/wireless/intel/iwlwifi/pcie/internal.h |     8 +-
 drivers/net/wireless/intel/iwlwifi/pcie/rx.c       |     9 +-
 .../net/wireless/intel/iwlwifi/pcie/trans-gen2.c   |     7 +-
 drivers/net/wireless/intel/iwlwifi/pcie/trans.c    |    13 +-
 drivers/net/wireless/intel/iwlwifi/pcie/tx.c       |     8 +-
 drivers/net/wireless/intersil/p54/p54pci.c         |     3 +-
 drivers/net/wireless/marvell/mwifiex/Kconfig       |     4 +-
 drivers/net/wireless/marvell/mwifiex/cfp.c         |     3 +
 drivers/net/wireless/marvell/mwifiex/sdio.c        |     5 +
 drivers/net/wireless/marvell/mwifiex/sdio.h        |    69 +
 drivers/net/wireless/marvell/mwifiex/sta_cmdresp.c |     7 +-
 drivers/net/wireless/marvell/mwifiex/sta_event.c   |    12 +-
 drivers/net/wireless/marvell/mwifiex/uap_event.c   |     8 +-
 drivers/net/wireless/marvell/mwl8k.c               |    24 +-
 drivers/net/wireless/mediatek/mt76/Kconfig         |     1 +
 drivers/net/wireless/mediatek/mt76/Makefile        |     3 +-
 drivers/net/wireless/mediatek/mt76/agg-rx.c        |     2 +-
 drivers/net/wireless/mediatek/mt76/debugfs.c       |     7 +-
 drivers/net/wireless/mediatek/mt76/dma.c           |   164 +-
 drivers/net/wireless/mediatek/mt76/dma.h           |     2 +
 drivers/net/wireless/mediatek/mt76/mac80211.c      |    41 +-
 drivers/net/wireless/mediatek/mt76/mmio.c          |    17 +-
 drivers/net/wireless/mediatek/mt76/mt76.h          |   119 +-
 drivers/net/wireless/mediatek/mt76/mt7603/beacon.c |    35 +-
 drivers/net/wireless/mediatek/mt76/mt7603/core.c   |    19 +-
 drivers/net/wireless/mediatek/mt76/mt7603/dma.c    |    39 +-
 drivers/net/wireless/mediatek/mt76/mt7603/init.c   |    12 +-
 drivers/net/wireless/mediatek/mt76/mt7603/mac.c    |    54 +-
 drivers/net/wireless/mediatek/mt76/mt7603/main.c   |    34 +-
 drivers/net/wireless/mediatek/mt76/mt7603/mcu.c    |   116 +-
 drivers/net/wireless/mediatek/mt76/mt7603/mt7603.h |    23 +-
 drivers/net/wireless/mediatek/mt76/mt7603/regs.h   |     4 +
 drivers/net/wireless/mediatek/mt76/mt7615/Kconfig  |     7 +
 drivers/net/wireless/mediatek/mt76/mt7615/Makefile |     5 +
 drivers/net/wireless/mediatek/mt76/mt7615/dma.c    |   205 +
 drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c |    98 +
 drivers/net/wireless/mediatek/mt76/mt7615/eeprom.h |    18 +
 drivers/net/wireless/mediatek/mt76/mt7615/init.c   |   229 +
 drivers/net/wireless/mediatek/mt76/mt7615/mac.c    |   775 +
 drivers/net/wireless/mediatek/mt76/mt7615/mac.h    |   300 +
 drivers/net/wireless/mediatek/mt76/mt7615/main.c   |   499 +
 drivers/net/wireless/mediatek/mt76/mt7615/mcu.c    |  1655 ++
 drivers/net/wireless/mediatek/mt76/mt7615/mcu.h    |   520 +
 drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h |   195 +
 drivers/net/wireless/mediatek/mt76/mt7615/pci.c    |   150 +
 drivers/net/wireless/mediatek/mt76/mt7615/regs.h   |   203 +
 drivers/net/wireless/mediatek/mt76/mt76x0/init.c   |     2 +-
 drivers/net/wireless/mediatek/mt76/mt76x0/main.c   |     8 +-
 drivers/net/wireless/mediatek/mt76/mt76x0/pci.c    |    26 +-
 drivers/net/wireless/mediatek/mt76/mt76x0/usb.c    |    49 +-
 drivers/net/wireless/mediatek/mt76/mt76x02.h       |    44 +-
 .../net/wireless/mediatek/mt76/mt76x02_beacon.c    |   286 +
 drivers/net/wireless/mediatek/mt76/mt76x02_mac.c   |   185 +-
 drivers/net/wireless/mediatek/mt76/mt76x02_mac.h   |     4 +-
 drivers/net/wireless/mediatek/mt76/mt76x02_mmio.c  |   266 +-
 drivers/net/wireless/mediatek/mt76/mt76x02_regs.h  |     5 +-
 drivers/net/wireless/mediatek/mt76/mt76x02_txrx.c  |    29 +-
 drivers/net/wireless/mediatek/mt76/mt76x02_usb.h   |    12 +-
 .../net/wireless/mediatek/mt76/mt76x02_usb_core.c  |   188 +-
 drivers/net/wireless/mediatek/mt76/mt76x02_util.c  |   107 +-
 drivers/net/wireless/mediatek/mt76/mt76x2/init.c   |    12 +-
 drivers/net/wireless/mediatek/mt76/mt76x2/pci.c    |     3 +-
 .../net/wireless/mediatek/mt76/mt76x2/pci_init.c   |     6 +-
 .../net/wireless/mediatek/mt76/mt76x2/pci_main.c   |    27 +-
 drivers/net/wireless/mediatek/mt76/mt76x2/phy.c    |     6 +-
 drivers/net/wireless/mediatek/mt76/mt76x2/usb.c    |    14 +-
 .../net/wireless/mediatek/mt76/mt76x2/usb_init.c   |     5 +-
 .../net/wireless/mediatek/mt76/mt76x2/usb_main.c   |    19 +-
 drivers/net/wireless/mediatek/mt76/tx.c            |   148 +-
 drivers/net/wireless/mediatek/mt76/usb.c           |   379 +-
 drivers/net/wireless/quantenna/qtnfmac/cfg80211.c  |     2 +-
 drivers/net/wireless/quantenna/qtnfmac/commands.c  |     4 +-
 drivers/net/wireless/quantenna/qtnfmac/commands.h  |     3 +-
 drivers/net/wireless/quantenna/qtnfmac/core.c      |    35 +
 drivers/net/wireless/quantenna/qtnfmac/core.h      |     2 +
 drivers/net/wireless/quantenna/qtnfmac/debug.c     |     4 +-
 drivers/net/wireless/quantenna/qtnfmac/event.c     |    16 +-
 drivers/net/wireless/quantenna/qtnfmac/qlink.h     |     4 +-
 drivers/net/wireless/ralink/rt2x00/rt2800.h        |    19 +-
 drivers/net/wireless/ralink/rt2x00/rt2800lib.c     |   628 +-
 drivers/net/wireless/ralink/rt2x00/rt2800lib.h     |     3 +-
 drivers/net/wireless/ralink/rt2x00/rt2800mmio.c    |   124 +-
 drivers/net/wireless/ralink/rt2x00/rt2800mmio.h    |     1 +
 drivers/net/wireless/ralink/rt2x00/rt2800pci.c     |     2 +-
 drivers/net/wireless/ralink/rt2x00/rt2800soc.c     |    13 +-
 drivers/net/wireless/ralink/rt2x00/rt2800usb.c     |    28 +-
 drivers/net/wireless/ralink/rt2x00/rt2x00.h        |     7 +-
 drivers/net/wireless/ralink/rt2x00/rt2x00dev.c     |     4 +
 drivers/net/wireless/ralink/rt2x00/rt2x00mmio.h    |     2 -
 drivers/net/wireless/ralink/rt2x00/rt2x00queue.c   |     3 +-
 drivers/net/wireless/ralink/rt2x00/rt2x00queue.h   |     3 -
 drivers/net/wireless/ralink/rt2x00/rt2x00usb.c     |    22 +-
 drivers/net/wireless/ray_cs.c                      |     8 +-
 drivers/net/wireless/realtek/Kconfig               |     1 +
 drivers/net/wireless/realtek/Makefile              |     1 +
 .../net/wireless/realtek/rtlwifi/rtl8192cu/rf.c    |     3 -
 .../net/wireless/realtek/rtlwifi/rtl8723ae/hw.c    |     1 +
 drivers/net/wireless/realtek/rtw88/Kconfig         |    54 +
 drivers/net/wireless/realtek/rtw88/Makefile        |    22 +
 drivers/net/wireless/realtek/rtw88/debug.c         |   637 +
 drivers/net/wireless/realtek/rtw88/debug.h         |    52 +
 drivers/net/wireless/realtek/rtw88/efuse.c         |   160 +
 drivers/net/wireless/realtek/rtw88/efuse.h         |    26 +
 drivers/net/wireless/realtek/rtw88/fw.c            |   633 +
 drivers/net/wireless/realtek/rtw88/fw.h            |   222 +
 drivers/net/wireless/realtek/rtw88/hci.h           |   211 +
 drivers/net/wireless/realtek/rtw88/mac.c           |   965 +
 drivers/net/wireless/realtek/rtw88/mac.h           |    35 +
 drivers/net/wireless/realtek/rtw88/mac80211.c      |   481 +
 drivers/net/wireless/realtek/rtw88/main.c          |  1211 ++
 drivers/net/wireless/realtek/rtw88/main.h          |  1104 +
 drivers/net/wireless/realtek/rtw88/pci.c           |  1211 ++
 drivers/net/wireless/realtek/rtw88/pci.h           |   237 +
 drivers/net/wireless/realtek/rtw88/phy.c           |  1727 ++
 drivers/net/wireless/realtek/rtw88/phy.h           |   134 +
 drivers/net/wireless/realtek/rtw88/ps.c            |   166 +
 drivers/net/wireless/realtek/rtw88/ps.h            |    20 +
 drivers/net/wireless/realtek/rtw88/reg.h           |   421 +
 drivers/net/wireless/realtek/rtw88/regd.c          |   391 +
 drivers/net/wireless/realtek/rtw88/regd.h          |    67 +
 drivers/net/wireless/realtek/rtw88/rtw8822b.c      |  1594 ++
 drivers/net/wireless/realtek/rtw88/rtw8822b.h      |   170 +
 .../net/wireless/realtek/rtw88/rtw8822b_table.c    | 20783 +++++++++++++++++++
 .../net/wireless/realtek/rtw88/rtw8822b_table.h    |    18 +
 drivers/net/wireless/realtek/rtw88/rtw8822c.c      |  1890 ++
 drivers/net/wireless/realtek/rtw88/rtw8822c.h      |   186 +
 .../net/wireless/realtek/rtw88/rtw8822c_table.c    | 11753 +++++++++++
 .../net/wireless/realtek/rtw88/rtw8822c_table.h    |    17 +
 drivers/net/wireless/realtek/rtw88/rx.c            |   151 +
 drivers/net/wireless/realtek/rtw88/rx.h            |    41 +
 drivers/net/wireless/realtek/rtw88/sec.c           |   120 +
 drivers/net/wireless/realtek/rtw88/sec.h           |    39 +
 drivers/net/wireless/realtek/rtw88/tx.c            |   367 +
 drivers/net/wireless/realtek/rtw88/tx.h            |    89 +
 drivers/net/wireless/realtek/rtw88/util.c          |    72 +
 drivers/net/wireless/realtek/rtw88/util.h          |    34 +
 drivers/net/wireless/rndis_wlan.c                  |    12 +-
 drivers/net/wireless/rsi/rsi_91x_hal.c             |   199 +-
 drivers/net/wireless/rsi/rsi_91x_mac80211.c        |    30 +-
 drivers/net/wireless/rsi/rsi_91x_mgmt.c            |   232 +-
 drivers/net/wireless/rsi/rsi_91x_sdio.c            |   129 +-
 drivers/net/wireless/rsi/rsi_91x_usb.c             |    96 +-
 drivers/net/wireless/rsi/rsi_boot_params.h         |    63 +
 drivers/net/wireless/rsi/rsi_hal.h                 |    44 +-
 drivers/net/wireless/rsi/rsi_main.h                |    21 +-
 drivers/net/wireless/rsi/rsi_mgmt.h                |    26 +
 drivers/net/wireless/rsi/rsi_sdio.h                |     5 +-
 drivers/net/wireless/rsi/rsi_usb.h                 |     3 +-
 drivers/net/wireless/st/cw1200/main.c              |     5 +
 drivers/net/wireless/ti/wlcore/cmd.c               |    15 +-
 drivers/net/wireless/ti/wlcore/wlcore.h            |     4 +-
 drivers/net/wireless/zydas/zd1211rw/zd_usb.c       |     3 +-
 drivers/ssb/bridge_pcmcia_80211.c                  |     9 +-
 202 files changed, 56497 insertions(+), 1641 deletions(-)
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/Kconfig
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/Makefile
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/dma.c
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/eeprom.c
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/eeprom.h
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/init.c
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/mac.c
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/mac.h
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/main.c
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/mcu.c
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/mcu.h
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/pci.c
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt7615/regs.h
 create mode 100644 drivers/net/wireless/mediatek/mt76/mt76x02_beacon.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/Kconfig
 create mode 100644 drivers/net/wireless/realtek/rtw88/Makefile
 create mode 100644 drivers/net/wireless/realtek/rtw88/debug.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/debug.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/efuse.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/efuse.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/fw.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/fw.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/hci.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/mac.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/mac.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/mac80211.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/main.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/main.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/pci.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/pci.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/phy.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/phy.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/ps.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/ps.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/reg.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/regd.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/regd.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8822b.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8822b.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8822b_table.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8822b_table.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8822c.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8822c.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8822c_table.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8822c_table.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/rx.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/rx.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/sec.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/sec.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/tx.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/tx.h
 create mode 100644 drivers/net/wireless/realtek/rtw88/util.c
 create mode 100644 drivers/net/wireless/realtek/rtw88/util.h

^ permalink raw reply

* Re: [PATCH v2 1/5] rtw88: add license for Makefile
From: Kalle Valo @ 2019-05-03 12:11 UTC (permalink / raw)
  To: yhchuang; +Cc: linux-wireless
In-Reply-To: <1556884415-23474-2-git-send-email-yhchuang@realtek.com>

<yhchuang@realtek.com> wrote:

> From: Yan-Hsuan Chuang <yhchuang@realtek.com>
> 
> Add missing license for Makefile
> 
> Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>

Patch applied to wireless-drivers-next.git, thanks.

f9b628d61fae rtw88: add license for Makefile

-- 
https://patchwork.kernel.org/patch/10928421/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches


^ permalink raw reply

* Re: [PATCH v2 0/5] rtw88: minor fixes from suggestions during review
From: Kalle Valo @ 2019-05-03 12:04 UTC (permalink / raw)
  To: yhchuang; +Cc: linux-wireless
In-Reply-To: <1556884415-23474-1-git-send-email-yhchuang@realtek.com>

<yhchuang@realtek.com> writes:

> From: Yan-Hsuan Chuang <yhchuang@realtek.com>
>
> The series fix some small problems for rtw88, most of the suggestions
> are from the review process.
>
>
> v1 -> v2
>
>  - modify description for LPS, ", turn off" -> ", to turn off"
>  - drop patch "rtw88: mac: remove dangerous while (1)",
>    should re-write the power sequence parsing code to make sense of avoiding
>    infinite loop
>  - unify Makefile license to Dual GPL/BSD
>
>
> Yan-Hsuan Chuang (5):
>   rtw88: add license for Makefile
>   rtw88: pci: use ieee80211_ac_numbers instead of 0-3
>   rtw88: pci: check if queue mapping exceeds size of ac_to_hwq
>   rtw88: fix unassigned rssi_level in rtw_sta_info
>   rtw88: more descriptions about LPS

I was just in the next few minutes about to tag the last -next pull for
5.2. I'll apply patch 1 now so that we have consistent licenses for 5.2
but the rest have to wait for 5.3.

-- 
Kalle Valo

^ permalink raw reply

* RE: [RFC] rtw88: fix subscript above array bounds compiler warning
From: Tony Chuang @ 2019-05-03 12:01 UTC (permalink / raw)
  To: Stanislaw Gruszka; +Cc: linux-wireless@vger.kernel.org
In-Reply-To: <20190503115333.GA23109@redhat.com>

> Subject: [RFC] rtw88: fix subscript above array bounds compiler warning
> 
> My compiler complain about:
> 
> drivers/net/wireless/realtek/rtw88/phy.c: In function
> ‘rtw_phy_rf_power_2_rssi’:
> drivers/net/wireless/realtek/rtw88/phy.c:430:26: warning: array subscript is
> above array bounds [-Warray-bounds]
>   linear = db_invert_table[i][j];
> 
> According to comment power_db should be in range 1 ~ 96 .
> Correct rtw_phy_power_2_db() to make max power 96 db
> (still min is 0). This make the warning gone.
> 
> However power >= 20 check still looks somewhat suspicious to me.
> 
> Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
> ---
>  drivers/net/wireless/realtek/rtw88/phy.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/wireless/realtek/rtw88/phy.c
> b/drivers/net/wireless/realtek/rtw88/phy.c
> index 35a35dbca85f..a716a44d78b0 100644
> --- a/drivers/net/wireless/realtek/rtw88/phy.c
> +++ b/drivers/net/wireless/realtek/rtw88/phy.c
> @@ -410,12 +410,12 @@ void rtw_phy_dynamic_mechanism(struct rtw_dev
> *rtwdev)
> 
>  static u8 rtw_phy_power_2_db(s8 power)
>  {
> -	if (power <= -100 || power >= 20)
> +	if (power <= -96 || power >= 20)
>  		return 0;
>  	else if (power >= 0)
> -		return 100;
> +		return 96;
>  	else
> -		return 100 + power;
> +		return 96 + power;
>  }
> 
>  static u64 rtw_phy_db_2_linear(u8 power_db)
> --

I think I should check with the radio team, that if the power from the
rx descriptor generated by hardware can possibly get >= 20

And also check what the actual logic they expected to deal with the power.
Thanks for reporting it.

Yan-Hsuan


^ permalink raw reply

* [PATCH v2 2/5] rtw88: pci: use ieee80211_ac_numbers instead of 0-3
From: yhchuang @ 2019-05-03 11:53 UTC (permalink / raw)
  To: kvalo; +Cc: linux-wireless
In-Reply-To: <1556884415-23474-1-git-send-email-yhchuang@realtek.com>

From: Yan-Hsuan Chuang <yhchuang@realtek.com>

AC numbers are defined as enum in mac80211, use them instead of bare
0-3 indexing.

Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
---
 drivers/net/wireless/realtek/rtw88/pci.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c
index cfe05ba..87bfcb3 100644
--- a/drivers/net/wireless/realtek/rtw88/pci.c
+++ b/drivers/net/wireless/realtek/rtw88/pci.c
@@ -487,10 +487,10 @@ static void rtw_pci_stop(struct rtw_dev *rtwdev)
 }
 
 static u8 ac_to_hwq[] = {
-	[0] = RTW_TX_QUEUE_VO,
-	[1] = RTW_TX_QUEUE_VI,
-	[2] = RTW_TX_QUEUE_BE,
-	[3] = RTW_TX_QUEUE_BK,
+	[IEEE80211_AC_VO] = RTW_TX_QUEUE_VO,
+	[IEEE80211_AC_VI] = RTW_TX_QUEUE_VI,
+	[IEEE80211_AC_BE] = RTW_TX_QUEUE_BE,
+	[IEEE80211_AC_BK] = RTW_TX_QUEUE_BK,
 };
 
 static u8 rtw_hw_queue_mapping(struct sk_buff *skb)
-- 
2.7.4


^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox