public inbox for linux-wireless@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH rtw-next v2 0/4] wifi: rtw89: fw: update role_maintain H2C command
@ 2025-02-27 13:12 Ping-Ke Shih
  2025-02-27 13:12 ` [PATCH rtw-next v2 1/4] wifi: rtw89: fw: use struct to fill " Ping-Ke Shih
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Ping-Ke Shih @ 2025-02-27 13:12 UTC (permalink / raw)
  To: linux-wireless; +Cc: phhuang

The role_maintain H2C command is to tell firmware the role of a mac_id,
and two additional fields are added by this patchset to support coming
MLO.

The patch 3/4 is to correct message format by the way.

The patch 4/4 is to prevent breaking users that use obsolete firmware.

v2:
 - add patch 4/4 that is structural dependency

Ping-Ke Shih (2):
  wifi: rtw89: fw: correct debug message format in
    rtw89_build_txpwr_trk_tbl_from_elm()
  wifi: rtw89: fw: don't reject firmware in blacklist to prevent
    breaking users

Po-Hao Huang (2):
  wifi: rtw89: fw: use struct to fill role_maintain H2C command
  wifi: rtw89: fw: update role_maintain H2C command for roles operating
    on band 1

 drivers/net/wireless/realtek/rtw89/fw.c | 42 +++++++++++++++----------
 drivers/net/wireless/realtek/rtw89/fw.h | 28 ++++++-----------
 2 files changed, 36 insertions(+), 34 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH rtw-next v2 1/4] wifi: rtw89: fw: use struct to fill role_maintain H2C command
  2025-02-27 13:12 [PATCH rtw-next v2 0/4] wifi: rtw89: fw: update role_maintain H2C command Ping-Ke Shih
@ 2025-02-27 13:12 ` Ping-Ke Shih
  2025-03-05 11:51   ` Ping-Ke Shih
  2025-02-27 13:12 ` [PATCH rtw-next v2 2/4] wifi: rtw89: fw: update role_maintain H2C command for roles operating on band 1 Ping-Ke Shih
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 6+ messages in thread
From: Ping-Ke Shih @ 2025-02-27 13:12 UTC (permalink / raw)
  To: linux-wireless; +Cc: phhuang

From: Po-Hao Huang <phhuang@realtek.com>

The role_maintain H2C command is to align operating mode of WiFi role,
such as STA or AP modes, between driver and firmware.

Use a struct to fill fields of this H2C command.

Don't change logic at all.

Signed-off-by: Po-Hao Huang <phhuang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
---
v2: no change
---
 drivers/net/wireless/realtek/rtw89/fw.c | 22 +++++++++++--------
 drivers/net/wireless/realtek/rtw89/fw.h | 28 +++++++++----------------
 2 files changed, 23 insertions(+), 27 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtw89/fw.c b/drivers/net/wireless/realtek/rtw89/fw.c
index b843d259fbfa..3e4a3200358a 100644
--- a/drivers/net/wireless/realtek/rtw89/fw.c
+++ b/drivers/net/wireless/realtek/rtw89/fw.c
@@ -3901,14 +3901,15 @@ int rtw89_fw_h2c_update_beacon_be(struct rtw89_dev *rtwdev,
 }
 EXPORT_SYMBOL(rtw89_fw_h2c_update_beacon_be);
 
-#define H2C_ROLE_MAINTAIN_LEN 4
 int rtw89_fw_h2c_role_maintain(struct rtw89_dev *rtwdev,
 			       struct rtw89_vif_link *rtwvif_link,
 			       struct rtw89_sta_link *rtwsta_link,
 			       enum rtw89_upd_mode upd_mode)
 {
-	struct sk_buff *skb;
 	u8 mac_id = rtwsta_link ? rtwsta_link->mac_id : rtwvif_link->mac_id;
+	struct rtw89_h2c_role_maintain *h2c;
+	u32 len = sizeof(*h2c);
+	struct sk_buff *skb;
 	u8 self_role;
 	int ret;
 
@@ -3921,21 +3922,24 @@ int rtw89_fw_h2c_role_maintain(struct rtw89_dev *rtwdev,
 		self_role = rtwvif_link->self_role;
 	}
 
-	skb = rtw89_fw_h2c_alloc_skb_with_hdr(rtwdev, H2C_ROLE_MAINTAIN_LEN);
+	skb = rtw89_fw_h2c_alloc_skb_with_hdr(rtwdev, len);
 	if (!skb) {
 		rtw89_err(rtwdev, "failed to alloc skb for h2c join\n");
 		return -ENOMEM;
 	}
-	skb_put(skb, H2C_ROLE_MAINTAIN_LEN);
-	SET_FWROLE_MAINTAIN_MACID(skb->data, mac_id);
-	SET_FWROLE_MAINTAIN_SELF_ROLE(skb->data, self_role);
-	SET_FWROLE_MAINTAIN_UPD_MODE(skb->data, upd_mode);
-	SET_FWROLE_MAINTAIN_WIFI_ROLE(skb->data, rtwvif_link->wifi_role);
+	skb_put(skb, len);
+	h2c = (struct rtw89_h2c_role_maintain *)skb->data;
+
+	h2c->w0 = le32_encode_bits(mac_id, RTW89_H2C_ROLE_MAINTAIN_W0_MACID) |
+		  le32_encode_bits(self_role, RTW89_H2C_ROLE_MAINTAIN_W0_SELF_ROLE) |
+		  le32_encode_bits(upd_mode, RTW89_H2C_ROLE_MAINTAIN_W0_UPD_MODE) |
+		  le32_encode_bits(rtwvif_link->wifi_role,
+				   RTW89_H2C_ROLE_MAINTAIN_W0_WIFI_ROLE);
 
 	rtw89_h2c_pkt_set_hdr(rtwdev, skb, FWCMD_TYPE_H2C,
 			      H2C_CAT_MAC, H2C_CL_MAC_MEDIA_RPT,
 			      H2C_FUNC_MAC_FWROLE_MAINTAIN, 0, 1,
-			      H2C_ROLE_MAINTAIN_LEN);
+			      len);
 
 	ret = rtw89_h2c_tx(rtwdev, skb, false);
 	if (ret) {
diff --git a/drivers/net/wireless/realtek/rtw89/fw.h b/drivers/net/wireless/realtek/rtw89/fw.h
index 1c53c1e22439..e0faed076150 100644
--- a/drivers/net/wireless/realtek/rtw89/fw.h
+++ b/drivers/net/wireless/realtek/rtw89/fw.h
@@ -1591,25 +1591,17 @@ struct rtw89_h2c_bcn_upd_be {
 #define RTW89_H2C_BCN_UPD_BE_W7_ECSA_OFST GENMASK(30, 16)
 #define RTW89_H2C_BCN_UPD_BE_W7_PROTECTION_KEY_ID BIT(31)
 
-static inline void SET_FWROLE_MAINTAIN_MACID(void *h2c, u32 val)
-{
-	le32p_replace_bits((__le32 *)h2c, val, GENMASK(7, 0));
-}
-
-static inline void SET_FWROLE_MAINTAIN_SELF_ROLE(void *h2c, u32 val)
-{
-	le32p_replace_bits((__le32 *)h2c, val, GENMASK(9, 8));
-}
-
-static inline void SET_FWROLE_MAINTAIN_UPD_MODE(void *h2c, u32 val)
-{
-	le32p_replace_bits((__le32 *)h2c, val, GENMASK(12, 10));
-}
+struct rtw89_h2c_role_maintain {
+	__le32 w0;
+};
 
-static inline void SET_FWROLE_MAINTAIN_WIFI_ROLE(void *h2c, u32 val)
-{
-	le32p_replace_bits((__le32 *)h2c, val, GENMASK(16, 13));
-}
+#define RTW89_H2C_ROLE_MAINTAIN_W0_MACID GENMASK(7, 0)
+#define RTW89_H2C_ROLE_MAINTAIN_W0_SELF_ROLE GENMASK(9, 8)
+#define RTW89_H2C_ROLE_MAINTAIN_W0_UPD_MODE GENMASK(12, 10)
+#define RTW89_H2C_ROLE_MAINTAIN_W0_WIFI_ROLE GENMASK(16, 13)
+#define RTW89_H2C_ROLE_MAINTAIN_W0_BAND GENMASK(18, 17)
+#define RTW89_H2C_ROLE_MAINTAIN_W0_PORT GENMASK(21, 19)
+#define RTW89_H2C_ROLE_MAINTAIN_W0_MACID_EXT GENMASK(31, 24)
 
 enum rtw89_fw_sta_type { /* value of RTW89_H2C_JOININFO_W1_STA_TYPE */
 	RTW89_FW_N_AC_STA = 0,
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH rtw-next v2 2/4] wifi: rtw89: fw: update role_maintain H2C command for roles operating on band 1
  2025-02-27 13:12 [PATCH rtw-next v2 0/4] wifi: rtw89: fw: update role_maintain H2C command Ping-Ke Shih
  2025-02-27 13:12 ` [PATCH rtw-next v2 1/4] wifi: rtw89: fw: use struct to fill " Ping-Ke Shih
@ 2025-02-27 13:12 ` Ping-Ke Shih
  2025-02-27 13:12 ` [PATCH rtw-next v2 3/4] wifi: rtw89: fw: correct debug message format in rtw89_build_txpwr_trk_tbl_from_elm() Ping-Ke Shih
  2025-02-27 13:12 ` [PATCH rtw-next v2 4/4] wifi: rtw89: fw: don't reject firmware in blacklist to prevent breaking users Ping-Ke Shih
  3 siblings, 0 replies; 6+ messages in thread
From: Ping-Ke Shih @ 2025-02-27 13:12 UTC (permalink / raw)
  To: linux-wireless; +Cc: phhuang

From: Po-Hao Huang <phhuang@realtek.com>

Add new fields band and port ID to make chips operating on the band and
port ID other than 0, so that multiple vif(s) can be working at the
same time.

Signed-off-by: Po-Hao Huang <phhuang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
---
v2: no change
---
 drivers/net/wireless/realtek/rtw89/fw.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/realtek/rtw89/fw.c b/drivers/net/wireless/realtek/rtw89/fw.c
index 3e4a3200358a..1965a62746c2 100644
--- a/drivers/net/wireless/realtek/rtw89/fw.c
+++ b/drivers/net/wireless/realtek/rtw89/fw.c
@@ -3934,7 +3934,10 @@ int rtw89_fw_h2c_role_maintain(struct rtw89_dev *rtwdev,
 		  le32_encode_bits(self_role, RTW89_H2C_ROLE_MAINTAIN_W0_SELF_ROLE) |
 		  le32_encode_bits(upd_mode, RTW89_H2C_ROLE_MAINTAIN_W0_UPD_MODE) |
 		  le32_encode_bits(rtwvif_link->wifi_role,
-				   RTW89_H2C_ROLE_MAINTAIN_W0_WIFI_ROLE);
+				   RTW89_H2C_ROLE_MAINTAIN_W0_WIFI_ROLE) |
+		  le32_encode_bits(rtwvif_link->mac_idx,
+				   RTW89_H2C_ROLE_MAINTAIN_W0_BAND) |
+		  le32_encode_bits(rtwvif_link->port, RTW89_H2C_ROLE_MAINTAIN_W0_PORT);
 
 	rtw89_h2c_pkt_set_hdr(rtwdev, skb, FWCMD_TYPE_H2C,
 			      H2C_CAT_MAC, H2C_CL_MAC_MEDIA_RPT,
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH rtw-next v2 3/4] wifi: rtw89: fw: correct debug message format in rtw89_build_txpwr_trk_tbl_from_elm()
  2025-02-27 13:12 [PATCH rtw-next v2 0/4] wifi: rtw89: fw: update role_maintain H2C command Ping-Ke Shih
  2025-02-27 13:12 ` [PATCH rtw-next v2 1/4] wifi: rtw89: fw: use struct to fill " Ping-Ke Shih
  2025-02-27 13:12 ` [PATCH rtw-next v2 2/4] wifi: rtw89: fw: update role_maintain H2C command for roles operating on band 1 Ping-Ke Shih
@ 2025-02-27 13:12 ` Ping-Ke Shih
  2025-02-27 13:12 ` [PATCH rtw-next v2 4/4] wifi: rtw89: fw: don't reject firmware in blacklist to prevent breaking users Ping-Ke Shih
  3 siblings, 0 replies; 6+ messages in thread
From: Ping-Ke Shih @ 2025-02-27 13:12 UTC (permalink / raw)
  To: linux-wireless; +Cc: phhuang

The format should be "%08x". Fix the mistakes.

Fixes: d60e73e5dd70 ("wifi: rtw89: fw: load TX power track tables from fw_element")
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
---
v2: no change
---
 drivers/net/wireless/realtek/rtw89/fw.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/realtek/rtw89/fw.c b/drivers/net/wireless/realtek/rtw89/fw.c
index 1965a62746c2..15d6bda1fcf0 100644
--- a/drivers/net/wireless/realtek/rtw89/fw.c
+++ b/drivers/net/wireless/realtek/rtw89/fw.c
@@ -1099,7 +1099,7 @@ int rtw89_build_txpwr_trk_tbl_from_elm(struct rtw89_dev *rtwdev,
 	bitmap = le32_to_cpu(elm->u.txpwr_trk.bitmap);
 
 	if ((bitmap & needed_bitmap) != needed_bitmap) {
-		rtw89_warn(rtwdev, "needed txpwr trk bitmap %08x but %0x8x\n",
+		rtw89_warn(rtwdev, "needed txpwr trk bitmap %08x but %08x\n",
 			   needed_bitmap, bitmap);
 		return -ENOENT;
 	}
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH rtw-next v2 4/4] wifi: rtw89: fw: don't reject firmware in blacklist to prevent breaking users
  2025-02-27 13:12 [PATCH rtw-next v2 0/4] wifi: rtw89: fw: update role_maintain H2C command Ping-Ke Shih
                   ` (2 preceding siblings ...)
  2025-02-27 13:12 ` [PATCH rtw-next v2 3/4] wifi: rtw89: fw: correct debug message format in rtw89_build_txpwr_trk_tbl_from_elm() Ping-Ke Shih
@ 2025-02-27 13:12 ` Ping-Ke Shih
  3 siblings, 0 replies; 6+ messages in thread
From: Ping-Ke Shih @ 2025-02-27 13:12 UTC (permalink / raw)
  To: linux-wireless; +Cc: phhuang

Once update driver blacklist of firmware, users' firmware might be in
the list, and then driver stops working. Since breaking users is not
expected, report a significant message instead of stopping.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
---
v2: added by v2
---
 drivers/net/wireless/realtek/rtw89/fw.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtw89/fw.c b/drivers/net/wireless/realtek/rtw89/fw.c
index 15d6bda1fcf0..d0a246f415ff 100644
--- a/drivers/net/wireless/realtek/rtw89/fw.c
+++ b/drivers/net/wireless/realtek/rtw89/fw.c
@@ -372,7 +372,7 @@ static int __check_secure_blacklist(struct rtw89_dev *rtwdev,
 		return 0;
 
 	if (!chip_blacklist) {
-		rtw89_err(rtwdev, "chip no blacklist for secure firmware\n");
+		rtw89_warn(rtwdev, "chip no blacklist for secure firmware\n");
 		return -ENOENT;
 	}
 
@@ -380,14 +380,14 @@ static int __check_secure_blacklist(struct rtw89_dev *rtwdev,
 	bit_mask = BIT(section_content->blacklist.bit_in_chip_list & 0x7);
 
 	if (section_content->blacklist.ver > chip_blacklist->ver) {
-		rtw89_err(rtwdev, "chip blacklist out of date (%u, %u)\n",
-			  section_content->blacklist.ver, chip_blacklist->ver);
+		rtw89_warn(rtwdev, "chip blacklist out of date (%u, %u)\n",
+			   section_content->blacklist.ver, chip_blacklist->ver);
 		return -EINVAL;
 	}
 
 	if (chip_blacklist->list[byte_idx] & bit_mask) {
-		rtw89_err(rtwdev, "firmware %u in chip blacklist\n",
-			  section_content->blacklist.ver);
+		rtw89_warn(rtwdev, "firmware %u in chip blacklist\n",
+			   section_content->blacklist.ver);
 		return -EPERM;
 	}
 
@@ -427,7 +427,10 @@ static int __parse_security_section(struct rtw89_dev *rtwdev,
 		info->secure_section_exist = true;
 	}
 
-	return __check_secure_blacklist(rtwdev, info, section_info, content);
+	ret = __check_secure_blacklist(rtwdev, info, section_info, content);
+	WARN_ONCE(ret, "Current firmware in blacklist. Please update firmware.\n");
+
+	return 0;
 }
 
 static int rtw89_fw_hdr_parser_v1(struct rtw89_dev *rtwdev, const u8 *fw, u32 len,
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH rtw-next v2 1/4] wifi: rtw89: fw: use struct to fill role_maintain H2C command
  2025-02-27 13:12 ` [PATCH rtw-next v2 1/4] wifi: rtw89: fw: use struct to fill " Ping-Ke Shih
@ 2025-03-05 11:51   ` Ping-Ke Shih
  0 siblings, 0 replies; 6+ messages in thread
From: Ping-Ke Shih @ 2025-03-05 11:51 UTC (permalink / raw)
  To: Ping-Ke Shih, linux-wireless; +Cc: phhuang

Ping-Ke Shih <pkshih@realtek.com> wrote:

> From: Po-Hao Huang <phhuang@realtek.com>
> 
> The role_maintain H2C command is to align operating mode of WiFi role,
> such as STA or AP modes, between driver and firmware.
> 
> Use a struct to fill fields of this H2C command.
> 
> Don't change logic at all.
> 
> Signed-off-by: Po-Hao Huang <phhuang@realtek.com>
> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>

4 patch(es) applied to rtw-next branch of rtw.git, thanks.

385eff211ee0 wifi: rtw89: fw: use struct to fill role_maintain H2C command
b521af1dcdc3 wifi: rtw89: fw: update role_maintain H2C command for roles operating on band 1
88b46320fc9d wifi: rtw89: fw: correct debug message format in rtw89_build_txpwr_trk_tbl_from_elm()
ad26d0dcb3bd wifi: rtw89: fw: don't reject firmware in blacklist to prevent breaking users

---
https://github.com/pkshih/rtw.git


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-03-05 11:51 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-27 13:12 [PATCH rtw-next v2 0/4] wifi: rtw89: fw: update role_maintain H2C command Ping-Ke Shih
2025-02-27 13:12 ` [PATCH rtw-next v2 1/4] wifi: rtw89: fw: use struct to fill " Ping-Ke Shih
2025-03-05 11:51   ` Ping-Ke Shih
2025-02-27 13:12 ` [PATCH rtw-next v2 2/4] wifi: rtw89: fw: update role_maintain H2C command for roles operating on band 1 Ping-Ke Shih
2025-02-27 13:12 ` [PATCH rtw-next v2 3/4] wifi: rtw89: fw: correct debug message format in rtw89_build_txpwr_trk_tbl_from_elm() Ping-Ke Shih
2025-02-27 13:12 ` [PATCH rtw-next v2 4/4] wifi: rtw89: fw: don't reject firmware in blacklist to prevent breaking users Ping-Ke Shih

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