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 X-Patchwork-Id: 155707 Delivered-To: patch@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp547020jaa; Wed, 16 Jan 2019 03:37:37 -0800 (PST) X-Google-Smtp-Source: ALg8bN4dK2mggWjSBmaS0UaUByXt1BfxH24g9xkJx5cU4DCpfvarsvL3oMPW2ncgFlewp796rEbE X-Received: by 2002:a62:5444:: with SMTP id i65mr9546145pfb.193.1547638657177; Wed, 16 Jan 2019 03:37:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547638657; cv=none; d=google.com; s=arc-20160816; b=OqgOFsQaX87+nn8VsC+4jI20buFGhJ/PLJ+MHVFYnsfQh7g6fhPgEr/r5iI8h7VZGj /5F7j5NQJTAchEiySkYm31JtebKd65MSVSWMxanuAUrhIfsz8CMsCUK7IMn7FS/gTIdd zfgcihiS2y5pTxcAkhB491mNrrgZbATMZ0Fj0gTzp4Qc4TovldYhfXPH/frt1GIR7DEL mAb8ZyavGFSYRzb13vfR1s4YMNdFVOc65N+c8PkxktoSQsapRwFUsoaQ6v+1L3kSZOWN Ogruqv5lXNNgqBdHjUickHBGN3jBGLOiu3UeYnOALD38l7+/2uKDObxV/nLcZ6bREm54 AG/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature; bh=G4uWfUBdfRWJ7ooa2ukqyMzWYVfm+tWSAZRULgvNQ08=; b=XR7pHHk2AHTAPtpdexaNOHdk/+nhhb6aQCqhKqL0exJbfQXh3iHzn8syLulVyF39e1 TTpAldcEsxkXfi9LOi3wEnDRtjCSUND07ZDQaqRR2itSmTWQraD1PZfRg6qGsGTne87Z x9UF4LB1MMoS6CHR7OnPXRbbhIU9clbJkNIp3n3pv/rddVySJIKDb4zRgsqUd1aZqnG5 /NCq/kRO58geMgx0jqkHxOEs+ePmk5CPOTPDtiQyWFcip0032Xl61EdeamKtsMSPbCDX s8ZyM07oUlmetcGT3CoVZFFvpgMcSxAm8wXeeI2LreDbZvnSFTcuOeh798+gYropqC3n +Kyw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=DqdSNsfG; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id j66si2132364pfb.182.2019.01.16.03.37.37; Wed, 16 Jan 2019 03:37:37 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=DqdSNsfG; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389511AbfAPLhf (ORCPT + 2 others); Wed, 16 Jan 2019 06:37:35 -0500 Received: from mail-lj1-f194.google.com ([209.85.208.194]:35027 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389465AbfAPLhf (ORCPT ); Wed, 16 Jan 2019 06:37:35 -0500 Received: by mail-lj1-f194.google.com with SMTP id x85-v6so5178089ljb.2 for ; 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=ooob9PfpdKFM4pZ5NY5CU8KZ+sQnoXzpcAkthxVoI6oK6L+f1lUripPhm7ivm3lXly ubNwsvK/HgEf0zxmxtbBgXGfJvO5Eyrox9z+sfe6rcCAXBQr3rnD8cHI5Bl7msgdPWkO Se39Bc93S+YZWaaiqVrbNTPN+SHUmxdbwfwFCpH/riskfCfdR1r+6gtMcRFPNKHp/uYf nCb8lZNpl09Ib2IoqB8qfFlKV/Liy+EQ4+JqwPz2hodG6180jVJbjuhEcnHG8Ux1esDp z8+nyIIBSFvNcUP7suWgoFj3y2L1SFb7XJaoZpKlnRbY+YiaSo9uqibg1gCw3DK3O0so btzQ== X-Gm-Message-State: AJcUukcfx7STTXZPLIRmABCdO6RvB4hp8u5DRb38oCReEWWLjQn+lsKR H8stgfiaKU2dkXHNY9an6xC+tQ== 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 To: Kalle Valo , Tony Lindgren , Eyal Reizer , linux-wireless@vger.kernel.org Cc: Ricardo Salveti , Kishon Vijay Abraham I , Anders Roxell , John Stultz , Jan Kiszka , Ulf Hansson , 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-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org 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 --- 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(-) -- 2.17.1 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; }