Search Linux Wireless

RE: rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Piotr Oniszczuk <piotr.oniszczuk@xxxxxxxxx> wrote:

[...]

> 
> Working: HT RX MCS indexes: 0-15
> Non-working: HT RX MCS indexes: 0-7
> 
> Isn’t that 8-15 are for 2x2mimo?
> So maybe - by some reason - hw sometimes reports support for only 1x mimo but receives from air 2x mimo
> (2 streams) and thats why I see hell of "unsupported rf path"  errors from driver?

I think your point is correct that firmware reports incorrect value somehow. 
With below changes, we can check this:

diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c
index fa0ed39cb199..3363458a9ea1 100644
--- a/drivers/net/wireless/realtek/rtw88/main.c
+++ b/drivers/net/wireless/realtek/rtw88/main.c
@@ -996,6 +996,9 @@ static void rtw_hw_config_rf_ant_num(struct rtw_dev *rtwdev, u8 hw_ant_num)
                hal->rf_path_num = 1;
                if (!chip->fix_rf_phy_num)
                        hal->rf_phy_num = hal->rf_path_num;
+               printk("%s:%d hal->rf_phy_num=%d hal->rf_path_num=%d hw_ant_num=%d\n",
+                       __func__, __LINE__, hal->rf_phy_num, hal->rf_path_num, hw_ant_num);
+
                hal->antenna_tx = BB_PATH_A;
                hal->antenna_rx = BB_PATH_A;
                break;
@@ -1874,6 +1877,8 @@ static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev)
        }
        hal->rf_phy_num = chip->fix_rf_phy_num ? chip->fix_rf_phy_num :
                          hal->rf_path_num;
+       printk("%s:%d hal->rf_phy_num=%d hal->rf_path_num=%d\n",
+               __func__, __LINE__, hal->rf_phy_num, hal->rf_path_num);

        efuse->physical_size = chip->phy_efuse_size;
        efuse->logical_size = chip->log_efuse_size;


If we found firmware reports incorrect values, let's print out the reported
values by this below to see if we can have useful clues. 

@@ -1948,6 +1953,9 @@ static int rtw_dump_hw_feature(struct rtw_dev *rtwdev)
        for (i = 0; i < HW_FEATURE_LEN; i++)
                hw_feature[i] = rtw_read8(rtwdev, REG_C2HEVT + 2 + i);

+       printk("%s:%d hw_feature = %*ph\n",
+               __func__, __LINE__, HW_FEATURE_LEN, hw_feature);
+
        rtw_write8(rtwdev, REG_C2HEVT, 0);

        bw = GET_EFUSE_HW_CAP_BW(hw_feature);








[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux