Skip to content

Commit 7a9192e

Browse files
Ping-Ke ShihKalle Valo
authored andcommitted
wifi: rtw89: load RFK log format string from firmware file
To debug RFK (RF calibration) in firmware, it sends log via firmware C2H events to driver with string format ID and four arguments. Load formatted string from firmware file, and the string ID can get back its string. Then, use regular print format to show the message. This firmware element layout looks like +============================================+ | elm ID | elm size | version | | +----------+----------+----------+-----------+ | | nr |rsvd |rfk_id|rsvd| +--------------------------------------------+ | offset[] (__le16 * nr) | | ... | +--------------------------------------------+ | formatted string with null termintor (*nr) | | ... | +============================================+ * a firmware file can contains more than one elements with this element ID named RTW89_FW_ELEMENT_ID_RFKLOG_FMT (19), because many RFK needs its own formatted strings, so add 'rfk_id' to know it belongs to which RFK. * the 'formatted string' just follow 'offset[]' without padding to align 32bits. Signed-off-by: Ping-Ke Shih <[email protected]> Signed-off-by: Kalle Valo <[email protected]> Link: https://msgid.link/[email protected]
1 parent 344c066 commit 7a9192e

File tree

4 files changed

+54
-0
lines changed

4 files changed

+54
-0
lines changed

drivers/net/wireless/realtek/rtw89/core.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ struct rtw89_mac_gen_def;
1818
struct rtw89_phy_gen_def;
1919
struct rtw89_efuse_block_cfg;
2020
struct rtw89_fw_txpwr_track_cfg;
21+
struct rtw89_phy_rfk_log_fmt;
2122

2223
extern const struct ieee80211_ops rtw89_ops;
2324

@@ -3952,6 +3953,7 @@ struct rtw89_fw_elm_info {
39523953
struct rtw89_phy_table *rf_radio[RF_PATH_MAX];
39533954
struct rtw89_phy_table *rf_nctl;
39543955
struct rtw89_fw_txpwr_track_cfg *txpwr_trk;
3956+
struct rtw89_phy_rfk_log_fmt *rfk_log_fmt;
39553957
};
39563958

39573959
struct rtw89_fw_info {

drivers/net/wireless/realtek/rtw89/fw.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -729,6 +729,31 @@ int rtw89_build_txpwr_trk_tbl_from_elm(struct rtw89_dev *rtwdev,
729729
return -EFAULT;
730730
}
731731

732+
static
733+
int rtw89_build_rfk_log_fmt_from_elm(struct rtw89_dev *rtwdev,
734+
const struct rtw89_fw_element_hdr *elm,
735+
const union rtw89_fw_element_arg arg)
736+
{
737+
struct rtw89_fw_elm_info *elm_info = &rtwdev->fw.elm_info;
738+
u8 rfk_id;
739+
740+
if (elm_info->rfk_log_fmt)
741+
goto allocated;
742+
743+
elm_info->rfk_log_fmt = kzalloc(sizeof(*elm_info->rfk_log_fmt), GFP_KERNEL);
744+
if (!elm_info->rfk_log_fmt)
745+
return 1; /* this is an optional element, so just ignore this */
746+
747+
allocated:
748+
rfk_id = elm->u.rfk_log_fmt.rfk_id;
749+
if (rfk_id >= RTW89_PHY_C2H_RFK_LOG_FUNC_NUM)
750+
return 1;
751+
752+
elm_info->rfk_log_fmt->elm[rfk_id] = elm;
753+
754+
return 0;
755+
}
756+
732757
static const struct rtw89_fw_element_handler __fw_element_handlers[] = {
733758
[RTW89_FW_ELEMENT_ID_BBMCU0] = {__rtw89_fw_recognize_from_elm,
734759
{ .fw_type = RTW89_FW_BBMCU0 }, NULL},
@@ -784,6 +809,9 @@ static const struct rtw89_fw_element_handler __fw_element_handlers[] = {
784809
[RTW89_FW_ELEMENT_ID_TXPWR_TRK] = {
785810
rtw89_build_txpwr_trk_tbl_from_elm, {}, "PWR_TRK",
786811
},
812+
[RTW89_FW_ELEMENT_ID_RFKLOG_FMT] = {
813+
rtw89_build_rfk_log_fmt_from_elm, {}, NULL,
814+
},
787815
};
788816

789817
int rtw89_fw_recognize_elements(struct rtw89_dev *rtwdev)
@@ -1221,6 +1249,7 @@ static void rtw89_unload_firmware_elements(struct rtw89_dev *rtwdev)
12211249
rtw89_free_phy_tbl_from_elm(elm_info->rf_nctl);
12221250

12231251
kfree(elm_info->txpwr_trk);
1252+
kfree(elm_info->rfk_log_fmt);
12241253
}
12251254

12261255
void rtw89_unload_firmware(struct rtw89_dev *rtwdev)

drivers/net/wireless/realtek/rtw89/fw.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3427,6 +3427,7 @@ enum rtw89_fw_element_id {
34273427
RTW89_FW_ELEMENT_ID_TX_SHAPE_LMT = 16,
34283428
RTW89_FW_ELEMENT_ID_TX_SHAPE_LMT_RU = 17,
34293429
RTW89_FW_ELEMENT_ID_TXPWR_TRK = 18,
3430+
RTW89_FW_ELEMENT_ID_RFKLOG_FMT = 19,
34303431

34313432
RTW89_FW_ELEMENT_ID_NUM,
34323433
};
@@ -3542,6 +3543,13 @@ struct rtw89_fw_element_hdr {
35423543
__le32 rsvd;
35433544
s8 contents[][DELTA_SWINGIDX_SIZE];
35443545
} __packed txpwr_trk;
3546+
struct {
3547+
u8 nr;
3548+
u8 rsvd[3];
3549+
u8 rfk_id; /* enum rtw89_phy_c2h_rfk_log_func */
3550+
u8 rsvd1[3];
3551+
__le16 offset[];
3552+
} __packed rfk_log_fmt;
35453553
struct __rtw89_fw_txpwr_element txpwr;
35463554
} __packed u;
35473555
} __packed;

drivers/net/wireless/realtek/rtw89/phy.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,17 @@ enum rtw89_phy_c2h_ra_func {
136136
RTW89_PHY_C2H_FUNC_RA_MAX,
137137
};
138138

139+
enum rtw89_phy_c2h_rfk_log_func {
140+
RTW89_PHY_C2H_RFK_LOG_FUNC_IQK = 0,
141+
RTW89_PHY_C2H_RFK_LOG_FUNC_DPK = 1,
142+
RTW89_PHY_C2H_RFK_LOG_FUNC_DACK = 2,
143+
RTW89_PHY_C2H_RFK_LOG_FUNC_RXDCK = 3,
144+
RTW89_PHY_C2H_RFK_LOG_FUNC_TSSI = 4,
145+
RTW89_PHY_C2H_RFK_LOG_FUNC_TXGAPK = 5,
146+
147+
RTW89_PHY_C2H_RFK_LOG_FUNC_NUM,
148+
};
149+
139150
enum rtw89_phy_c2h_dm_func {
140151
RTW89_PHY_C2H_DM_FUNC_FW_TEST,
141152
RTW89_PHY_C2H_DM_FUNC_FW_TRIG_TX_RPT,
@@ -483,6 +494,10 @@ struct rtw89_txpwr_limit_ru_be {
483494
s8 ru106_26[RTW89_RU_SEC_NUM_BE];
484495
};
485496

497+
struct rtw89_phy_rfk_log_fmt {
498+
const struct rtw89_fw_element_hdr *elm[RTW89_PHY_C2H_RFK_LOG_FUNC_NUM];
499+
};
500+
486501
struct rtw89_phy_gen_def {
487502
u32 cr_base;
488503
const struct rtw89_ccx_regs *ccx;

0 commit comments

Comments
 (0)