]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: rtw89: mac: differentiate mem_page_size by chip generation
authorKuan-Chung Chen <damon.chen@realtek.com>
Wed, 18 Jun 2025 12:46:44 +0000 (20:46 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Tue, 24 Jun 2025 06:37:05 +0000 (14:37 +0800)
When debugging or recovering system error recovery (SER), it's
necessary to dump internal memory to perform status inspection.
Since the memory page size differs between WiFi 6 and 7 chips,
define them accordingly.

Signed-off-by: Kuan-Chung Chen <damon.chen@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250618124649.11436-2-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/debug.c
drivers/net/wireless/realtek/rtw89/mac.c
drivers/net/wireless/realtek/rtw89/mac.h
drivers/net/wireless/realtek/rtw89/mac_be.c
drivers/net/wireless/realtek/rtw89/ser.c

index d6016fa107fbe9dbfbb4f2c6d2cd423a74607e11..4acb567b3ad44ad7f7424e55a5786eeafb8c817b 100644 (file)
@@ -1114,6 +1114,7 @@ static int rtw89_debug_dump_mac_mem(struct rtw89_dev *rtwdev,
        const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
        u32 filter_model_addr = mac->filter_model_addr;
        u32 indir_access_addr = mac->indir_access_addr;
+       u32 mem_page_size = mac->mem_page_size;
        u32 base_addr, start_page, residue;
        char *p = buf, *end = buf + bufsz;
        u32 i, j, pp, pages;
@@ -1121,14 +1122,14 @@ static int rtw89_debug_dump_mac_mem(struct rtw89_dev *rtwdev,
        u32 val;
 
        remain = len;
-       pages = len / MAC_MEM_DUMP_PAGE_SIZE + 1;
-       start_page = start_addr / MAC_MEM_DUMP_PAGE_SIZE;
-       residue = start_addr % MAC_MEM_DUMP_PAGE_SIZE;
+       pages = len / mem_page_size + 1;
+       start_page = start_addr / mem_page_size;
+       residue = start_addr % mem_page_size;
        base_addr = mac->mem_base_addrs[sel];
-       base_addr += start_page * MAC_MEM_DUMP_PAGE_SIZE;
+       base_addr += start_page * mem_page_size;
 
        for (pp = 0; pp < pages; pp++) {
-               dump_len = min_t(u32, remain, MAC_MEM_DUMP_PAGE_SIZE);
+               dump_len = min_t(u32, remain, mem_page_size);
                rtw89_write32(rtwdev, filter_model_addr, base_addr);
                for (i = indir_access_addr + residue;
                     i < indir_access_addr + dump_len;) {
@@ -1142,7 +1143,7 @@ static int rtw89_debug_dump_mac_mem(struct rtw89_dev *rtwdev,
                        }
                        p += scnprintf(p, end - p, "\n");
                }
-               base_addr += MAC_MEM_DUMP_PAGE_SIZE;
+               base_addr += mem_page_size;
        }
 
        return p - buf;
index 8ec86e1fa9d6e3e9fefcbef7dd1b6cb80c3b59a9..53628838a7c550e42672adfd4f543263b0f7cc4e 100644 (file)
@@ -6914,6 +6914,7 @@ const struct rtw89_mac_gen_def rtw89_mac_gen_ax = {
        .filter_model_addr = R_AX_FILTER_MODEL_ADDR,
        .indir_access_addr = R_AX_INDIR_ACCESS_ENTRY,
        .mem_base_addrs = rtw89_mac_mem_base_addrs_ax,
+       .mem_page_size = MAC_MEM_DUMP_PAGE_SIZE_AX,
        .rx_fltr = R_AX_RX_FLTR_OPT,
        .port_base = &rtw89_port_base_ax,
        .agg_len_ht = R_AX_AGG_LEN_HT_0,
index c1cbc53b16a7b17fd82539c394402dda5252e487..b7fd4a0fdb84a3b3a4541264c7d7f84772b11599 100644 (file)
@@ -8,7 +8,9 @@
 #include "core.h"
 #include "reg.h"
 
-#define MAC_MEM_DUMP_PAGE_SIZE 0x40000
+#define MAC_MEM_DUMP_PAGE_SIZE_AX 0x40000
+#define MAC_MEM_DUMP_PAGE_SIZE_BE 0x80000
+
 #define ADDR_CAM_ENT_SIZE  0x40
 #define ADDR_CAM_ENT_SHORT_SIZE 0x20
 #define BSSID_CAM_ENT_SIZE 0x08
@@ -970,6 +972,7 @@ struct rtw89_mac_gen_def {
        u32 filter_model_addr;
        u32 indir_access_addr;
        const u32 *mem_base_addrs;
+       u32 mem_page_size;
        u32 rx_fltr;
        const struct rtw89_port_reg *port_base;
        u32 agg_len_ht;
index 8c9d326dc907b16d3231c707c186b018794ae5eb..0078080b3999cc9dd16202bfbdc14e88506669d6 100644 (file)
@@ -2567,6 +2567,7 @@ const struct rtw89_mac_gen_def rtw89_mac_gen_be = {
        .filter_model_addr = R_BE_FILTER_MODEL_ADDR,
        .indir_access_addr = R_BE_INDIR_ACCESS_ENTRY,
        .mem_base_addrs = rtw89_mac_mem_base_addrs_be,
+       .mem_page_size = MAC_MEM_DUMP_PAGE_SIZE_BE,
        .rx_fltr = R_BE_RX_FLTR_OPT,
        .port_base = &rtw89_port_base_be,
        .agg_len_ht = R_BE_AGG_LEN_HT_0,
index 811c9148144117221fadf41857fda28fdf49cb43..d504518b8a571be02d1fd350b10b00bc00684d66 100644 (file)
@@ -566,21 +566,22 @@ static void ser_mac_mem_dump(struct rtw89_dev *rtwdev, u8 *buf,
        const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
        u32 filter_model_addr = mac->filter_model_addr;
        u32 indir_access_addr = mac->indir_access_addr;
+       u32 mem_page_size = mac->mem_page_size;
        u32 *ptr = (u32 *)buf;
        u32 base_addr, start_page, residue;
        u32 cnt = 0;
        u32 i;
 
-       start_page = start_addr / MAC_MEM_DUMP_PAGE_SIZE;
-       residue = start_addr % MAC_MEM_DUMP_PAGE_SIZE;
+       start_page = start_addr / mem_page_size;
+       residue = start_addr % mem_page_size;
        base_addr = mac->mem_base_addrs[sel];
-       base_addr += start_page * MAC_MEM_DUMP_PAGE_SIZE;
+       base_addr += start_page * mem_page_size;
 
        while (cnt < len) {
                rtw89_write32(rtwdev, filter_model_addr, base_addr);
 
                for (i = indir_access_addr + residue;
-                    i < indir_access_addr + MAC_MEM_DUMP_PAGE_SIZE;
+                    i < indir_access_addr + mem_page_size;
                     i += 4, ptr++) {
                        *ptr = rtw89_read32(rtwdev, i);
                        cnt += 4;
@@ -589,7 +590,7 @@ static void ser_mac_mem_dump(struct rtw89_dev *rtwdev, u8 *buf,
                }
 
                residue = 0;
-               base_addr += MAC_MEM_DUMP_PAGE_SIZE;
+               base_addr += mem_page_size;
        }
 }