* rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path'
@ 2025-07-22 13:29 Piotr Oniszczuk
2025-07-23 0:52 ` Ping-Ke Shih
0 siblings, 1 reply; 14+ messages in thread
From: Piotr Oniszczuk @ 2025-07-22 13:29 UTC (permalink / raw)
To: linux-wireless; +Cc: pkshih, rtl8821cerfe2, martin.blumenstingl
Guys,
I’m bringing rk3576 sbc (nanopi-r76s) to mainline linux.
All works well except 8822cs wifi (m2 key module; sdio intf)
my user spacce is iwd 3.9.
linux-fw is current master.
6.16-rc7 without any rtw88 related patches.
8822cs is recognised by kernel but works ok only in 1 per 10 or so boots.
In other 9 non-working cases i’m getting:
1. no any networks are discovered
2. dmesg is stormed with
[ 106.684159] rtw88_8822cs mmc1:0001:1: unsupported rf path (1)
[ 106.684667] rtw88_8822cs mmc1:0001:1: unsupported rf path (1)
[ 106.685169] rtw88_8822cs mmc1:0001:1: unsupported rf path (1)
[ 106.716150] rtw88_8822cs mmc1:0001:1: unsupported rf path (1)
[ 106.718596] rtw88_8822cs mmc1:0001:1: unsupported rf path (1)
[ 106.721630] rtw88_8822cs mmc1:0001:1: unsupported rf path (1)
[ 106.722132] rtw88_8822cs mmc1:0001:1: unsupported rf path (1)
[ 106.722632] rtw88_8822cs mmc1:0001:1: unsupported rf path (1)
[ 106.723132] rtw88_8822cs mmc1:0001:1: unsupported rf path (1)
[ 106.723683] rtw88_8822cs mmc1:0001:1: unsupported rf path (1)
[ 106.730767] rtw88_8822cs mmc1:0001:1: unsupported rf path (1)
[ 109.357579] rtw88_8822cs mmc1:0001:1: unsupported rf path (1)
(full dmesg: https://termbin.com/i1db )
3. comparing debug output of iwd for working and non working states i see:
non-working—————————————————:
Wiphy: 0, Name: phy0
Permanent Address: 70:68:71:a2:a8:0d
2.4GHz Band:
Bitrates (non-HT):
1.0 Mbps
2.0 Mbps
5.5 Mbps
11.0 Mbps
6.0 Mbps
9.0 Mbps
12.0 Mbps
18.0 Mbps
24.0 Mbps
36.0 Mbps
48.0 Mbps
54.0 Mbps
HT Capabilities:
HT40
Short GI for 20Mhz
Short GI for 40Mhz
HT RX MCS indexes:
0-7
32
5GHz Band:
Bitrates (non-HT):
6.0 Mbps
9.0 Mbps
12.0 Mbps
18.0 Mbps
24.0 Mbps
36.0 Mbps
48.0 Mbps
54.0 Mbps
HT Capabilities:
HT40
Short GI for 20Mhz
Short GI for 40Mhz
HT RX MCS indexes:
0-7
32
VHT Capabilities:
Short GI for 80Mhz
Max RX MCS: 0-9 for NSS: 1
Max TX MCS: 0-9 for NSS: 1
Ciphers: BIP-CMAC-256 BIP-GMAC-256 BIP-GMAC-128 CCMP-256
GCMP-256 GCMP-128 BIP-CMAC-128 CCMP-128
TKIP
Supported iftypes: station
working--------------------------:
Wiphy: 0, Name: phy0
Permanent Address: 70:68:71:a2:a8:0d
2.4GHz Band:
Bitrates (non-HT):
1.0 Mbps
2.0 Mbps
5.5 Mbps
11.0 Mbps
6.0 Mbps
9.0 Mbps
12.0 Mbps
18.0 Mbps
24.0 Mbps
36.0 Mbps
48.0 Mbps
54.0 Mbps
HT Capabilities:
HT40
Short GI for 20Mhz
Short GI for 40Mhz
HT RX MCS indexes:
0-15
32
5GHz Band:
Bitrates (non-HT):
6.0 Mbps
9.0 Mbps
12.0 Mbps
18.0 Mbps
24.0 Mbps
36.0 Mbps
48.0 Mbps
54.0 Mbps
HT Capabilities:
HT40
Short GI for 20Mhz
Short GI for 40Mhz
HT RX MCS indexes:
0-15
32
VHT Capabilities:
Short GI for 80Mhz
Max RX MCS: 0-9 for NSS: 2
Max TX MCS: 0-9 for NSS: 2
Ciphers: BIP-CMAC-256 BIP-GMAC-256 BIP-GMAC-128 CCMP-256
GCMP-256 GCMP-128 BIP-CMAC-128 CCMP-128
TKIP
Supported iftypes: station
As you see main diff is in HT RX MCS indexes and VHT caps.
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?
My kernel is compiled with CONFIG_RTW88_DEBUG=y CONFIG_RTW88_DEBUGFS=y - so if there is need for any extra debug info - i’ll be more than happy to provide….
If you have any ideas how to move forward with this - i’ll be more than happy to listen.
^ permalink raw reply [flat|nested] 14+ messages in thread* RE: rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path' 2025-07-22 13:29 rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path' Piotr Oniszczuk @ 2025-07-23 0:52 ` Ping-Ke Shih 2025-07-23 7:34 ` Piotr Oniszczuk 0 siblings, 1 reply; 14+ messages in thread From: Ping-Ke Shih @ 2025-07-23 0:52 UTC (permalink / raw) To: Piotr Oniszczuk, linux-wireless@vger.kernel.org Cc: rtl8821cerfe2@gmail.com, martin.blumenstingl@googlemail.com Piotr Oniszczuk <piotr.oniszczuk@gmail.com> 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); ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path' 2025-07-23 0:52 ` Ping-Ke Shih @ 2025-07-23 7:34 ` Piotr Oniszczuk 2025-07-23 7:50 ` Ping-Ke Shih 0 siblings, 1 reply; 14+ messages in thread From: Piotr Oniszczuk @ 2025-07-23 7:34 UTC (permalink / raw) To: Ping-Ke Shih Cc: linux-wireless@vger.kernel.org, rtl8821cerfe2@gmail.com, martin.blumenstingl@googlemail.com > Wiadomość napisana przez Ping-Ke Shih <pkshih@realtek.com> w dniu 23 lip 2025, o godz. 02:52: > > Piotr Oniszczuk <piotr.oniszczuk@gmail.com> 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. ……. pls find dmesg from: non-working state: https://termbin.com/8x42 working state: https://termbin.com/b804 ps: a added rtw88 pref to printk’s to easier spot it’s otputs… ^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path' 2025-07-23 7:34 ` Piotr Oniszczuk @ 2025-07-23 7:50 ` Ping-Ke Shih 2025-07-23 8:02 ` Piotr Oniszczuk 0 siblings, 1 reply; 14+ messages in thread From: Ping-Ke Shih @ 2025-07-23 7:50 UTC (permalink / raw) To: Piotr Oniszczuk Cc: linux-wireless@vger.kernel.org, rtl8821cerfe2@gmail.com, martin.blumenstingl@googlemail.com Piotr Oniszczuk <piotr.oniszczuk@gmail.com> wrote: > > Wiadomość napisana przez Ping-Ke Shih <pkshih@realtek.com> w dniu 23 lip 2025, o godz. 02:52: > > > > Piotr Oniszczuk <piotr.oniszczuk@gmail.com> 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. > > > ……. > > > pls find dmesg from: > > non-working state: https://termbin.com/8x42 > working state: https://termbin.com/b804 The dmsg find non-working state: rtw88: rtw_chip_parameter_setup:1872 hal->rf_phy_num=1 hal->rf_path_num=1 working state: rtw88: rtw_chip_parameter_setup:1872 hal->rf_phy_num=2 hal->rf_path_num=2 They were induced from register #define REG_SYS_CFG1 0x00F0 Please apply below change and share the working/non-working sates. diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c index fa0ed39cb199..95decf90a43d 100644 --- a/drivers/net/wireless/realtek/rtw88/main.c +++ b/drivers/net/wireless/realtek/rtw88/main.c @@ -1861,6 +1864,8 @@ static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev) hal->chip_version = rtw_read32(rtwdev, REG_SYS_CFG1); hal->cut_version = BIT_GET_CHIP_VER(hal->chip_version); hal->mp_chip = (hal->chip_version & BIT_RTL_ID) ? 0 : 1; + printk("rtw88: %s:%d hal->chip_version=0x%x\n", + __func__, __LINE__, hal->chip_version); if (hal->chip_version & BIT_RF_TYPE_ID) { hal->rf_type = RF_2T2R; hal->rf_path_num = 2; ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path' 2025-07-23 7:50 ` Ping-Ke Shih @ 2025-07-23 8:02 ` Piotr Oniszczuk 2025-07-23 8:19 ` Ping-Ke Shih 0 siblings, 1 reply; 14+ messages in thread From: Piotr Oniszczuk @ 2025-07-23 8:02 UTC (permalink / raw) To: Ping-Ke Shih Cc: linux-wireless@vger.kernel.org, rtl8821cerfe2@gmail.com, martin.blumenstingl@googlemail.com > Wiadomość napisana przez Ping-Ke Shih <pkshih@realtek.com> w dniu 23 lip 2025, o godz. 09:50: > > The dmsg find > non-working state: > rtw88: rtw_chip_parameter_setup:1872 hal->rf_phy_num=1 hal->rf_path_num=1 > working state: > rtw88: rtw_chip_parameter_setup:1872 hal->rf_phy_num=2 hal->rf_path_num=2 > > They were induced from register > #define REG_SYS_CFG1 0x00F0 > > Please apply below change and share the working/non-working sates. > > diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c > index fa0ed39cb199..95decf90a43d 100644 > --- a/drivers/net/wireless/realtek/rtw88/main.c > +++ b/drivers/net/wireless/realtek/rtw88/main.c > @@ -1861,6 +1864,8 @@ static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev) > hal->chip_version = rtw_read32(rtwdev, REG_SYS_CFG1); > hal->cut_version = BIT_GET_CHIP_VER(hal->chip_version); > hal->mp_chip = (hal->chip_version & BIT_RTL_ID) ? 0 : 1; > + printk("rtw88: %s:%d hal->chip_version=0x%x\n", > + __func__, __LINE__, hal->chip_version); > if (hal->chip_version & BIT_RF_TYPE_ID) { > hal->rf_type = RF_2T2R; > hal->rf_path_num = 2; here it is: non-working: https://termbin.com/7goz working: https://termbin.com/lpsq ^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path' 2025-07-23 8:02 ` Piotr Oniszczuk @ 2025-07-23 8:19 ` Ping-Ke Shih 2025-07-23 8:46 ` Piotr Oniszczuk 0 siblings, 1 reply; 14+ messages in thread From: Ping-Ke Shih @ 2025-07-23 8:19 UTC (permalink / raw) To: Piotr Oniszczuk Cc: linux-wireless@vger.kernel.org, rtl8821cerfe2@gmail.com, martin.blumenstingl@googlemail.com Piotr Oniszczuk <piotr.oniszczuk@gmail.com> wrote: > > Wiadomość napisana przez Ping-Ke Shih <pkshih@realtek.com> w dniu 23 lip 2025, o godz. 09:50: > > > > The dmsg find > > non-working state: > > rtw88: rtw_chip_parameter_setup:1872 hal->rf_phy_num=1 hal->rf_path_num=1 > > working state: > > rtw88: rtw_chip_parameter_setup:1872 hal->rf_phy_num=2 hal->rf_path_num=2 > > > > They were induced from register > > #define REG_SYS_CFG1 0x00F0 > > > > Please apply below change and share the working/non-working sates. > > > > diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c > > index fa0ed39cb199..95decf90a43d 100644 > > --- a/drivers/net/wireless/realtek/rtw88/main.c > > +++ b/drivers/net/wireless/realtek/rtw88/main.c > > @@ -1861,6 +1864,8 @@ static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev) > > hal->chip_version = rtw_read32(rtwdev, REG_SYS_CFG1); > > hal->cut_version = BIT_GET_CHIP_VER(hal->chip_version); > > hal->mp_chip = (hal->chip_version & BIT_RTL_ID) ? 0 : 1; > > + printk("rtw88: %s:%d hal->chip_version=0x%x\n", > > + __func__, __LINE__, hal->chip_version); > > if (hal->chip_version & BIT_RF_TYPE_ID) { > > hal->rf_type = RF_2T2R; > > hal->rf_path_num = 2; > > > here it is: > > non-working: https://termbin.com/7goz > working: https://termbin.com/lpsq Not sure why bit BIT_RF_TYPE_ID (27) is different: working state: rtw88: rtw_chip_parameter_setup:1859 hal->chip_version=0x493d30ea non-working state: rtw88: rtw_chip_parameter_setup:1859 hal->chip_version=0x303030ea I'd try to read more times to see if it can become correct... Also, I force to use correct value at the last iteration to see if it can work even incorrect value of register 0xF0. diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c index fa0ed39cb199..137418d1108d 100644 --- a/drivers/net/wireless/realtek/rtw88/main.c +++ b/drivers/net/wireless/realtek/rtw88/main.c @@ -1858,9 +1861,14 @@ static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev) return -EINVAL; } - hal->chip_version = rtw_read32(rtwdev, REG_SYS_CFG1); + for (int i = 0; i < 20; i++) { + hal->chip_version = i == 19 ? 0x493d30ea : rtw_read32(rtwdev, REG_SYS_CFG1); hal->cut_version = BIT_GET_CHIP_VER(hal->chip_version); hal->mp_chip = (hal->chip_version & BIT_RTL_ID) ? 0 : 1; + printk("rtw88: %s:%d hal->chip_version=0x%x\n", + __func__, __LINE__, hal->chip_version); + mdelay(100); + } if (hal->chip_version & BIT_RF_TYPE_ID) { hal->rf_type = RF_2T2R; hal->rf_path_num = 2; ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path' 2025-07-23 8:19 ` Ping-Ke Shih @ 2025-07-23 8:46 ` Piotr Oniszczuk 2025-07-23 9:07 ` Ping-Ke Shih 0 siblings, 1 reply; 14+ messages in thread From: Piotr Oniszczuk @ 2025-07-23 8:46 UTC (permalink / raw) To: Ping-Ke Shih Cc: linux-wireless@vger.kernel.org, rtl8821cerfe2@gmail.com, martin.blumenstingl@googlemail.com > Wiadomość napisana przez Ping-Ke Shih <pkshih@realtek.com> w dniu 23 lip 2025, o godz. 10:19: > > working state: > rtw88: rtw_chip_parameter_setup:1859 hal->chip_version=0x493d30ea > non-working state: > rtw88: rtw_chip_parameter_setup:1859 hal->chip_version=0x303030ea > > I'd try to read more times to see if it can become correct... > Also, I force to use correct value at the last iteration to see if it > can work even incorrect value of register 0xF0. > > diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c > index fa0ed39cb199..137418d1108d 100644 > --- a/drivers/net/wireless/realtek/rtw88/main.c > +++ b/drivers/net/wireless/realtek/rtw88/main.c > @@ -1858,9 +1861,14 @@ static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev) > return -EINVAL; > } > > - hal->chip_version = rtw_read32(rtwdev, REG_SYS_CFG1); > + for (int i = 0; i < 20; i++) { > + hal->chip_version = i == 19 ? 0x493d30ea : rtw_read32(rtwdev, REG_SYS_CFG1); > hal->cut_version = BIT_GET_CHIP_VER(hal->chip_version); > hal->mp_chip = (hal->chip_version & BIT_RTL_ID) ? 0 : 1; > + printk("rtw88: %s:%d hal->chip_version=0x%x\n", > + __func__, __LINE__, hal->chip_version); > + mdelay(100); > + } > if (hal->chip_version & BIT_RF_TYPE_ID) { > hal->rf_type = RF_2T2R; > hal->rf_path_num = 2; > > well - with above patch all starts to work well :-) 10 boots, 10 working wifi with correct scans. demsg from working sys: https://termbin.com/bhs4 ^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path' 2025-07-23 8:46 ` Piotr Oniszczuk @ 2025-07-23 9:07 ` Ping-Ke Shih 2025-07-23 11:14 ` Bitterblue Smith 0 siblings, 1 reply; 14+ messages in thread From: Ping-Ke Shih @ 2025-07-23 9:07 UTC (permalink / raw) To: Piotr Oniszczuk Cc: linux-wireless@vger.kernel.org, rtl8821cerfe2@gmail.com, martin.blumenstingl@googlemail.com Piotr Oniszczuk <piotr.oniszczuk@gmail.com> wrote: > > Wiadomość napisana przez Ping-Ke Shih <pkshih@realtek.com> w dniu 23 lip 2025, o godz. 10:19: > > > > working state: > > rtw88: rtw_chip_parameter_setup:1859 hal->chip_version=0x493d30ea > > non-working state: > > rtw88: rtw_chip_parameter_setup:1859 hal->chip_version=0x303030ea > > > > I'd try to read more times to see if it can become correct... > > Also, I force to use correct value at the last iteration to see if it > > can work even incorrect value of register 0xF0. > > > > diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c > > index fa0ed39cb199..137418d1108d 100644 > > --- a/drivers/net/wireless/realtek/rtw88/main.c > > +++ b/drivers/net/wireless/realtek/rtw88/main.c > > @@ -1858,9 +1861,14 @@ static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev) > > return -EINVAL; > > } > > > > - hal->chip_version = rtw_read32(rtwdev, REG_SYS_CFG1); > > + for (int i = 0; i < 20; i++) { > > + hal->chip_version = i == 19 ? 0x493d30ea : rtw_read32(rtwdev, REG_SYS_CFG1); > > hal->cut_version = BIT_GET_CHIP_VER(hal->chip_version); > > hal->mp_chip = (hal->chip_version & BIT_RTL_ID) ? 0 : 1; > > + printk("rtw88: %s:%d hal->chip_version=0x%x\n", > > + __func__, __LINE__, hal->chip_version); > > + mdelay(100); > > + } > > if (hal->chip_version & BIT_RF_TYPE_ID) { > > hal->rf_type = RF_2T2R; > > hal->rf_path_num = 2; > > > > > > well - with above patch all starts to work well :-) > 10 boots, 10 working wifi with correct scans. Good. > > demsg from working sys: https://termbin.com/bhs4 Unfortunately, the log said: first read: rtw88: rtw_chip_parameter_setup:1860 hal->chip_version=0x303030ea 2nd~19th read: rtw88: rtw_chip_parameter_setup:1860 hal->chip_version=0x30303030 Not sure if I can use this pattern to make a workaround. I think the better way would be to use firmware report to fix this. I'll try to make a patch and get back to you soon. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path' 2025-07-23 9:07 ` Ping-Ke Shih @ 2025-07-23 11:14 ` Bitterblue Smith 2025-07-23 12:23 ` Ping-Ke Shih 0 siblings, 1 reply; 14+ messages in thread From: Bitterblue Smith @ 2025-07-23 11:14 UTC (permalink / raw) To: Ping-Ke Shih, Piotr Oniszczuk Cc: linux-wireless@vger.kernel.org, martin.blumenstingl@googlemail.com On 23/07/2025 12:07, Ping-Ke Shih wrote: > Piotr Oniszczuk <piotr.oniszczuk@gmail.com> wrote: >>> Wiadomość napisana przez Ping-Ke Shih <pkshih@realtek.com> w dniu 23 lip 2025, o godz. 10:19: >>> >>> working state: >>> rtw88: rtw_chip_parameter_setup:1859 hal->chip_version=0x493d30ea >>> non-working state: >>> rtw88: rtw_chip_parameter_setup:1859 hal->chip_version=0x303030ea >>> >>> I'd try to read more times to see if it can become correct... >>> Also, I force to use correct value at the last iteration to see if it >>> can work even incorrect value of register 0xF0. >>> >>> diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c >>> index fa0ed39cb199..137418d1108d 100644 >>> --- a/drivers/net/wireless/realtek/rtw88/main.c >>> +++ b/drivers/net/wireless/realtek/rtw88/main.c >>> @@ -1858,9 +1861,14 @@ static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev) >>> return -EINVAL; >>> } >>> >>> - hal->chip_version = rtw_read32(rtwdev, REG_SYS_CFG1); >>> + for (int i = 0; i < 20; i++) { >>> + hal->chip_version = i == 19 ? 0x493d30ea : rtw_read32(rtwdev, REG_SYS_CFG1); >>> hal->cut_version = BIT_GET_CHIP_VER(hal->chip_version); >>> hal->mp_chip = (hal->chip_version & BIT_RTL_ID) ? 0 : 1; >>> + printk("rtw88: %s:%d hal->chip_version=0x%x\n", >>> + __func__, __LINE__, hal->chip_version); >>> + mdelay(100); >>> + } >>> if (hal->chip_version & BIT_RF_TYPE_ID) { >>> hal->rf_type = RF_2T2R; >>> hal->rf_path_num = 2; >>> >>> >> >> well - with above patch all starts to work well :-) >> 10 boots, 10 working wifi with correct scans. > > Good. > >> >> demsg from working sys: https://termbin.com/bhs4 > > Unfortunately, the log said: > first read: > rtw88: rtw_chip_parameter_setup:1860 hal->chip_version=0x303030ea > 2nd~19th read: > rtw88: rtw_chip_parameter_setup:1860 hal->chip_version=0x30303030 > > Not sure if I can use this pattern to make a workaround. I think the better > way would be to use firmware report to fix this. I'll try to make a patch > and get back to you soon. > > Maybe there is a mistake in rtw_sdio_read32() ? It's pretty complicated. The equivalent function in the vendor driver is reg_r32_sdio_8822c(). I think for reading REG_SYS_CFG1 in rtw_chip_parameter_setup() it needs to do the indirect read in the snippet below: u32 reg_r32_sdio_8822c(struct halmac_adapter *adapter, u32 offset) { enum halmac_ret_status status = HALMAC_RET_SUCCESS; union { __le32 dword; u8 byte[4]; } value32 = { 0x00000000 }; if (((offset & 0xFFFF0000) == 0) && adapter->halmac_state.mac_pwr == HALMAC_MAC_POWER_OFF) { return r_indir_sdio_88xx(adapter, offset, HALMAC_IO_DWORD); But the conditions for doing an indirect read in rtw_sdio_read32() are a bit different. You can add this message to check: diff --git a/drivers/net/wireless/realtek/rtw88/sdio.c b/drivers/net/wireless/realtek/rtw88/sdio.c index d26bc8a5c2e8..f8f055b6e884 100644 --- a/drivers/net/wireless/realtek/rtw88/sdio.c +++ b/drivers/net/wireless/realtek/rtw88/sdio.c @@ -314,6 +314,9 @@ static u32 rtw_sdio_read32(struct rtw_dev *rtwdev, u32 addr) addr = rtw_sdio_to_io_address(rtwdev, addr, direct); bus_claim = rtw_sdio_bus_claim_needed(rtwsdio); + if (addr == REG_SYS_CFG1) + printk("%s: addr %#x direct %d\n", __func__, addr, direct); + if (bus_claim) sdio_claim_host(rtwsdio->sdio_func); ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path' 2025-07-23 11:14 ` Bitterblue Smith @ 2025-07-23 12:23 ` Ping-Ke Shih 2025-07-23 13:02 ` Piotr Oniszczuk 0 siblings, 1 reply; 14+ messages in thread From: Ping-Ke Shih @ 2025-07-23 12:23 UTC (permalink / raw) To: Bitterblue Smith, Piotr Oniszczuk Cc: linux-wireless@vger.kernel.org, martin.blumenstingl@googlemail.com Bitterblue Smith <rtl8821cerfe2@gmail.com> wrote: > > On 23/07/2025 12:07, Ping-Ke Shih wrote: > > Piotr Oniszczuk <piotr.oniszczuk@gmail.com> wrote: > >>> Wiadomość napisana przez Ping-Ke Shih <pkshih@realtek.com> w dniu 23 lip 2025, o godz. 10:19: > >>> > >>> working state: > >>> rtw88: rtw_chip_parameter_setup:1859 hal->chip_version=0x493d30ea > >>> non-working state: > >>> rtw88: rtw_chip_parameter_setup:1859 hal->chip_version=0x303030ea > >>> > >>> I'd try to read more times to see if it can become correct... > >>> Also, I force to use correct value at the last iteration to see if it > >>> can work even incorrect value of register 0xF0. > >>> > >>> diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c > >>> index fa0ed39cb199..137418d1108d 100644 > >>> --- a/drivers/net/wireless/realtek/rtw88/main.c > >>> +++ b/drivers/net/wireless/realtek/rtw88/main.c > >>> @@ -1858,9 +1861,14 @@ static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev) > >>> return -EINVAL; > >>> } > >>> > >>> - hal->chip_version = rtw_read32(rtwdev, REG_SYS_CFG1); > >>> + for (int i = 0; i < 20; i++) { > >>> + hal->chip_version = i == 19 ? 0x493d30ea : rtw_read32(rtwdev, REG_SYS_CFG1); > >>> hal->cut_version = BIT_GET_CHIP_VER(hal->chip_version); > >>> hal->mp_chip = (hal->chip_version & BIT_RTL_ID) ? 0 : 1; > >>> + printk("rtw88: %s:%d hal->chip_version=0x%x\n", > >>> + __func__, __LINE__, hal->chip_version); > >>> + mdelay(100); > >>> + } > >>> if (hal->chip_version & BIT_RF_TYPE_ID) { > >>> hal->rf_type = RF_2T2R; > >>> hal->rf_path_num = 2; > >>> > >>> > >> > >> well - with above patch all starts to work well :-) > >> 10 boots, 10 working wifi with correct scans. > > > > Good. > > > >> > >> demsg from working sys: https://termbin.com/bhs4 > > > > Unfortunately, the log said: > > first read: > > rtw88: rtw_chip_parameter_setup:1860 hal->chip_version=0x303030ea > > 2nd~19th read: > > rtw88: rtw_chip_parameter_setup:1860 hal->chip_version=0x30303030 > > > > Not sure if I can use this pattern to make a workaround. I think the better > > way would be to use firmware report to fix this. I'll try to make a patch > > and get back to you soon. > > > > > > Maybe there is a mistake in rtw_sdio_read32() ? It's pretty complicated. > The equivalent function in the vendor driver is reg_r32_sdio_8822c(). > I think for reading REG_SYS_CFG1 in rtw_chip_parameter_setup() it needs > to do the indirect read in the snippet below: > > u32 > reg_r32_sdio_8822c(struct halmac_adapter *adapter, u32 offset) > { > enum halmac_ret_status status = HALMAC_RET_SUCCESS; > union { > __le32 dword; > u8 byte[4]; > } value32 = { 0x00000000 }; > > if (((offset & 0xFFFF0000) == 0) && > adapter->halmac_state.mac_pwr == HALMAC_MAC_POWER_OFF) { > return r_indir_sdio_88xx(adapter, offset, HALMAC_IO_DWORD); Thanks for the hints. I think it's worth to try: diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c index fa0ed39cb199..5ea13c775796 100644 --- a/drivers/net/wireless/realtek/rtw88/main.c +++ b/drivers/net/wireless/realtek/rtw88/main.c @@ -1861,6 +1861,8 @@ static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev) hal->chip_version = rtw_read32(rtwdev, REG_SYS_CFG1); hal->cut_version = BIT_GET_CHIP_VER(hal->chip_version); hal->mp_chip = (hal->chip_version & BIT_RTL_ID) ? 0 : 1; + printk("rtw88: %s:%d hal->chip_version=0x%x\n", + __func__, __LINE__, hal->chip_version); if (hal->chip_version & BIT_RF_TYPE_ID) { hal->rf_type = RF_2T2R; hal->rf_path_num = 2; diff --git a/drivers/net/wireless/realtek/rtw88/sdio.c b/drivers/net/wireless/realtek/rtw88/sdio.c index cc2d4fef3587..5c9e7c8cdd7e 100644 --- a/drivers/net/wireless/realtek/rtw88/sdio.c +++ b/drivers/net/wireless/realtek/rtw88/sdio.c @@ -144,6 +144,10 @@ static u32 rtw_sdio_to_io_address(struct rtw_dev *rtwdev, u32 addr, static bool rtw_sdio_use_direct_io(struct rtw_dev *rtwdev, u32 addr) { + if (!rtw_sdio_is_bus_addr(addr) && + !test_bit(RTW_FLAG_POWERON, rtwdev->flags)) + return false; + return !rtw_sdio_is_sdio30_supported(rtwdev) || rtw_sdio_is_bus_addr(addr); } ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path' 2025-07-23 12:23 ` Ping-Ke Shih @ 2025-07-23 13:02 ` Piotr Oniszczuk 2025-07-24 0:52 ` Ping-Ke Shih 0 siblings, 1 reply; 14+ messages in thread From: Piotr Oniszczuk @ 2025-07-23 13:02 UTC (permalink / raw) To: Ping-Ke Shih Cc: Bitterblue Smith, linux-wireless@vger.kernel.org, martin.blumenstingl@googlemail.com > Wiadomość napisana przez Ping-Ke Shih <pkshih@realtek.com> w dniu 23 lip 2025, o godz. 14:23: > > Thanks for the hints. I think it's worth to try: > > diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c > index fa0ed39cb199..5ea13c775796 100644 > --- a/drivers/net/wireless/realtek/rtw88/main.c > +++ b/drivers/net/wireless/realtek/rtw88/main.c > @@ -1861,6 +1861,8 @@ static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev) > hal->chip_version = rtw_read32(rtwdev, REG_SYS_CFG1); > hal->cut_version = BIT_GET_CHIP_VER(hal->chip_version); > hal->mp_chip = (hal->chip_version & BIT_RTL_ID) ? 0 : 1; > + printk("rtw88: %s:%d hal->chip_version=0x%x\n", > + __func__, __LINE__, hal->chip_version); > if (hal->chip_version & BIT_RF_TYPE_ID) { > hal->rf_type = RF_2T2R; > hal->rf_path_num = 2; > diff --git a/drivers/net/wireless/realtek/rtw88/sdio.c b/drivers/net/wireless/realtek/rtw88/sdio.c > index cc2d4fef3587..5c9e7c8cdd7e 100644 > --- a/drivers/net/wireless/realtek/rtw88/sdio.c > +++ b/drivers/net/wireless/realtek/rtw88/sdio.c > @@ -144,6 +144,10 @@ static u32 rtw_sdio_to_io_address(struct rtw_dev *rtwdev, u32 addr, > > static bool rtw_sdio_use_direct_io(struct rtw_dev *rtwdev, u32 addr) > { > + if (!rtw_sdio_is_bus_addr(addr) && > + !test_bit(RTW_FLAG_POWERON, rtwdev->flags)) > + return false; > + > return !rtw_sdio_is_sdio30_supported(rtwdev) || > rtw_sdio_is_bus_addr(addr); > } > With this change all works ok. 15 boots and all 15 were with nice wifi :-) dmesg from working system: https://termbin.com/09a1 ^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path' 2025-07-23 13:02 ` Piotr Oniszczuk @ 2025-07-24 0:52 ` Ping-Ke Shih 2025-07-24 7:55 ` Piotr Oniszczuk 0 siblings, 1 reply; 14+ messages in thread From: Ping-Ke Shih @ 2025-07-24 0:52 UTC (permalink / raw) To: Piotr Oniszczuk Cc: Bitterblue Smith, linux-wireless@vger.kernel.org, martin.blumenstingl@googlemail.com Piotr Oniszczuk <piotr.oniszczuk@gmail.com> wrote: > > Wiadomość napisana przez Ping-Ke Shih <pkshih@realtek.com> w dniu 23 lip 2025, o godz. 14:23: > > > > Thanks for the hints. I think it's worth to try: > > > > diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c > > index fa0ed39cb199..5ea13c775796 100644 > > --- a/drivers/net/wireless/realtek/rtw88/main.c > > +++ b/drivers/net/wireless/realtek/rtw88/main.c > > @@ -1861,6 +1861,8 @@ static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev) > > hal->chip_version = rtw_read32(rtwdev, REG_SYS_CFG1); > > hal->cut_version = BIT_GET_CHIP_VER(hal->chip_version); > > hal->mp_chip = (hal->chip_version & BIT_RTL_ID) ? 0 : 1; > > + printk("rtw88: %s:%d hal->chip_version=0x%x\n", > > + __func__, __LINE__, hal->chip_version); > > if (hal->chip_version & BIT_RF_TYPE_ID) { > > hal->rf_type = RF_2T2R; > > hal->rf_path_num = 2; > > diff --git a/drivers/net/wireless/realtek/rtw88/sdio.c b/drivers/net/wireless/realtek/rtw88/sdio.c > > index cc2d4fef3587..5c9e7c8cdd7e 100644 > > --- a/drivers/net/wireless/realtek/rtw88/sdio.c > > +++ b/drivers/net/wireless/realtek/rtw88/sdio.c > > @@ -144,6 +144,10 @@ static u32 rtw_sdio_to_io_address(struct rtw_dev *rtwdev, u32 addr, > > > > static bool rtw_sdio_use_direct_io(struct rtw_dev *rtwdev, u32 addr) > > { > > + if (!rtw_sdio_is_bus_addr(addr) && > > + !test_bit(RTW_FLAG_POWERON, rtwdev->flags)) > > + return false; > > + > > return !rtw_sdio_is_sdio30_supported(rtwdev) || > > rtw_sdio_is_bus_addr(addr); > > } > > > > With this change all works ok. > 15 boots and all 15 were with nice wifi :-) > > dmesg from working system: https://termbin.com/09a1 I sent a patch [1] with a change that check RTW_FLAG_POWERON flag first, so things will be the same as this final try. Still want you test the patch again, and give me a Tested-by tag there. Thanks. [1] https://lore.kernel.org/linux-wireless/20250724004815.7043-1-pkshih@realtek.com/T/#u ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path' 2025-07-24 0:52 ` Ping-Ke Shih @ 2025-07-24 7:55 ` Piotr Oniszczuk 2025-07-24 7:59 ` Ping-Ke Shih 0 siblings, 1 reply; 14+ messages in thread From: Piotr Oniszczuk @ 2025-07-24 7:55 UTC (permalink / raw) To: Ping-Ke Shih Cc: Bitterblue Smith, linux-wireless@vger.kernel.org, martin.blumenstingl@googlemail.com > Wiadomość napisana przez Ping-Ke Shih <pkshih@realtek.com> w dniu 24 lip 2025, o godz. 02:52: > > I sent a patch [1] with a change that check RTW_FLAG_POWERON flag first, > so things will be the same as this final try. Still want you test the patch > again, and give me a Tested-by tag there. Thanks. > > [1] https://lore.kernel.org/linux-wireless/20250724004815.7043-1-pkshih@realtek.com/T/#u > > I give test and with this patch issue disappear. thx for fixing this! pla add Tested-by: Piotr Oniszczuk <piotr.oniszczuk@gmail.com <mailto:piotr.oniszczuk@gmail.com>> ^ permalink raw reply [flat|nested] 14+ messages in thread
* RE: rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path' 2025-07-24 7:55 ` Piotr Oniszczuk @ 2025-07-24 7:59 ` Ping-Ke Shih 0 siblings, 0 replies; 14+ messages in thread From: Ping-Ke Shih @ 2025-07-24 7:59 UTC (permalink / raw) To: Piotr Oniszczuk Cc: Bitterblue Smith, linux-wireless@vger.kernel.org, martin.blumenstingl@googlemail.com Piotr Oniszczuk <piotr.oniszczuk@gmail.com> wrote: > > Wiadomość napisana przez Ping-Ke Shih <pkshih@realtek.com> w dniu 24 lip 2025, o godz. 02:52: > > > > I sent a patch [1] with a change that check RTW_FLAG_POWERON flag first, > > so things will be the same as this final try. Still want you test the patch > > again, and give me a Tested-by tag there. Thanks. > > > > [1] https://lore.kernel.org/linux-wireless/20250724004815.7043-1-pkshih@realtek.com/T/#u > > > > > > I give test and with this patch issue disappear. > thx for fixing this! > > pla add > > Tested-by: Piotr Oniszczuk <piotr.oniszczuk@gmail.com <mailto:piotr.oniszczuk@gmail.com>> Could you please add this tag to the patch? Then, your Tested-by will be added into commit message during getting merged. ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2025-07-24 8:00 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-07-22 13:29 rtl8822cs, mainline 6.16-rc7: kernel reports ' unsupported rf path' Piotr Oniszczuk 2025-07-23 0:52 ` Ping-Ke Shih 2025-07-23 7:34 ` Piotr Oniszczuk 2025-07-23 7:50 ` Ping-Ke Shih 2025-07-23 8:02 ` Piotr Oniszczuk 2025-07-23 8:19 ` Ping-Ke Shih 2025-07-23 8:46 ` Piotr Oniszczuk 2025-07-23 9:07 ` Ping-Ke Shih 2025-07-23 11:14 ` Bitterblue Smith 2025-07-23 12:23 ` Ping-Ke Shih 2025-07-23 13:02 ` Piotr Oniszczuk 2025-07-24 0:52 ` Ping-Ke Shih 2025-07-24 7:55 ` Piotr Oniszczuk 2025-07-24 7:59 ` Ping-Ke Shih
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox