162 lines
7.0 KiB
Diff
162 lines
7.0 KiB
Diff
From patchwork Wed Jan 16 11:37:23 2019
|
|
Content-Type: text/plain; charset="utf-8"
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 7bit
|
|
X-Patchwork-Submitter: Ulf Hansson <ulf.hansson@linaro.org>
|
|
X-Patchwork-Id: 10765783
|
|
Return-Path: <linux-omap-owner@kernel.org>
|
|
Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org
|
|
[172.30.200.125])
|
|
by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 956256C2
|
|
for <patchwork-linux-omap@patchwork.kernel.org>;
|
|
Wed, 16 Jan 2019 11:37:39 +0000 (UTC)
|
|
Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1])
|
|
by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 860D62D08C
|
|
for <patchwork-linux-omap@patchwork.kernel.org>;
|
|
Wed, 16 Jan 2019 11:37:39 +0000 (UTC)
|
|
Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486)
|
|
id 7A4732DBF8; Wed, 16 Jan 2019 11:37:39 +0000 (UTC)
|
|
X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on
|
|
pdx-wl-mail.web.codeaurora.org
|
|
X-Spam-Level:
|
|
X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED,
|
|
DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI
|
|
autolearn=unavailable version=3.3.1
|
|
Received: from vger.kernel.org (vger.kernel.org [209.132.180.67])
|
|
by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 86DFA2D579
|
|
for <patchwork-linux-omap@patchwork.kernel.org>;
|
|
Wed, 16 Jan 2019 11:37:37 +0000 (UTC)
|
|
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
|
id S2389465AbfAPLhg (ORCPT
|
|
<rfc822;patchwork-linux-omap@patchwork.kernel.org>);
|
|
Wed, 16 Jan 2019 06:37:36 -0500
|
|
Received: from mail-lj1-f195.google.com ([209.85.208.195]:46058 "EHLO
|
|
mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
|
with ESMTP id S2389488AbfAPLhg (ORCPT
|
|
<rfc822;linux-omap@vger.kernel.org>); Wed, 16 Jan 2019 06:37:36 -0500
|
|
Received: by mail-lj1-f195.google.com with SMTP id s5-v6so5113775ljd.12
|
|
for <linux-omap@vger.kernel.org>;
|
|
Wed, 16 Jan 2019 03:37:34 -0800 (PST)
|
|
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
|
d=linaro.org; s=google;
|
|
h=from:to:cc:subject:date:message-id;
|
|
bh=G4uWfUBdfRWJ7ooa2ukqyMzWYVfm+tWSAZRULgvNQ08=;
|
|
b=DqdSNsfGTw5APfw140m3LimoqimPBt+dTkOxqu/2bQyXk7S9f23O7PxiN3oFynlZKr
|
|
SASxPUZ8sG4xbfOK9h8FHLlWWFpRIZSahu+mE0EseqtvBLV4sdCnBwOS8M3gko6ngb7C
|
|
i176BhDXn0+wm8tZGD3yN7Qp96KnQZ3Sv/tjk=
|
|
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
|
d=1e100.net; s=20161025;
|
|
h=x-gm-message-state:from:to:cc:subject:date:message-id;
|
|
bh=G4uWfUBdfRWJ7ooa2ukqyMzWYVfm+tWSAZRULgvNQ08=;
|
|
b=a7MooeHuGM0cTZPVwhtKcW1jg4pqdeIMk6f7/zUrRv+SoOb7Vnw9KEGP3KU5lDSMo5
|
|
fdJcqriPtpflqlW2b23HNJ2gVIYbySV3bmkiu2AKTwNWCFTkIS2ortWV4MES6WsAsR7G
|
|
SJBjNOxj2qAxl8qauqOq0X2TNOhKQXtXsfOZ+d5pkSB1+/BBEcxtWLRHwsnMQW5GjawC
|
|
DICSSEnG7V41Nz/GwJN/YMZ5mDDoTgm5E0w5FUpgIsWkaZ3EwXNfATg7MrYDRaaP8D+y
|
|
Bc3D5LBTeGf5Ka2znrkAwm5UNG0ACbfhyC051z0Pt/8c0dPIdccFOYiaQId02Kxg6z3K
|
|
O1Tw==
|
|
X-Gm-Message-State: AJcUukfOVkWnN7bzdpLCd5T4eBBp4b+eeSeNmP9oASomJxjWdmE2FFn/
|
|
FXErvZDhVCsQSfNn/eJnmK5Zq0rkuSY=
|
|
X-Google-Smtp-Source:
|
|
ALg8bN4GExvNSUhrn1ThdHo4TWGq9deM7EiNDhwBHUXk+6BhziaXs9EaV54O4+YG3vKLHV5hZLkJyg==
|
|
X-Received: by 2002:a2e:6503:: with SMTP id
|
|
z3-v6mr6194730ljb.153.1547638653812;
|
|
Wed, 16 Jan 2019 03:37:33 -0800 (PST)
|
|
Received: from localhost.localdomain (h-158-174-22-210.NA.cust.bahnhof.se.
|
|
[158.174.22.210])
|
|
by smtp.gmail.com with ESMTPSA id
|
|
f11sm1144237lfi.12.2019.01.16.03.37.32
|
|
(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
|
|
Wed, 16 Jan 2019 03:37:33 -0800 (PST)
|
|
From: Ulf Hansson <ulf.hansson@linaro.org>
|
|
To: Kalle Valo <kvalo@codeaurora.org>,
|
|
Tony Lindgren <tony@atomide.com>, Eyal Reizer <eyalr@ti.com>,
|
|
linux-wireless@vger.kernel.org
|
|
Cc: Ricardo Salveti <rsalveti@rsalveti.net>,
|
|
Kishon Vijay Abraham I <kishon@ti.com>,
|
|
Anders Roxell <anders.roxell@linaro.org>,
|
|
John Stultz <john.stultz@linaro.org>,
|
|
Jan Kiszka <jan.kiszka@web.de>,
|
|
Ulf Hansson <ulf.hansson@linaro.org>,
|
|
linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org
|
|
Subject: [PATCH V2] wlcore: sdio: Fixup power on/off sequence
|
|
Date: Wed, 16 Jan 2019 12:37:23 +0100
|
|
Message-Id: <20190116113723.15668-1-ulf.hansson@linaro.org>
|
|
X-Mailer: git-send-email 2.17.1
|
|
Sender: linux-omap-owner@vger.kernel.org
|
|
Precedence: bulk
|
|
List-ID: <linux-omap.vger.kernel.org>
|
|
X-Mailing-List: linux-omap@vger.kernel.org
|
|
X-Virus-Scanned: ClamAV using ClamSMTP
|
|
|
|
During "wlan-up", we are programming the FW into the WiFi-chip. However,
|
|
re-programming the FW doesn't work, unless a power cycle of the WiFi-chip
|
|
is made in-between the programmings.
|
|
|
|
To conform to this requirement and to fix the regression in a simple way,
|
|
let's start by allowing that the SDIO card (WiFi-chip) may stay powered on
|
|
(runtime resumed) when wl12xx_sdio_power_off() returns. The intent with the
|
|
current code is to treat this scenario as an error, but unfortunate this
|
|
doesn't work as expected, so let's fix this.
|
|
|
|
The other part is to guarantee that a power cycle of the SDIO card has been
|
|
completed when wl12xx_sdio_power_on() returns, as to allow the FW
|
|
programming to succeed. However, relying solely on runtime PM to deal with
|
|
this isn't sufficient. For example, userspace may prevent runtime suspend
|
|
via sysfs for the device that represents the SDIO card, leading to that the
|
|
mmc core also keeps it powered on. For this reason, let's instead do a
|
|
brute force power cycle in wl12xx_sdio_power_on().
|
|
|
|
Fixes: 728a9dc61f13 ("wlcore: sdio: Fix flakey SDIO runtime PM handling")
|
|
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
|
|
Tested-by: Tony Lindgren <tony@atomide.com>
|
|
Tested-by: Anders Roxell <anders.roxell@linaro.org>
|
|
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
|
|
---
|
|
|
|
Changes in v2:
|
|
- Keep the SDIO host claimed when calling mmc_hw_reset().
|
|
- Add a fixes tag.
|
|
---
|
|
drivers/net/wireless/ti/wlcore/sdio.c | 15 +++++++--------
|
|
1 file changed, 7 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/drivers/net/wireless/ti/wlcore/sdio.c b/drivers/net/wireless/ti/wlcore/sdio.c
|
|
index bd10165d7eec..4d4b07701149 100644
|
|
--- a/drivers/net/wireless/ti/wlcore/sdio.c
|
|
+++ b/drivers/net/wireless/ti/wlcore/sdio.c
|
|
@@ -164,6 +164,12 @@ static int wl12xx_sdio_power_on(struct wl12xx_sdio_glue *glue)
|
|
}
|
|
|
|
sdio_claim_host(func);
|
|
+ /*
|
|
+ * To guarantee that the SDIO card is power cycled, as required to make
|
|
+ * the FW programming to succeed, let's do a brute force HW reset.
|
|
+ */
|
|
+ mmc_hw_reset(card->host);
|
|
+
|
|
sdio_enable_func(func);
|
|
sdio_release_host(func);
|
|
|
|
@@ -174,20 +180,13 @@ static int wl12xx_sdio_power_off(struct wl12xx_sdio_glue *glue)
|
|
{
|
|
struct sdio_func *func = dev_to_sdio_func(glue->dev);
|
|
struct mmc_card *card = func->card;
|
|
- int error;
|
|
|
|
sdio_claim_host(func);
|
|
sdio_disable_func(func);
|
|
sdio_release_host(func);
|
|
|
|
/* Let runtime PM know the card is powered off */
|
|
- error = pm_runtime_put(&card->dev);
|
|
- if (error < 0 && error != -EBUSY) {
|
|
- dev_err(&card->dev, "%s failed: %i\n", __func__, error);
|
|
-
|
|
- return error;
|
|
- }
|
|
-
|
|
+ pm_runtime_put(&card->dev);
|
|
return 0;
|
|
}
|
|
|