rtw8822b_set_antenna() can be called from userspace when the chip is powered off. In that case a WARNING is triggered in rtw8822b_config_trx_mode() because trying to read the RF registers when the chip is powered off returns an unexpected value. Call rtw8822b_config_trx_mode() in rtw8822b_set_antenna() only when the chip is powered on. ------------[ cut here ]------------ write RF mode table fail WARNING: CPU: 0 PID: 7183 at rtw8822b.c:824 rtw8822b_config_trx_mode.constprop.0+0x835/0x840 [rtw88_8822b] Modules linked in: rtw88_8723du(OE) rtw88_8821cu(OE) rtw88_8822bu(OE) rtw88_8822cu(OE) rtw88_8821au(OE) rtw88_8812au(OE) rtw88_8814au(OE) rtw88_8723d(OE) rtw88_8821c(OE) rtw88_8822b(OE) rtw88_8822c(OE) rtw88_8821a(OE) rtw88_8812a(OE) rtw88_8814a(OE) rtw88_88xxa(OE) rtw88_8723x(OE) rtw88_usb(OE) rtw88_core(OE) uinput ccm rtl8xxxu(OE) mac80211 libarc4 cfg80211 rfcomm snd_seq_dummy snd_hrtimer snd_seq snd_seq_device cmac algif_hash algif_skcipher af_alg bnep snd_sof_amd_acp70 snd_sof_amd_acp63 snd_sof_amd_vangogh snd_sof_amd_rembrandt snd_sof_amd_renoir snd_sof_amd_acp snd_sof_pci snd_sof_xtensa_dsp snd_sof snd_sof_utils snd_pci_ps snd_soc_acpi_amd_match snd_amd_sdw_acpi intel_rapl_msr soundwire_amd amd_atl uvcvideo soundwire_generic_allocation intel_rapl_common videobuf2_vmalloc soundwire_bus joydev snd_soc_sdca snd_ctl_led uvc snd_hda_codec_alc269 vfat fat snd_hda_scodec_component mousedev snd_hda_codec_atihdmi snd_hda_codec_realtek_lib btusb btrtl snd_soc_core snd_hda_codec_generic videobuf2_memops kvm_amd btintel snd_compress snd_hda_codec_hdmi ac97_bus btbcm videobuf2_v4l2 polyval_clmulni btmtk snd_pcm_dmaengine snd_hda_intel videobuf2_common snd_rpl_pci_acp6x snd_hda_codec ghash_clmulni_intel snd_acp_pci ee1004 hid_multitouch snd_amd_acpi_mach videodev aesni_intel bluetooth snd_acp_legacy_common mc snd_hda_core snd_pci_acp6x rapl snd_pci_acp5x snd_intel_dspcfg snd_intel_sdw_acpi snd_rn_pci_acp3x snd_hwdep wmi_bmof lenovo_wmi_hotkey_utilities sp5100_tco snd_acp_config snd_pcm acpi_cpufreq ideapad_laptop snd_timer i2c_piix4 snd_soc_acpi snd platform_profile k10temp sparse_keymap i2c_smbus ccp soundcore snd_pci_acp3x rfkill i2c_hid_acpi i2c_hid mac_hid vboxnetflt(OE) vboxnetadp(OE) vboxdrv(OE) kvm irqbypass i2c_dev crypto_user ntsync loop dm_mod nfnetlink ip_tables x_tables amdgpu amdxcp i2c_algo_bit drm_ttm_helper ttm drm_exec nvme gpu_sched serio_raw drm_suballoc_helper sdhci_acpi nvme_core drm_panel_backlight_quirks sdhci drm_buddy drm_display_helper video nvme_keyring mmc_core cec nvme_auth wmi Unloaded tainted modules: rtw88_core(OE):1 rtw88_usb(OE):1 rtw88_88xxa(OE):1 rtw88_8723x(OE):1 rtw88_8723d(OE):1 rtw88_8821c(OE):1 rtw88_8822b(OE):1 rtw88_8822c(OE):1 rtw88_8821a(OE):1 rtw88_8812a(OE):1 rtw88_8814a(OE):1 rtw88_8723du(OE):1 rtw88_8821cu(OE):1 rtw88_8822bu(OE):1 rtw88_8822cu(OE):1 rtw88_8821au(OE):1 rtw88_8812au(OE):1 rtw88_8814au(OE):1 [last unloaded: rtw88_core(OE)] CPU: 0 UID: 0 PID: 7183 Comm: iw Tainted: G W OE 6.17.5-arch1-1 #1 PREEMPT(full) 01c39fc421df2af799dd5e9180b572af860b40c1 Tainted: [W]=WARN, [O]=OOT_MODULE, [E]=UNSIGNED_MODULE Hardware name: LENOVO 82KR/LNVNB161216, BIOS HBCN18WW 08/27/2021 RIP: 0010:rtw8822b_config_trx_mode.constprop.0+0x835/0x840 [rtw88_8822b] Code: 28 0d 60 c2 e8 2c a6 b8 c1 0f 0b 48 83 c4 08 5b 5d 41 5c 41 5d 41 5e 41 5f c3 cc cc cc cc 48 c7 c7 76 0c 60 c2 e8 0b a6 b8 c1 <0f> 0b eb dd 0f 1f 80 00 00 00 00 90 90 90 90 90 90 90 90 90 90 90 RSP: 0018:ffffd082166d76a8 EFLAGS: 00010246 RAX: 0000000000000000 RBX: ffff890b2ee72020 RCX: 0000000000000027 RDX: ffff890b8ec1cfc8 RSI: 0000000000000001 RDI: ffff890b8ec1cfc0 RBP: 0000000000000000 R08: 0000000000000000 R09: 00000000fff7ffff R10: ffffffff8699d880 R11: ffffd082166d7540 R12: 0000000000000003 R13: 0000000000000003 R14: 0000000000000002 R15: 0000000000000033 FS: 00007efc327b4e80(0000) GS:ffff890c08306000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 000056308da1b720 CR3: 0000000284c25000 CR4: 00000000003506f0 Call Trace: rtw8822b_set_antenna+0x57/0x70 [rtw88_8822b 370206f42e5890d8d5f48eb358b759efa37c422b] rtw_ops_set_antenna+0x50/0x80 [rtw88_core 711c8fb4f686162be4625b1d0b8e8c6a5ac850fb] ieee80211_set_antenna+0x60/0x100 [mac80211 f1845d85d2ecacf3b71867635a050ece90486cf3] nl80211_set_wiphy+0x384/0xe00 [cfg80211 296485ee85696d2150309a6d21a7fbca83d3dbda] ? netdev_run_todo+0x63/0x550 genl_family_rcv_msg_doit+0xfc/0x160 genl_rcv_msg+0x1aa/0x2b0 ? __pfx_nl80211_pre_doit+0x10/0x10 [cfg80211 296485ee85696d2150309a6d21a7fbca83d3dbda] ? __pfx_nl80211_set_wiphy+0x10/0x10 [cfg80211 296485ee85696d2150309a6d21a7fbca83d3dbda] ? __pfx_nl80211_post_doit+0x10/0x10 [cfg80211 296485ee85696d2150309a6d21a7fbca83d3dbda] ? __pfx_genl_rcv_msg+0x10/0x10 netlink_rcv_skb+0x59/0x110 genl_rcv+0x28/0x40 netlink_unicast+0x285/0x3c0 ? __alloc_skb+0xdb/0x1a0 netlink_sendmsg+0x20d/0x430 ____sys_sendmsg+0x39f/0x3d0 ? import_iovec+0x2f/0x40 ___sys_sendmsg+0x99/0xe0 ? refill_obj_stock+0x12e/0x240 __sys_sendmsg+0x8a/0xf0 do_syscall_64+0x81/0x970 ? do_syscall_64+0x81/0x970 ? ksys_read+0x73/0xf0 ? do_syscall_64+0x81/0x970 ? count_memcg_events+0xc2/0x190 ? handle_mm_fault+0x1d7/0x2d0 ? do_user_addr_fault+0x21a/0x690 ? exc_page_fault+0x7e/0x1a0 entry_SYSCALL_64_after_hwframe+0x76/0x7e RIP: 0033:0x7efc324931ce Code: 4d 89 d8 e8 64 be 00 00 4c 8b 5d f8 41 8b 93 08 03 00 00 59 5e 48 83 f8 fc 74 11 c9 c3 0f 1f 80 00 00 00 00 48 8b 45 10 0f 05 c3 83 e2 39 83 fa 08 75 e7 e8 13 ff ff ff 0f 1f 00 f3 0f 1e fa RSP: 002b:00007ffd1d10c000 EFLAGS: 00000202 ORIG_RAX: 000000000000002e RAX: ffffffffffffffda RBX: 00005630bd1ee400 RCX: 00007efc324931ce RDX: 0000000000000000 RSI: 00007ffd1d10c090 RDI: 0000000000000003 RBP: 00007ffd1d10c010 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000202 R12: 00005630bd1ee4d0 R13: 00005630bd1f3680 R14: 00007ffd1d10c090 R15: 0000000000000001 ---[ end trace 0000000000000000 ]--- Link: https://github.com/lwfinger/rtw88/issues/366 Signed-off-by: Bitterblue Smith --- drivers/net/wireless/realtek/rtw88/rtw8822b.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.c b/drivers/net/wireless/realtek/rtw88/rtw8822b.c index 89b6485b229a..4d88cc2f4148 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c @@ -1005,7 +1005,8 @@ static int rtw8822b_set_antenna(struct rtw_dev *rtwdev, hal->antenna_tx = antenna_tx; hal->antenna_rx = antenna_rx; - rtw8822b_config_trx_mode(rtwdev, antenna_tx, antenna_rx, false); + if (test_bit(RTW_FLAG_POWERON, rtwdev->flags)) + rtw8822b_config_trx_mode(rtwdev, antenna_tx, antenna_rx, false); return 0; } -- 2.51.1