]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: rtw89: update EDCCA report for subband 40M/80M/sub-20M
authorEric Huang <echuang@realtek.com>
Wed, 18 Jun 2025 12:46:45 +0000 (20:46 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Tue, 24 Jun 2025 06:38:13 +0000 (14:38 +0800)
EDCCA report is obtained from the hardware to display OBSS interference
and their respective power levels for each subband. Modify the query
settings to improve resolution for debugging purposes.

Signed-off-by: Eric Huang <echuang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250618124649.11436-3-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/phy.c

index a05841304e0efd7217a831bfd627fac2df980823..f81bee4149bfce881db63ac3619bc581e12e676e 100644 (file)
@@ -7128,7 +7128,7 @@ static void rtw89_phy_edcca_log(struct rtw89_dev *rtwdev, struct rtw89_bb_ctx *b
        const struct rtw89_edcca_p_regs *edcca_p_regs;
        bool flag_fb, flag_p20, flag_s20, flag_s40, flag_s80;
        s8 pwdb_fb, pwdb_p20, pwdb_s20, pwdb_s40, pwdb_s80;
-       u8 path, per20_bitmap;
+       u8 path, per20_bitmap = 0;
        u8 pwdb[8];
        u32 tmp;
 
@@ -7158,14 +7158,11 @@ static void rtw89_phy_edcca_log(struct rtw89_dev *rtwdev, struct rtw89_bb_ctx *b
        pwdb_fb = u32_get_bits(tmp, MASKBYTE3);
 
        rtw89_phy_write32_mask(rtwdev, edcca_p_regs->rpt_sel,
-                              edcca_p_regs->rpt_sel_mask, 4);
+                              edcca_p_regs->rpt_sel_mask, 5);
        tmp = rtw89_phy_read32(rtwdev, edcca_p_regs->rpt_b);
        pwdb_s80 = u32_get_bits(tmp, MASKBYTE1);
        pwdb_s40 = u32_get_bits(tmp, MASKBYTE2);
 
-       per20_bitmap = rtw89_phy_read32_mask(rtwdev, edcca_p_regs->rpt_a,
-                                            MASKBYTE0);
-
        if (rtwdev->chip->chip_id == RTL8922A) {
                rtw89_phy_write32_mask(rtwdev, edcca_regs->rpt_sel_be,
                                       edcca_regs->rpt_sel_be_mask, 4);
@@ -7174,6 +7171,8 @@ static void rtw89_phy_edcca_log(struct rtw89_dev *rtwdev, struct rtw89_bb_ctx *b
                pwdb[1] = u32_get_bits(tmp, MASKBYTE2);
                pwdb[2] = u32_get_bits(tmp, MASKBYTE1);
                pwdb[3] = u32_get_bits(tmp, MASKBYTE0);
+               per20_bitmap = rtw89_phy_read32_mask(rtwdev, edcca_p_regs->rpt_a,
+                                                    MASKBYTE0);
 
                rtw89_phy_write32_mask(rtwdev, edcca_regs->rpt_sel_be,
                                       edcca_regs->rpt_sel_be_mask, 5);
@@ -7190,7 +7189,7 @@ static void rtw89_phy_edcca_log(struct rtw89_dev *rtwdev, struct rtw89_bb_ctx *b
                pwdb[1] = u32_get_bits(tmp, MASKBYTE2);
 
                rtw89_phy_write32_mask(rtwdev, edcca_p_regs->rpt_sel,
-                                      edcca_p_regs->rpt_sel_mask, 1);
+                                      edcca_p_regs->rpt_sel_mask, 5);
                tmp = rtw89_phy_read32(rtwdev, edcca_p_regs->rpt_a);
                pwdb[2] = u32_get_bits(tmp, MASKBYTE3);
                pwdb[3] = u32_get_bits(tmp, MASKBYTE2);