Disable deep power saving for USB and SDIO because rtw89_mac_send_rpwm() is called in atomic context and accessing hardware registers results in "scheduling while atomic" errors. Signed-off-by: Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx> Acked-by: Ping-Ke Shih <pkshih@xxxxxxxxxxx> --- v2: - Disable deep power saving for SDIO also. - Don't disable rtw89_ps_power_mode_change() for USB/SDIO. - Disable rtw89_mac_power_mode_change() for USB/SDIO. - Call rtw89_ps_power_mode_change_with_hci() only for PCI and call rtw89_mac_power_mode_change() for USB/SDIO. - Update the commit message. v3: - Disable deep ps from rtw89_update_ps_mode() because it's simpler. - Leave rtw89_ps_power_mode_change_with_hci() for later. - Update the commit message. v4: - Add Acked-by. --- drivers/net/wireless/realtek/rtw89/core.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/wireless/realtek/rtw89/core.c b/drivers/net/wireless/realtek/rtw89/core.c index 1f5639a5d166..fe6b19a078c5 100644 --- a/drivers/net/wireless/realtek/rtw89/core.c +++ b/drivers/net/wireless/realtek/rtw89/core.c @@ -2884,6 +2884,9 @@ static enum rtw89_ps_mode rtw89_update_ps_mode(struct rtw89_dev *rtwdev) { const struct rtw89_chip_info *chip = rtwdev->chip; + if (rtwdev->hci.type != RTW89_HCI_TYPE_PCIE) + return RTW89_PS_MODE_NONE; + if (rtw89_disable_ps_mode || !chip->ps_mode_supported || RTW89_CHK_FW_FEATURE(NO_DEEP_PS, &rtwdev->fw)) return RTW89_PS_MODE_NONE; -- 2.49.0