mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
wifi: rtw89: mac: differentiate mem_page_size by chip generation
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
This commit is contained in:
parent
c5ef95e291
commit
9c5c5a920a
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user