From patchwork Fri Jan 4 12:48:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bernd Edlinger X-Patchwork-Id: 1020722 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=hotmail.de Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43WPkG5MHLz9rxp for ; Fri, 4 Jan 2019 23:49:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727521AbfADMss (ORCPT ); Fri, 4 Jan 2019 07:48:48 -0500 Received: from mail-oln040092068052.outbound.protection.outlook.com ([40.92.68.52]:21312 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725913AbfADMsm (ORCPT ); Fri, 4 Jan 2019 07:48:42 -0500 Received: from HE1EUR02FT009.eop-EUR02.prod.protection.outlook.com (10.152.10.58) by HE1EUR02HT015.eop-EUR02.prod.protection.outlook.com (10.152.11.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1471.13; Fri, 4 Jan 2019 12:48:38 +0000 Received: from DB7PR07MB5353.eurprd07.prod.outlook.com (10.152.10.52) by HE1EUR02FT009.mail.protection.outlook.com (10.152.10.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.1471.13 via Frontend Transport; Fri, 4 Jan 2019 12:48:38 +0000 Received: from DB7PR07MB5353.eurprd07.prod.outlook.com ([fe80::e1f9:8635:f629:eb8e]) by DB7PR07MB5353.eurprd07.prod.outlook.com ([fe80::e1f9:8635:f629:eb8e%4]) with mapi id 15.20.1516.000; Fri, 4 Jan 2019 12:48:38 +0000 From: Bernd Edlinger To: Ping-Ke Shih , Larry Finger , Kalle Valo , "David S. Miller" , "linux-wireless@vger.kernel.org" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH 1/4] rtlwifi: rtl8723ae: Take the FW LPS mode handling out Thread-Topic: [PATCH 1/4] rtlwifi: rtl8723ae: Take the FW LPS mode handling out Thread-Index: AQHUpCvPwWPgT51ue0O3JoR8mq9joA== Date: Fri, 4 Jan 2019 12:48:37 +0000 Message-ID: Accept-Language: en-US, en-GB, de-DE Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM5PR0201CA0020.eurprd02.prod.outlook.com (2603:10a6:203:3d::30) To DB7PR07MB5353.eurprd07.prod.outlook.com (2603:10a6:10:6e::26) x-incomingtopheadermarker: OriginalChecksum:F65FC2DAA506C115788BAEECCEC77591E925FE15A1629708F727F7657872AB07; UpperCasedChecksum:6CB205A53DBE57A6ED15B3EC2F98DF376A124A034472A3B43612C0698AE06942; SizeAsReceived:8763; Count:62 x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [IFcncr/GriuuOUBiY3vPDgAtXCDBdt+G] x-microsoft-original-message-id: <58a45880-a96c-70c0-0d6d-e0e9c39537b9@hotmail.de> x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; HE1EUR02HT015; 6:ZlOAQ34PDsn6Z5iaT6QMy7wfGCPFg0kSfHLpZObtxPUseY0pY7OgSMgJjdAJLb3+9+z/x+uzBtY4PAkBxs6hcRSBNndfq3AR7tQwsLxCFdKCIDSw+yiue9SWGdfkTlPTsa2jq5gGwJPsjT/Tibt9PTv3h1uujZNwixP9yKZot7XurbiaD1O+NbPcTvIwbuVZp+zd2N97jGr3caeVS1z97+DYUODxoJTW9QPAlSEe3KpCMahbh+Or0BSlrAVlRh9nabP3XuiwH0RC4R4W5zLk611050MJDSusPl7IixESyRtGiBvkcbfVs8fmjiN1CG2jyzp04zC1vQmU8zP488bvihfQmWTMdz/yRVJQdzi74A2MLsUkdzOxzcJHv2RfQ4wCnn2xM7pajJUpBeqS2qxIb2uAqGMwZjMm4ceeWjual2GxAvr5zSAU49WoQJ9GZDpySwSFHi31waphlc2DUMd/WA==; 5:dKm8WrNaP5NPGx8th6bSgpqYlM+HztSUSv9a6/xYcYqosL3yFMkmQSr+wf09gbjAuPEPBnMFdNkKS04ZDDSMdRnBpkV8IkRi9LnxxLYNnhPdvJSNT8r4GrnhWR8nuhodVG8kGiqWVOe9wb3zZh5/nT04deooZOP+owqSp7J3Ap8=; 7:CwyfP2Q65stLMMfFfhAQt7FRCOwRHte6ixJWpDy5XUangQ0RYnw5wmsLNJm7Du32S2PzT+RqU0HqZx3SBP0IxRWYf7KTsYHjzpAMSXBIdGjV3Dt3hgxMNzAQfYWLSMxvTkiWuKsja9Y7HOH68KDLwg== x-incomingheadercount: 62 x-eopattributedmessage: 0 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(201702061078)(5061506573)(5061507331)(1603103135)(2017031320274)(2017031323274)(2017031324274)(2017031322404)(1601125500)(1603101475)(1701031045); SRVR:HE1EUR02HT015; x-ms-traffictypediagnostic: HE1EUR02HT015: x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(4566010)(82015058); SRVR:HE1EUR02HT015; BCL:0; PCL:0; RULEID:; SRVR:HE1EUR02HT015; x-microsoft-antispam-message-info: 1RYPzCw1hR8v9O2KdiXMVgrDhAX2pooCFOEzWc3KmlUoLqG7r6Aq7ZPSDb0lJzTy Content-ID: <77BCC8A5BDCDEF44A6C9237DF78B5080@eurprd07.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: d4d70346-2c10-4f39-8c00-e767963926d9 X-MS-Exchange-CrossTenant-Network-Message-Id: 4d28e800-430a-4a4e-4e42-08d67242f23d X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: d4d70346-2c10-4f39-8c00-e767963926d9 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Jan 2019 12:48:37.1859 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1EUR02HT015 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This appears to trigger a firmware bug and causes severe problems with rtl8723ae PCI devices. When the power save mode is activated for longer periods of time the firmware stops to receive any packets. This problem was exposed by commit 873ffe154ae0 ("rtlwifi: Fix logic error in enter/exit power-save mode"). Previously the power save mode was only active rarely and only for a short time so that the problem was not noticeable. Signed-off-by: Bernd Edlinger --- .../net/wireless/realtek/rtlwifi/rtl8723ae/fw.c | 20 -------- .../net/wireless/realtek/rtlwifi/rtl8723ae/fw.h | 1 - .../net/wireless/realtek/rtlwifi/rtl8723ae/hw.c | 56 +--------------------- 3 files changed, 1 insertion(+), 76 deletions(-) diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/fw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/fw.c index bf9859f..77833fb 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/fw.c +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/fw.c @@ -268,26 +268,6 @@ void rtl8723e_fill_h2c_cmd(struct ieee80211_hw *hw, (u8 *)&tmp_cmdbuf); } -void rtl8723e_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode) -{ - struct rtl_priv *rtlpriv = rtl_priv(hw); - u8 u1_h2c_set_pwrmode[3] = { 0 }; - struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); - - RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, "FW LPS mode = %d\n", mode); - - SET_H2CCMD_PWRMODE_PARM_MODE(u1_h2c_set_pwrmode, mode); - SET_H2CCMD_PWRMODE_PARM_SMART_PS(u1_h2c_set_pwrmode, - (rtlpriv->mac80211.p2p) ? ppsc->smart_ps : 1); - SET_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(u1_h2c_set_pwrmode, - ppsc->reg_max_lps_awakeintvl); - - RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, - "rtl8723e_set_fw_rsvdpagepkt(): u1_h2c_set_pwrmode\n", - u1_h2c_set_pwrmode, 3); - rtl8723e_fill_h2c_cmd(hw, H2C_SETPWRMODE, 3, u1_h2c_set_pwrmode); -} - #define BEACON_PG 0 /* ->1 */ #define PSPOLL_PG 2 #define NULL_PG 3 diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/fw.h b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/fw.h index 2e668fc..8618b82 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/fw.h +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/fw.h @@ -55,7 +55,6 @@ void rtl8723e_fill_h2c_cmd(struct ieee80211_hw *hw, u8 element_id, u32 cmd_len, u8 *p_cmdbuffer); -void rtl8723e_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode); void rtl8723e_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished); void rtl8723e_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus); void rtl8723e_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state); diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c index f783e4a..f0eb356 100644 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c @@ -408,29 +408,7 @@ void rtl8723e_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val) case HW_VAR_WPA_CONFIG: rtl_write_byte(rtlpriv, REG_SECCFG, *((u8 *)val)); break; - case HW_VAR_SET_RPWM:{ - u8 rpwm_val; - - rpwm_val = rtl_read_byte(rtlpriv, REG_PCIE_HRPWM); - udelay(1); - - if (rpwm_val & BIT(7)) { - rtl_write_byte(rtlpriv, REG_PCIE_HRPWM, - (*(u8 *)val)); - } else { - rtl_write_byte(rtlpriv, REG_PCIE_HRPWM, - ((*(u8 *)val) | BIT(7))); - } - - break; - } case HW_VAR_H2C_FW_PWRMODE:{ - u8 psmode = (*(u8 *)val); - - if (psmode != FW_PS_ACTIVE_MODE) - rtl8723e_dm_rf_saving(hw, true); - - rtl8723e_set_fw_pwrmode_cmd(hw, (*(u8 *)val)); break; } case HW_VAR_FW_PSMODE_STATUS: @@ -513,39 +491,7 @@ void rtl8723e_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val) break; } case HW_VAR_FW_LPS_ACTION:{ - bool b_enter_fwlps = *((bool *)val); - u8 rpwm_val, fw_pwrmode; - bool fw_current_inps; - - if (b_enter_fwlps) { - rpwm_val = 0x02; /* RF off */ - fw_current_inps = true; - rtlpriv->cfg->ops->set_hw_reg(hw, - HW_VAR_FW_PSMODE_STATUS, - (u8 *)(&fw_current_inps)); - rtlpriv->cfg->ops->set_hw_reg(hw, - HW_VAR_H2C_FW_PWRMODE, - (u8 *)(&ppsc->fwctrl_psmode)); - - rtlpriv->cfg->ops->set_hw_reg(hw, - HW_VAR_SET_RPWM, - (u8 *)(&rpwm_val)); - } else { - rpwm_val = 0x0C; /* RF on */ - fw_pwrmode = FW_PS_ACTIVE_MODE; - fw_current_inps = false; - rtlpriv->cfg->ops->set_hw_reg(hw, - HW_VAR_SET_RPWM, - (u8 *)(&rpwm_val)); - rtlpriv->cfg->ops->set_hw_reg(hw, - HW_VAR_H2C_FW_PWRMODE, - (u8 *)(&fw_pwrmode)); - - rtlpriv->cfg->ops->set_hw_reg(hw, - HW_VAR_FW_PSMODE_STATUS, - (u8 *)(&fw_current_inps)); - } - break; + break; } default: RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,