From patchwork Thu Oct 17 13:57:38 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 11196023 X-Patchwork-Delegate: johannes@sipsolutions.net Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 69D8617E1 for ; Thu, 17 Oct 2019 13:57:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 485022082C for ; Thu, 17 Oct 2019 13:57:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="t+8qBMvE" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2437326AbfJQN55 (ORCPT ); Thu, 17 Oct 2019 09:57:57 -0400 Received: from mail-lf1-f66.google.com ([209.85.167.66]:33701 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2437308AbfJQN54 (ORCPT ); Thu, 17 Oct 2019 09:57:56 -0400 Received: by mail-lf1-f66.google.com with SMTP id y127so1995521lfc.0 for ; Thu, 17 Oct 2019 06:57:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=W/IUaSbhHG4wv7nj6S/SBAPb0kMokkckyKlISAFdDyg=; b=t+8qBMvE/y8RBPIQXO8pK0OYJq/4UahUSKfRo968q0KRtIBLbZxzfkR8l0K1moMpN2 kgLf2lJ9VJmqhrDP8vKnut+e46V9D+014tJ53GQNrIB4xCTnXih8D4s56ub1qy2PaS68 VSHSB0aTl/WObl74yg3tHB++wvXtlOfuV8eHWk0XVAyy+VkHpJn5edYxdECRR23iMru9 dqfkTPGhjS6pgcu92sKKBpc9SfdSW2PS8a3Ts1q1d4hvNh9BPOhOkbfMTdwNbndTUoD8 +iMCWx+hfBZHmQvxgKGHfuNzmwIQTldrR8AvzVots22cyjseUcGhRzRp3J6cZ//N2VXU IWAw== 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:in-reply-to :references; bh=W/IUaSbhHG4wv7nj6S/SBAPb0kMokkckyKlISAFdDyg=; b=Z/LuEaiDUMtZRzOhPGszSNeZsWl6O4oP1AoXBt6Ayi4EtamEgLoLioZ/Dj4Ilc4YuX 1+RAka6SevNfyjDT/cKsttIhdzfTazg56xLZswjuImoVM8WLs6/J+iYCT4NTBV3Y3eOQ XQs6ZEu4F8VEMq5Ts9sFxUDXvP2rxzKoMKWhQrg6u1dmhlR6JefvQsCUWNGpt/Py0PfI MSUSFhwmY5aNCYTYJT+db2ebiAj5NyLtFhM+ZrzoiCjMrAjtFedSFCFMi+jDZ1Kr8OOK M+UKEnDgoeoiEyghovMZ7QMnhfhi8dGqPNLJoA2xOGum+2rpFAmY9EZz7dXx+D7bP0Qc 4sAg== X-Gm-Message-State: APjAAAXJFymBOfbBMYYzFp5QuRsReNpyz5SL9V0/NCuX75DfsaiXq8+6 WuU1A0Y7Ob0TLs7T+/6+nbejfw== X-Google-Smtp-Source: APXvYqwBVphSUSV/EpVwjWyAvyg263gkH8JSDcG/pQR4rUzerRHYeILmO4ZHlINFlt4u0aJj7QmJEg== X-Received: by 2002:a19:5504:: with SMTP id n4mr2529787lfe.106.1571320675138; Thu, 17 Oct 2019 06:57:55 -0700 (PDT) Received: from localhost.localdomain (h-158-174-22-210.NA.cust.bahnhof.se. [158.174.22.210]) by smtp.gmail.com with ESMTPSA id x17sm975088lji.62.2019.10.17.06.57.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Oct 2019 06:57:54 -0700 (PDT) From: Ulf Hansson To: linux-mmc@vger.kernel.org, Ulf Hansson , Adrian Hunter , Douglas Anderson , Matthias Kaehlcke Cc: Kalle Valo , Tony Lindgren , Wen Gong , Erik Stromdahl , Eyal Reizer , linux-wireless@vger.kernel.org Subject: [PATCH 1/2] mmc: core: Drop check for mmc_card_is_removable() in mmc_rescan() Date: Thu, 17 Oct 2019 15:57:38 +0200 Message-Id: <20191017135739.1315-2-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191017135739.1315-1-ulf.hansson@linaro.org> References: <20191017135739.1315-1-ulf.hansson@linaro.org> Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Upfront in mmc_rescan() we use the host->rescan_entered flag, to allow scanning only once for non-removable cards. Therefore, it's also not possible that we can have bus attached, when we are scanning non-removable cards. For this reason, let' drop the check for mmc_card_is_removable() as it's redundant. Signed-off-by: Ulf Hansson Reviewed-by: Douglas Anderson --- drivers/mmc/core/core.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index 221127324709..6f8342702c73 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -2297,11 +2297,8 @@ void mmc_rescan(struct work_struct *work) mmc_bus_get(host); - /* - * if there is a _removable_ card registered, check whether it is - * still present - */ - if (host->bus_ops && !host->bus_dead && mmc_card_is_removable(host)) + /* Verify a registered card to be functional, else remove it. */ + if (host->bus_ops && !host->bus_dead) host->bus_ops->detect(host); host->detect_change = 0; From patchwork Thu Oct 17 13:57:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Hansson X-Patchwork-Id: 11196027 X-Patchwork-Delegate: johannes@sipsolutions.net Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4402314ED for ; Thu, 17 Oct 2019 13:58:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2372521835 for ; Thu, 17 Oct 2019 13:58:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="LATakpY7" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2437341AbfJQN57 (ORCPT ); Thu, 17 Oct 2019 09:57:59 -0400 Received: from mail-lj1-f194.google.com ([209.85.208.194]:33632 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2437329AbfJQN56 (ORCPT ); Thu, 17 Oct 2019 09:57:58 -0400 Received: by mail-lj1-f194.google.com with SMTP id a22so2702863ljd.0 for ; Thu, 17 Oct 2019 06:57:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ZnxS2XcZzdmlSU7FWbs0spB90/BTPVuxJl5GN2SI/co=; b=LATakpY7OV1xSLKlXscaDeuX8qO2K20YfT4oZdMmUy4lt6LTHrt8mzvOSRQFx2X6F7 YBfZ2gv+CnJFNq9l4xoiYuOdFs3HtO6jZwP7PrpwEoN/oipWcUhv0sWI9yl5jOoBZ1wB mYBlnkIEEUcSbWz2QyjAdanz29kpRSBdnI87Eu//eSD07Z+29lqLAbxXyDDvBMmK8I33 VCBoxtduq36x8yIJ+AnUM6do3Ij9mUSb0XdcY0VTaJlbv9CM0ItuQCrUcprjFnxQVn9+ 9cI8DcfPTCuEGO2ZsJ8bgijSt9qwKh16MqxVvZgxoYmOdiSNHVIICpu51UjtvMrrkCus c7xA== 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:in-reply-to :references; bh=ZnxS2XcZzdmlSU7FWbs0spB90/BTPVuxJl5GN2SI/co=; b=hmxkbu9VoGkuFqVtUCT/DMOiAvNMr3HQSKRgR8+caBwO8Cm1vZ73x43fhoLLdFHFyB DqI+se4qOKIvqIndTzm01sPA7BPnslHkzO9KI9NzUrqLy89erwaRX6cq/r02dW2X7p63 TloCg5KaqB73yvmSyvs5+dC4Kt148cqfItUX+I50sT8h4VGAxXcTY0srSpIAPWzeL3V7 FbJHuQ7SgMB97IUJiwMRym1fuMCr0Z55JE1CJ96wmFdv3dJ3yUDHv4+RgxRwjc/4qNsq eC0LVHJm7i70DZ3RZuc6lzGOtlEPLF9rhT6+S+Jvgn3TQFatbrgIQ5GcIMs0rhT8pnRW XURg== X-Gm-Message-State: APjAAAWJ1u2uVWWWcwODYE0Stq9+9HFk05DhpdcBaEvua9AT8v5atYfr 6XhJiDAoh+3gvABkzA5s/GVLNg== X-Google-Smtp-Source: APXvYqw3vvsTZvTtxmCVOnu1swpXk54GoLGrxLXWlh71VuyIjZ7b3hcGeCd4vUWQTzz2BawLP8n5jw== X-Received: by 2002:a2e:9848:: with SMTP id e8mr2699331ljj.128.1571320676674; Thu, 17 Oct 2019 06:57:56 -0700 (PDT) Received: from localhost.localdomain (h-158-174-22-210.NA.cust.bahnhof.se. [158.174.22.210]) by smtp.gmail.com with ESMTPSA id x17sm975088lji.62.2019.10.17.06.57.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Oct 2019 06:57:56 -0700 (PDT) From: Ulf Hansson To: linux-mmc@vger.kernel.org, Ulf Hansson , Adrian Hunter , Douglas Anderson , Matthias Kaehlcke Cc: Kalle Valo , Tony Lindgren , Wen Gong , Erik Stromdahl , Eyal Reizer , linux-wireless@vger.kernel.org Subject: [PATCH 2/2] mmc: core: Re-work HW reset for SDIO cards Date: Thu, 17 Oct 2019 15:57:39 +0200 Message-Id: <20191017135739.1315-3-ulf.hansson@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191017135739.1315-1-ulf.hansson@linaro.org> References: <20191017135739.1315-1-ulf.hansson@linaro.org> Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org It have turned out that it's not a good idea to try to power cycle and to re-initialize the SDIO card, via mmc_hw_reset. This because there may be multiple SDIO funcs attached to the same SDIO card. To solve this problem, we would need to inform each of the SDIO func in some way when mmc_sdio_hw_reset() gets called, but that isn't an entirely trivial operation. Therefore, let's instead take the easy way out, by triggering a card removal and force a new rescan of the SDIO card. Signed-off-by: Ulf Hansson --- drivers/mmc/core/core.c | 3 +-- drivers/mmc/core/core.h | 2 ++ drivers/mmc/core/sdio.c | 11 +++++++++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index 6f8342702c73..39c4567e39d8 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -1469,8 +1469,7 @@ void mmc_detach_bus(struct mmc_host *host) mmc_bus_put(host); } -static void _mmc_detect_change(struct mmc_host *host, unsigned long delay, - bool cd_irq) +void _mmc_detect_change(struct mmc_host *host, unsigned long delay, bool cd_irq) { /* * If the device is configured as wakeup, we prevent a new sleep for diff --git a/drivers/mmc/core/core.h b/drivers/mmc/core/core.h index 328c78dbee66..575ac0257af2 100644 --- a/drivers/mmc/core/core.h +++ b/drivers/mmc/core/core.h @@ -70,6 +70,8 @@ void mmc_rescan(struct work_struct *work); void mmc_start_host(struct mmc_host *host); void mmc_stop_host(struct mmc_host *host); +void _mmc_detect_change(struct mmc_host *host, unsigned long delay, + bool cd_irq); int _mmc_detect_card_removed(struct mmc_host *host); int mmc_detect_card_removed(struct mmc_host *host); diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c index 26cabd53ddc5..5d7462c223c3 100644 --- a/drivers/mmc/core/sdio.c +++ b/drivers/mmc/core/sdio.c @@ -1050,8 +1050,15 @@ static int mmc_sdio_runtime_resume(struct mmc_host *host) static int mmc_sdio_hw_reset(struct mmc_host *host) { - mmc_power_cycle(host, host->card->ocr); - return mmc_sdio_reinit_card(host); + /* + * We may have more multiple SDIO funcs. Rather than to inform them all, + * let's trigger a removal and force a new rescan of the card. + */ + host->rescan_entered = 0; + mmc_card_set_removed(host->card); + _mmc_detect_change(host, 0, false); + + return 0; } static int mmc_sdio_sw_reset(struct mmc_host *host)