From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 920A9C48BE8 for ; Mon, 24 Jun 2019 10:10:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6A70021473 for ; Mon, 24 Jun 2019 10:10:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1561371038; bh=waqXTwaY0VCyUvlzzqZ5JTTN5lmFWcixD7uBoIJW5wo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=olO2s5F4Y3mtZA9EWN2ZubyPIlezC+g9ypywhJHQy6bTTGyKC8ZX//ouqjrnuQXNv A700mze1vZ4wfFEDKYsNEqNbFJgReudmGrSIGn58RtAYEhwHXSj0WF2Wt8em2EEODy dzXLkthgkso1Arbjx33IVb7dFJ6LtTdshXerTUg8= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729878AbfFXKKd (ORCPT ); Mon, 24 Jun 2019 06:10:33 -0400 Received: from mail.kernel.org ([198.145.29.99]:40438 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729805AbfFXKHq (ORCPT ); Mon, 24 Jun 2019 06:07:46 -0400 Received: from localhost (f4.8f.5177.ip4.static.sl-reverse.com [119.81.143.244]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A3848205C9; Mon, 24 Jun 2019 10:07:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1561370865; bh=waqXTwaY0VCyUvlzzqZ5JTTN5lmFWcixD7uBoIJW5wo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=R1dmkRY1Su7IwMtOehX0cAD0OV9vBFNvDhEwGvZmuIe3XTXDH7f9kM5xYwIkrry2V N7posF6Gmuq0e2DuNyZqEl2N/2lF3JTr+8Q501vQJQdouNtarmYnzvnhrEwr+iw0jz niki+ov1LOuE95UEPomLivBgpu+34Vn4HMqdVNtw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Douglas Anderson , Adrian Hunter , Arend van Spriel , Kalle Valo , Ulf Hansson Subject: [PATCH 5.1 029/121] brcmfmac: sdio: Disable auto-tuning around commands expected to fail Date: Mon, 24 Jun 2019 17:56:01 +0800 Message-Id: <20190624092322.322523215@linuxfoundation.org> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190624092320.652599624@linuxfoundation.org> References: <20190624092320.652599624@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Douglas Anderson commit 2de0b42da263c97d330d276f5ccf7c4470e3324f upstream. There are certain cases, notably when transitioning between sleep and active state, when Broadcom SDIO WiFi cards will produce errors on the SDIO bus. This is evident from the source code where you can see that we try commands in a loop until we either get success or we've tried too many times. The comment in the code reinforces this by saying "just one write attempt may fail" Unfortunately these failures sometimes end up causing an "-EILSEQ" back to the core which triggers a retuning of the SDIO card and that blocks all traffic to the card until it's done. Let's disable retuning around the commands we expect might fail. Cc: stable@vger.kernel.org #v4.18+ Signed-off-by: Douglas Anderson Acked-by: Adrian Hunter Reviewed-by: Arend van Spriel Acked-by: Kalle Valo Signed-off-by: Ulf Hansson Signed-off-by: Greg Kroah-Hartman --- drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 4 ++++ 1 file changed, 4 insertions(+) --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c @@ -676,6 +676,8 @@ brcmf_sdio_kso_control(struct brcmf_sdio brcmf_dbg(TRACE, "Enter: on=%d\n", on); + sdio_retune_crc_disable(bus->sdiodev->func1); + wr_val = (on << SBSDIO_FUNC1_SLEEPCSR_KSO_SHIFT); /* 1st KSO write goes to AOS wake up core if device is asleep */ brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, wr_val, &err); @@ -736,6 +738,8 @@ brcmf_sdio_kso_control(struct brcmf_sdio if (try_cnt > MAX_KSO_ATTEMPTS) brcmf_err("max tries: rd_val=0x%x err=%d\n", rd_val, err); + sdio_retune_crc_enable(bus->sdiodev->func1); + return err; }