rtw89: initialize preload window of D-MAC
8852C add new hardware feature -- preload window, which is used to load more data to D-MAC, so it can possibly yield better performance. This patch is to configure preload and reserved size for next window. Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20220317055543.40514-8-pkshih@realtek.com
This commit is contained in:
parent
828a4396e5
commit
e07a996829
@ -1545,6 +1545,43 @@ error:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int preload_init_set(struct rtw89_dev *rtwdev, enum rtw89_mac_idx mac_idx,
|
||||
enum rtw89_qta_mode mode)
|
||||
{
|
||||
u32 reg, max_preld_size, min_rsvd_size;
|
||||
|
||||
max_preld_size = (mac_idx == RTW89_MAC_0 ?
|
||||
PRELD_B0_ENT_NUM : PRELD_B1_ENT_NUM) * PRELD_AMSDU_SIZE;
|
||||
reg = mac_idx == RTW89_MAC_0 ?
|
||||
R_AX_TXPKTCTL_B0_PRELD_CFG0 : R_AX_TXPKTCTL_B1_PRELD_CFG0;
|
||||
rtw89_write32_mask(rtwdev, reg, B_AX_B0_PRELD_USEMAXSZ_MASK, max_preld_size);
|
||||
rtw89_write32_set(rtwdev, reg, B_AX_B0_PRELD_FEN);
|
||||
|
||||
min_rsvd_size = PRELD_AMSDU_SIZE;
|
||||
reg = mac_idx == RTW89_MAC_0 ?
|
||||
R_AX_TXPKTCTL_B0_PRELD_CFG1 : R_AX_TXPKTCTL_B1_PRELD_CFG1;
|
||||
rtw89_write32_mask(rtwdev, reg, B_AX_B0_PRELD_NXT_TXENDWIN_MASK, PRELD_NEXT_WND);
|
||||
rtw89_write32_mask(rtwdev, reg, B_AX_B0_PRELD_NXT_RSVMINSZ_MASK, min_rsvd_size);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool is_qta_poh(struct rtw89_dev *rtwdev)
|
||||
{
|
||||
return rtwdev->hci.type == RTW89_HCI_TYPE_PCIE;
|
||||
}
|
||||
|
||||
static int preload_init(struct rtw89_dev *rtwdev, enum rtw89_mac_idx mac_idx,
|
||||
enum rtw89_qta_mode mode)
|
||||
{
|
||||
const struct rtw89_chip_info *chip = rtwdev->chip;
|
||||
|
||||
if (chip->chip_id == RTL8852A || chip->chip_id == RTL8852B || !is_qta_poh(rtwdev))
|
||||
return 0;
|
||||
|
||||
return preload_init_set(rtwdev, mac_idx, mode);
|
||||
}
|
||||
|
||||
static bool dle_is_txq_empty(struct rtw89_dev *rtwdev)
|
||||
{
|
||||
u32 msk32;
|
||||
@ -1652,6 +1689,12 @@ static int dmac_init(struct rtw89_dev *rtwdev, u8 mac_idx)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = preload_init(rtwdev, RTW89_MAC_0, rtwdev->mac.qta_mode);
|
||||
if (ret) {
|
||||
rtw89_err(rtwdev, "[ERR]preload init %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = hfc_init(rtwdev, true, true, true);
|
||||
if (ret) {
|
||||
rtw89_err(rtwdev, "[ERR]HCI FC init %d\n", ret);
|
||||
|
@ -742,6 +742,30 @@
|
||||
#define R_AX_DBG_FUN_INTF_DATA 0x9F34
|
||||
#define B_AX_DFI_DATA_MASK GENMASK(31, 0)
|
||||
|
||||
#define R_AX_TXPKTCTL_B0_PRELD_CFG0 0x9F48
|
||||
#define B_AX_B0_PRELD_FEN BIT(31)
|
||||
#define B_AX_B0_PRELD_USEMAXSZ_MASK GENMASK(25, 16)
|
||||
#define PRELD_B0_ENT_NUM 10
|
||||
#define PRELD_AMSDU_SIZE 52
|
||||
#define B_AX_B0_PRELD_CAM_G1ENTNUM_MASK GENMASK(12, 8)
|
||||
#define B_AX_B0_PRELD_CAM_G0ENTNUM_MASK GENMASK(4, 0)
|
||||
|
||||
#define R_AX_TXPKTCTL_B0_PRELD_CFG1 0x9F4C
|
||||
#define B_AX_B0_PRELD_NXT_TXENDWIN_MASK GENMASK(11, 8)
|
||||
#define PRELD_NEXT_WND 1
|
||||
#define B_AX_B0_PRELD_NXT_RSVMINSZ_MASK GENMASK(7, 0)
|
||||
|
||||
#define R_AX_TXPKTCTL_B1_PRELD_CFG0 0x9F88
|
||||
#define B_AX_B1_PRELD_FEN BIT(31)
|
||||
#define B_AX_B1_PRELD_USEMAXSZ_MASK GENMASK(25, 16)
|
||||
#define PRELD_B1_ENT_NUM 4
|
||||
#define B_AX_B1_PRELD_CAM_G1ENTNUM_MASK GENMASK(12, 8)
|
||||
#define B_AX_B1_PRELD_CAM_G0ENTNUM_MASK GENMASK(4, 0)
|
||||
|
||||
#define R_AX_TXPKTCTL_B1_PRELD_CFG1 0x9F8C
|
||||
#define B_AX_B1_PRELD_NXT_TXENDWIN_MASK GENMASK(11, 8)
|
||||
#define B_AX_B1_PRELD_NXT_RSVMINSZ_MASK GENMASK(7, 0)
|
||||
|
||||
#define R_AX_AFE_CTRL1 0x0024
|
||||
|
||||
#define B_AX_R_SYM_WLCMAC1_P4_PC_EN BIT(4)
|
||||
|
Loading…
Reference in New Issue
Block a user