Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp412471pxb; Wed, 24 Feb 2021 05:43:59 -0800 (PST) X-Google-Smtp-Source: ABdhPJx0TTXh1prFtqTcqJ3wCIWjot/+I2IHaPsr1t49P4KPik17UPODPhvm1xRVNR8FBDdvTlbP X-Received: by 2002:a05:6402:2d0:: with SMTP id b16mr145836edx.194.1614174238841; Wed, 24 Feb 2021 05:43:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614174238; cv=none; d=google.com; s=arc-20160816; b=sDvxQNhujABF4Yk4NKP+TAbgqz4GMblNEzE30NOcSYuXdV0CguyLeQgaADIdmGytxE 2lCPGHKM59YisqtBmOURJripOTV3qOYPGXdR1YIpIRmAeOlGO0Oej9g9f9iJtpJ1K0vG WQ4ERtnzCXt/U6TodGMB2mCOR1kWUZZ3APxt63uCkW9URkJngBUilBmO6ZuesyF3KjWJ RDN3e0AAd0ylUHhiQZekWlsYYfI+jRCXbuWHs6voSBz6QkcXIoOaK3bkydqrH1oqKNiw ZnQvGLmyPAjYaae+6OYTNlIs4ujF2nwSm/zTuAODIQlpMapjvDtSMojXvbXK8on6CeNl 2hXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=53s+0H2Aj63l20hc02ChV1giIptNb1Zv2VJzaKHwv3E=; b=N2bd1GCClelnYagBKujZR4NoKx5CsczJbrseFPkmKCzoRF6hubSPLqbeR3COpaeK7u nEuslwmN9y7qHNlSlGZr23nE3Pp6atifB9n6r76zd5j78yROdYQpdk0IYt7zbQFSn66G 19zRGEw8WkjnbNpPaZrX/8mxvS8P8237dgshAPvLyWBoCj7jX4OiJqmkNZpL+TYTUM77 wAJRteTFGFk/rfJpO4FhHXX/htXOyVIRa0oM1c8NG/rdqwOk/Z6KRDN5Rkqf3eK4Xhhd lLIjIH0vmGRSFi+Jypowg9UlM24lyH/Kpvbck3YloE5JbgXcUfEkeivg4LrIxv5fof3P De3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=H6h5QQgG; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id s17si1310360eja.463.2021.02.24.05.43.35; Wed, 24 Feb 2021 05:43:58 -0800 (PST) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=H6h5QQgG; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237521AbhBXNl2 (ORCPT + 99 others); Wed, 24 Feb 2021 08:41:28 -0500 Received: from mail.kernel.org ([198.145.29.99]:59886 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236147AbhBXNOO (ORCPT ); Wed, 24 Feb 2021 08:14:14 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id B273364FB6; Wed, 24 Feb 2021 12:56:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1614171365; bh=of0eepdm9+FrDbYkKna2bsliE9Iew0nBgP0xTP6hu1o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=H6h5QQgG5W3mJ2A2KLJGoOm7ggfLa7D31xOHbHsbRFO7WDdgMMPrx0GwvuRxY9VJn 146MOu5KP+Wgb9EbaFJCRoixXyhbLsZjF+/Ji4R3ORlpoernBnmspKJETTuB9Rl/IL VZbR9f3dkRGojxpeFyIZ8PrMouCzDfYc6gNI51a9R2M4fJ8FKzMBSky0vwawRAhU9U dMHYuQXnf4/6jKKXCax/wya8TGl0lJjWWx5w1DTg4O+qE5qhWzn0KVnpaO/cRLHbwf 9i1wCZV5yq+IslxcxfCpqZyKVPwW/6ksqmm8lTt47yMco5SGg5qrPKsUomatLpqbhN QcZtr/I72B3/w== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Tony Lindgren , Raz Bouganim , Kalle Valo , Sasha Levin , linux-wireless@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH AUTOSEL 4.4 04/11] wlcore: Fix command execute failure 19 for wl12xx Date: Wed, 24 Feb 2021 07:55:52 -0500 Message-Id: <20210224125600.484437-4-sashal@kernel.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210224125600.484437-1-sashal@kernel.org> References: <20210224125600.484437-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Tony Lindgren [ Upstream commit cb88d01b67383a095e3f7caeb4cdade5a6cf0417 ] We can currently get a "command execute failure 19" error on beacon loss if the signal is weak: wlcore: Beacon loss detected. roles:0xff wlcore: Connection loss work (role_id: 0). ... wlcore: ERROR command execute failure 19 ... WARNING: CPU: 0 PID: 1552 at drivers/net/wireless/ti/wlcore/main.c:803 ... (wl12xx_queue_recovery_work.part.0 [wlcore]) (wl12xx_cmd_role_start_sta [wlcore]) (wl1271_op_bss_info_changed [wlcore]) (ieee80211_prep_connection [mac80211]) Error 19 is defined as CMD_STATUS_WRONG_NESTING from the wlcore firmware, and seems to mean that the firmware no longer wants to see the quirk handling for WLCORE_QUIRK_START_STA_FAILS done. This quirk got added with commit 18eab430700d ("wlcore: workaround start_sta problem in wl12xx fw"), and it seems that this already got fixed in the firmware long time ago back in 2012 as wl18xx never had this quirk in place to start with. As we no longer even support firmware that early, to me it seems that it's safe to just drop WLCORE_QUIRK_START_STA_FAILS to fix the error. Looks like earlier firmware got disabled back in 2013 with commit 0e284c074ef9 ("wl12xx: increase minimum singlerole firmware version required"). If it turns out we still need WLCORE_QUIRK_START_STA_FAILS with any firmware that the driver works with, we can simply revert this patch and add extra checks for firmware version used. With this fix wlcore reconnects properly after a beacon loss. Cc: Raz Bouganim Signed-off-by: Tony Lindgren Signed-off-by: Kalle Valo Link: https://lore.kernel.org/r/20210115065613.7731-1-tony@atomide.com Signed-off-by: Sasha Levin --- drivers/net/wireless/ti/wl12xx/main.c | 3 --- drivers/net/wireless/ti/wlcore/main.c | 15 +-------------- drivers/net/wireless/ti/wlcore/wlcore.h | 3 --- 3 files changed, 1 insertion(+), 20 deletions(-) diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c index af0fe2e171510..e4b28d37046aa 100644 --- a/drivers/net/wireless/ti/wl12xx/main.c +++ b/drivers/net/wireless/ti/wl12xx/main.c @@ -647,7 +647,6 @@ static int wl12xx_identify_chip(struct wl1271 *wl) wl->quirks |= WLCORE_QUIRK_LEGACY_NVS | WLCORE_QUIRK_DUAL_PROBE_TMPL | WLCORE_QUIRK_TKIP_HEADER_SPACE | - WLCORE_QUIRK_START_STA_FAILS | WLCORE_QUIRK_AP_ZERO_SESSION_ID; wl->sr_fw_name = WL127X_FW_NAME_SINGLE; wl->mr_fw_name = WL127X_FW_NAME_MULTI; @@ -671,7 +670,6 @@ static int wl12xx_identify_chip(struct wl1271 *wl) wl->quirks |= WLCORE_QUIRK_LEGACY_NVS | WLCORE_QUIRK_DUAL_PROBE_TMPL | WLCORE_QUIRK_TKIP_HEADER_SPACE | - WLCORE_QUIRK_START_STA_FAILS | WLCORE_QUIRK_AP_ZERO_SESSION_ID; wl->plt_fw_name = WL127X_PLT_FW_NAME; wl->sr_fw_name = WL127X_FW_NAME_SINGLE; @@ -700,7 +698,6 @@ static int wl12xx_identify_chip(struct wl1271 *wl) wl->quirks |= WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN | WLCORE_QUIRK_DUAL_PROBE_TMPL | WLCORE_QUIRK_TKIP_HEADER_SPACE | - WLCORE_QUIRK_START_STA_FAILS | WLCORE_QUIRK_AP_ZERO_SESSION_ID; wlcore_set_min_fw_ver(wl, WL128X_CHIP_VER, diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c index cc10b72607c69..3f61289ce036e 100644 --- a/drivers/net/wireless/ti/wlcore/main.c +++ b/drivers/net/wireless/ti/wlcore/main.c @@ -2889,21 +2889,8 @@ static int wlcore_join(struct wl1271 *wl, struct wl12xx_vif *wlvif) if (is_ibss) ret = wl12xx_cmd_role_start_ibss(wl, wlvif); - else { - if (wl->quirks & WLCORE_QUIRK_START_STA_FAILS) { - /* - * TODO: this is an ugly workaround for wl12xx fw - * bug - we are not able to tx/rx after the first - * start_sta, so make dummy start+stop calls, - * and then call start_sta again. - * this should be fixed in the fw. - */ - wl12xx_cmd_role_start_sta(wl, wlvif); - wl12xx_cmd_role_stop_sta(wl, wlvif); - } - + else ret = wl12xx_cmd_role_start_sta(wl, wlvif); - } return ret; } diff --git a/drivers/net/wireless/ti/wlcore/wlcore.h b/drivers/net/wireless/ti/wlcore/wlcore.h index 906be6aa4eb6f..a0647d4384d2b 100644 --- a/drivers/net/wireless/ti/wlcore/wlcore.h +++ b/drivers/net/wireless/ti/wlcore/wlcore.h @@ -556,9 +556,6 @@ wlcore_set_min_fw_ver(struct wl1271 *wl, unsigned int chip, /* Each RX/TX transaction requires an end-of-transaction transfer */ #define WLCORE_QUIRK_END_OF_TRANSACTION BIT(0) -/* the first start_role(sta) sometimes doesn't work on wl12xx */ -#define WLCORE_QUIRK_START_STA_FAILS BIT(1) - /* wl127x and SPI don't support SDIO block size alignment */ #define WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN BIT(2) -- 2.27.0