Skip to content

Commit 5cb0d6b

Browse files
Ping-Ke ShihKalle Valo
authored andcommitted
wifi: rtw89: pci: implement PCI mac_post_init for WiFi 7 chips
For normal use, we do additional settings than mac_pre_init, such as more TX/RX DMA channels, interrupt mitigation and etc. Signed-off-by: Ping-Ke Shih <[email protected]> Signed-off-by: Kalle Valo <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent e24ae0f commit 5cb0d6b

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,45 @@
708708
#define B_BE_END_PL1_CNT_MASK GENMASK(23, 16)
709709
#define B_BE_START_PL1_CNT_MASK GENMASK(7, 0)
710710

711+
#define R_BE_PCIE_MIT0_TMR 0x3330
712+
#define B_BE_PCIE_MIT0_RX_TMR_MASK GENMASK(5, 4)
713+
#define BE_MIT0_TMR_UNIT_1MS 0
714+
#define BE_MIT0_TMR_UNIT_2MS 1
715+
#define BE_MIT0_TMR_UNIT_4MS 2
716+
#define BE_MIT0_TMR_UNIT_8MS 3
717+
#define B_BE_PCIE_MIT0_TX_TMR_MASK GENMASK(1, 0)
718+
719+
#define R_BE_PCIE_MIT0_CNT 0x3334
720+
#define B_BE_PCIE_RX_MIT0_CNT_MASK GENMASK(31, 24)
721+
#define B_BE_PCIE_TX_MIT0_CNT_MASK GENMASK(23, 16)
722+
#define B_BE_PCIE_RX_MIT0_TMR_CNT_MASK GENMASK(15, 8)
723+
#define B_BE_PCIE_TX_MIT0_TMR_CNT_MASK GENMASK(7, 0)
724+
725+
#define R_BE_PCIE_MIT_CH_EN 0x3338
726+
#define B_BE_PCIE_MIT_RX1P1_EN BIT(23)
727+
#define B_BE_PCIE_MIT_RX0P1_EN BIT(22)
728+
#define B_BE_PCIE_MIT_ROQ1_EN BIT(21)
729+
#define B_BE_PCIE_MIT_RPQ1_EN BIT(20)
730+
#define B_BE_PCIE_MIT_RX1P2_EN BIT(19)
731+
#define B_BE_PCIE_MIT_ROQ0_EN BIT(18)
732+
#define B_BE_PCIE_MIT_RPQ0_EN BIT(17)
733+
#define B_BE_PCIE_MIT_RX0P2_EN BIT(16)
734+
#define B_BE_PCIE_MIT_TXCH14_EN BIT(14)
735+
#define B_BE_PCIE_MIT_TXCH13_EN BIT(13)
736+
#define B_BE_PCIE_MIT_TXCH12_EN BIT(12)
737+
#define B_BE_PCIE_MIT_TXCH11_EN BIT(11)
738+
#define B_BE_PCIE_MIT_TXCH10_EN BIT(10)
739+
#define B_BE_PCIE_MIT_TXCH9_EN BIT(9)
740+
#define B_BE_PCIE_MIT_TXCH8_EN BIT(8)
741+
#define B_BE_PCIE_MIT_TXCH7_EN BIT(7)
742+
#define B_BE_PCIE_MIT_TXCH6_EN BIT(6)
743+
#define B_BE_PCIE_MIT_TXCH5_EN BIT(5)
744+
#define B_BE_PCIE_MIT_TXCH4_EN BIT(4)
745+
#define B_BE_PCIE_MIT_TXCH3_EN BIT(3)
746+
#define B_BE_PCIE_MIT_TXCH2_EN BIT(2)
747+
#define B_BE_PCIE_MIT_TXCH1_EN BIT(1)
748+
#define B_BE_PCIE_MIT_TXCH0_EN BIT(0)
749+
711750
#define R_BE_SER_PL1_CTRL 0x34A8
712751
#define B_BE_PL1_SER_PL1_EN BIT(31)
713752
#define B_BE_PL1_IGNORE_HOT_RST BIT(30)
@@ -800,12 +839,15 @@
800839
#define RTW89_PCI_MULTITAG 8
801840

802841
/* PCIE CFG register */
842+
#define RTW89_PCIE_CAPABILITY_SPEED 0x7C
843+
#define RTW89_PCIE_SUPPORT_GEN_MASK GENMASK(3, 0)
803844
#define RTW89_PCIE_L1_STS_V1 0x80
804845
#define RTW89_BCFG_LINK_SPEED_MASK GENMASK(19, 16)
805846
#define RTW89_PCIE_GEN1_SPEED 0x01
806847
#define RTW89_PCIE_GEN2_SPEED 0x02
807848
#define RTW89_PCIE_PHY_RATE 0x82
808849
#define RTW89_PCIE_PHY_RATE_MASK GENMASK(1, 0)
850+
#define RTW89_PCIE_LINK_CHANGE_SPEED 0xA0
809851
#define RTW89_PCIE_L1SS_STS_V1 0x0168
810852
#define RTW89_PCIE_BIT_ASPM_L11 BIT(3)
811853
#define RTW89_PCIE_BIT_ASPM_L12 BIT(2)
@@ -820,6 +862,8 @@
820862
#define RTW89_PCIE_BIT_CLK BIT(4)
821863
#define RTW89_PCIE_BIT_L1 BIT(3)
822864
#define RTW89_PCIE_CLK_CTRL 0x0725
865+
#define RTW89_PCIE_FTS 0x080C
866+
#define RTW89_PCIE_POLLING_BIT BIT(17)
823867
#define RTW89_PCIE_RST_MSTATE 0x0B48
824868
#define RTW89_PCIE_BIT_CFG_RST_MSTATE BIT(0)
825869

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,8 +385,44 @@ int rtw89_pci_ltr_set_v2(struct rtw89_dev *rtwdev, bool en)
385385
}
386386
EXPORT_SYMBOL(rtw89_pci_ltr_set_v2);
387387

388+
static void rtw89_pci_configure_mit_be(struct rtw89_dev *rtwdev)
389+
{
390+
u32 cnt;
391+
u32 val;
392+
393+
rtw89_write32_mask(rtwdev, R_BE_PCIE_MIT0_TMR,
394+
B_BE_PCIE_MIT0_RX_TMR_MASK, BE_MIT0_TMR_UNIT_1MS);
395+
396+
val = rtw89_read32(rtwdev, R_BE_PCIE_MIT0_CNT);
397+
cnt = min_t(u32, U8_MAX, RTW89_PCI_RXBD_NUM_MAX / 2);
398+
val = u32_replace_bits(val, cnt, B_BE_PCIE_RX_MIT0_CNT_MASK);
399+
val = u32_replace_bits(val, 2, B_BE_PCIE_RX_MIT0_TMR_CNT_MASK);
400+
rtw89_write32(rtwdev, R_BE_PCIE_MIT0_CNT, val);
401+
}
402+
403+
static int rtw89_pci_ops_mac_post_init_be(struct rtw89_dev *rtwdev)
404+
{
405+
const struct rtw89_pci_info *info = rtwdev->pci_info;
406+
int ret;
407+
408+
ret = info->ltr_set(rtwdev, true);
409+
if (ret) {
410+
rtw89_err(rtwdev, "pci ltr set fail\n");
411+
return ret;
412+
}
413+
414+
rtw89_pci_ctrl_trxdma_pcie_be(rtwdev, MAC_AX_PCIE_IGNORE,
415+
MAC_AX_PCIE_IGNORE, MAC_AX_PCIE_ENABLE);
416+
rtw89_pci_ctrl_wpdma_pcie_be(rtwdev, true);
417+
rtw89_pci_ctrl_txdma_ch_be(rtwdev, true, true);
418+
rtw89_pci_configure_mit_be(rtwdev);
419+
420+
return 0;
421+
}
422+
388423
const struct rtw89_pci_gen_def rtw89_pci_gen_be = {
389424
.mac_pre_init = rtw89_pci_ops_mac_pre_init_be,
425+
.mac_post_init = rtw89_pci_ops_mac_post_init_be,
390426

391427
.clr_idx_all = rtw89_pci_clr_idx_all_be,
392428
};

0 commit comments

Comments
 (0)