]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw89: mac: update MPDU quota according to chip DLE definition
authorPing-Ke Shih <pkshih@realtek.com>
Thu, 8 Jan 2026 12:03:14 +0000 (20:03 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Tue, 13 Jan 2026 02:25:56 +0000 (10:25 +0800)
MPDU quota is to define number of memory used to handle packets in DLE
(Data Link Engine). All chips use the same value before, but the RTL8922D
need to use chip specific value.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20260108120320.2217402-8-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/core.h
drivers/net/wireless/realtek/rtw89/mac.c
drivers/net/wireless/realtek/rtw89/mac_be.c
drivers/net/wireless/realtek/rtw89/reg.h

index a59fba681e85e790cd759ca31a2066d8bf9db2ef..0877cb342b942e99acf467cbee47c02fef6c2ee1 100644 (file)
@@ -4636,6 +4636,7 @@ enum rtw89_hcifc_mode {
 
 struct rtw89_dle_info {
        const struct rtw89_rsvd_quota *rsvd_qt;
+       const struct rtw89_dle_input *dle_input;
        enum rtw89_qta_mode qta_mode;
        u16 ple_pg_size;
        u16 ple_free_pg;
index b1f313f738b81aa14cd7d1a43776612c94d99348..35794488a02f8697b51c075dd3fdf6623029c66f 100644 (file)
@@ -1862,6 +1862,7 @@ static const struct rtw89_dle_mem *get_dle_mem_cfg(struct rtw89_dev *rtwdev,
        }
 
        mac->dle_info.rsvd_qt = cfg->rsvd_qt;
+       mac->dle_info.dle_input = cfg->dle_input;
        mac->dle_info.ple_pg_size = cfg->ple_size->pge_size;
        mac->dle_info.ple_free_pg = cfg->ple_size->lnk_pge_num;
        mac->dle_info.qta_mode = mode;
index aff9855f184ad87c9e4bfd9d6711cc86886df482..0327629d2a5d3d591cbab41d45853f6d46bf3f16 100644 (file)
@@ -873,7 +873,10 @@ static int sec_eng_init_be(struct rtw89_dev *rtwdev)
 
 static int txpktctrl_init_be(struct rtw89_dev *rtwdev)
 {
+       struct rtw89_mac_info *mac = &rtwdev->mac;
        struct rtw89_mac_dle_rsvd_qt_cfg qt_cfg;
+       const struct rtw89_dle_input *dle_input;
+       u32 mpdu_info_b1_ofst;
        u32 val32;
        int ret;
 
@@ -884,9 +887,16 @@ static int txpktctrl_init_be(struct rtw89_dev *rtwdev)
                return ret;
        }
 
+       dle_input = mac->dle_info.dle_input;
+       if (dle_input)
+               mpdu_info_b1_ofst = DIV_ROUND_UP(dle_input->mpdu_info_tbl_b0,
+                                                BIT(MPDU_INFO_TBL_FACTOR));
+       else
+               mpdu_info_b1_ofst = MPDU_INFO_B1_OFST;
+
        val32 = rtw89_read32(rtwdev, R_BE_TXPKTCTL_MPDUINFO_CFG);
        val32 = u32_replace_bits(val32, qt_cfg.pktid, B_BE_MPDUINFO_PKTID_MASK);
-       val32 = u32_replace_bits(val32, MPDU_INFO_B1_OFST, B_BE_MPDUINFO_B1_BADDR_MASK);
+       val32 = u32_replace_bits(val32, mpdu_info_b1_ofst, B_BE_MPDUINFO_B1_BADDR_MASK);
        val32 |= B_BE_MPDUINFO_FEN;
        rtw89_write32(rtwdev, R_BE_TXPKTCTL_MPDUINFO_CFG, val32);
 
index 9ac1c169d25c35a13282c60967c2a1bd03df9870..e41a6c679d592b2a7c4dc21ee3411483d5a1f015 100644 (file)
 #define B_BE_MPDUINFO_PKTID_MASK GENMASK(27, 16)
 #define B_BE_MPDUINFO_B1_BADDR_MASK GENMASK(5, 0)
 #define MPDU_INFO_B1_OFST 18
+#define MPDU_INFO_TBL_FACTOR 3
 
 #define R_BE_TXPKTCTL_B0_PRELD_CFG0 0x9F48
 #define B_BE_B0_PRELD_FEN BIT(31)