Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

rtw88: update statistics to fw for fine-tuning performance

Since firmware can't have proper statistics, driver update the statistics
periodically to firmware to assist in tuning performance.

Signed-off-by: Po-Hao Huang <phhuang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20210326092147.30252-1-pkshih@realtek.com

authored by

Po-Hao Huang and committed by
Kalle Valo
ec7480ed d3240418

+29
+15
drivers/net/wireless/realtek/rtw88/fw.c
··· 500 500 rtw_fw_send_h2c_command(rtwdev, h2c_pkt); 501 501 } 502 502 503 + void rtw_fw_update_wl_phy_info(struct rtw_dev *rtwdev) 504 + { 505 + struct rtw_traffic_stats *stats = &rtwdev->stats; 506 + struct rtw_dm_info *dm_info = &rtwdev->dm_info; 507 + u8 h2c_pkt[H2C_PKT_SIZE] = {0}; 508 + 509 + SET_H2C_CMD_ID_CLASS(h2c_pkt, H2C_CMD_WL_PHY_INFO); 510 + SET_WL_PHY_INFO_TX_TP(h2c_pkt, stats->tx_throughput); 511 + SET_WL_PHY_INFO_RX_TP(h2c_pkt, stats->rx_throughput); 512 + SET_WL_PHY_INFO_TX_RATE_DESC(h2c_pkt, dm_info->tx_rate); 513 + SET_WL_PHY_INFO_RX_RATE_DESC(h2c_pkt, dm_info->curr_rx_rate); 514 + SET_WL_PHY_INFO_RX_EVM(h2c_pkt, dm_info->rx_evm_dbm[RF_PATH_A]); 515 + rtw_fw_send_h2c_command(rtwdev, h2c_pkt); 516 + } 517 + 503 518 void rtw_fw_set_pwr_mode(struct rtw_dev *rtwdev) 504 519 { 505 520 struct rtw_lps_conf *conf = &rtwdev->lps_conf;
+13
drivers/net/wireless/realtek/rtw88/fw.h
··· 345 345 #define H2C_CMD_LPS_PG_INFO 0x2b 346 346 #define H2C_CMD_RA_INFO 0x40 347 347 #define H2C_CMD_RSSI_MONITOR 0x42 348 + #define H2C_CMD_WL_PHY_INFO 0x58 348 349 349 350 #define H2C_CMD_COEX_TDMA_TYPE 0x60 350 351 #define H2C_CMD_QUERY_BT_INFO 0x61 ··· 369 368 le32p_replace_bits((__le32 *)(h2c_pkt) + 0x00, value, BIT(8)) 370 369 #define MEDIA_STATUS_RPT_SET_MACID(h2c_pkt, value) \ 371 370 le32p_replace_bits((__le32 *)(h2c_pkt) + 0x00, value, GENMASK(23, 16)) 371 + 372 + #define SET_WL_PHY_INFO_TX_TP(h2c_pkt, value) \ 373 + le32p_replace_bits((__le32 *)(h2c_pkt) + 0x00, value, GENMASK(17, 8)) 374 + #define SET_WL_PHY_INFO_RX_TP(h2c_pkt, value) \ 375 + le32p_replace_bits((__le32 *)(h2c_pkt) + 0x00, value, GENMASK(27, 18)) 376 + #define SET_WL_PHY_INFO_TX_RATE_DESC(h2c_pkt, value) \ 377 + le32p_replace_bits((__le32 *)(h2c_pkt) + 0x01, value, GENMASK(7, 0)) 378 + #define SET_WL_PHY_INFO_RX_RATE_DESC(h2c_pkt, value) \ 379 + le32p_replace_bits((__le32 *)(h2c_pkt) + 0x01, value, GENMASK(15, 8)) 380 + #define SET_WL_PHY_INFO_RX_EVM(h2c_pkt, value) \ 381 + le32p_replace_bits((__le32 *)(h2c_pkt) + 0x01, value, GENMASK(23, 16)) 372 382 373 383 #define SET_PWR_MODE_SET_MODE(h2c_pkt, value) \ 374 384 le32p_replace_bits((__le32 *)(h2c_pkt) + 0x00, value, GENMASK(14, 8)) ··· 571 559 void rtw_fw_send_rssi_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si); 572 560 void rtw_fw_send_ra_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si); 573 561 void rtw_fw_media_status_report(struct rtw_dev *rtwdev, u8 mac_id, bool conn); 562 + void rtw_fw_update_wl_phy_info(struct rtw_dev *rtwdev); 574 563 int rtw_fw_write_data_rsvd_page(struct rtw_dev *rtwdev, u16 pg_addr, 575 564 u8 *buf, u32 size); 576 565 void rtw_remove_rsvd_page(struct rtw_dev *rtwdev,
+1
drivers/net/wireless/realtek/rtw88/phy.c
··· 618 618 619 619 static void rtw_phy_ra_track(struct rtw_dev *rtwdev) 620 620 { 621 + rtw_fw_update_wl_phy_info(rtwdev); 621 622 rtw_phy_ra_info_update(rtwdev); 622 623 rtw_phy_rrsr_update(rtwdev); 623 624 }