From patchwork Fri Apr 1 16:46:20 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gwendal Grignou X-Patchwork-Id: 8726661 Return-Path: X-Original-To: patchwork-linux-mmc@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 15C8CC0553 for ; Fri, 1 Apr 2016 16:46:36 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id EA3F520396 for ; Fri, 1 Apr 2016 16:46:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0872920379 for ; Fri, 1 Apr 2016 16:46:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752162AbcDAQq2 (ORCPT ); Fri, 1 Apr 2016 12:46:28 -0400 Received: from mail-pa0-f43.google.com ([209.85.220.43]:36001 "EHLO mail-pa0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752144AbcDAQq1 (ORCPT ); Fri, 1 Apr 2016 12:46:27 -0400 Received: by mail-pa0-f43.google.com with SMTP id tt10so95299640pab.3 for ; Fri, 01 Apr 2016 09:46:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=sender:from:to:cc:subject:date:message-id; bh=XIv5dMj0EW5naMQD+nLQiVE3jk3RX4ZVIseS/PT6iRs=; b=b/MC+KWNSJltqOiJ8IGh/5JT6ONaC7hhJ8/qzWSqgib8idsi4/dsyjHkKumieimzJx PLg08sTZRzWIzjAISuXQxfbARo8hY8VYj1At/Q7/EPTnK3OkjrS3ac7odz9mhtnlDu20 +QD4pbPdnEHvm2wsFuNiTNJuRo8cNVTy4cfjtlhaNzW6pbD717MVIyRakArFLpolpeSK YBpQCMeEtg5A1hfaR5H5qu2m/1Z2xFGtMAW73CeU/UpknKSiCdNyQa1Q4Wav/qcuXO5v /NAva4boGzS1rB/rlf+4J8c0GmlG6pyYHgw+ZCZVPsjWF+2fQ3M86F92T/4S9AodtuqZ MBKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=XIv5dMj0EW5naMQD+nLQiVE3jk3RX4ZVIseS/PT6iRs=; b=R4zTYDQZQQ7401tjRRswMSg8Elgb39o4Xpa585ozcL6T8dtmm/Lp/EwIyeN3/Y+HSj m/sTxQnPAoOGrF8RrooKwpz2kQv7OAhyKodjzqryH415dCps67BSBMVZDFdTB0/Uc72c aikTYcWRWp30XipSvhnnviWc7XH/Hcot9ISvC+K1Yoh+YL9zRA7a7dNXyPOUH9X9yit5 2+rPreVwxZctFKe/iFkh/djboXOsbe1x2sDjCsSqrHVTGcH1Pm2c9GwriZPwHsgs19oA Hf7krKIEiLbe2Tcau6Ge+nG/ozulrpQsJ/f8KNwQ9PxN34QDNk0DN1M5+j+CFCjCJSRy rUDg== X-Gm-Message-State: AD7BkJImsdAwyc7ICMN2pvj56csXzTEqKNIferliFhod2pV5Uuy7IIAWKf3nGL15Pr+MDsyE X-Received: by 10.66.167.145 with SMTP id zo17mr32205162pab.73.1459529186348; Fri, 01 Apr 2016 09:46:26 -0700 (PDT) Received: from gwendal.mtv.corp.google.com ([172.22.64.242]) by smtp.gmail.com with ESMTPSA id dh8sm1433137pad.46.2016.04.01.09.46.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 01 Apr 2016 09:46:25 -0700 (PDT) From: Gwendal Grignou To: ulf.hansson@linaro.org Cc: linux-mmc@vger.kernel.org Subject: [PATCH] mmc: core: in mmc_hw_reset(), allow power cycle. Date: Fri, 1 Apr 2016 09:46:20 -0700 Message-Id: <1459529180-32604-1-git-send-email-gwendal@chromium.org> X-Mailer: git-send-email 2.8.0.rc3.226.g39d4020 Sender: linux-mmc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org X-Spam-Status: No, score=-7.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP When the eMMC device does not support/allow sending RST_n signal, do a brute force power cycle instead of returning EOPNOTSUPP. Signed-off-by: Gwendal Grignou --- drivers/mmc/core/core.c | 5 +++-- drivers/mmc/core/mmc.c | 18 ++++++++---------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index d8bbc78..d5bc2d8 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -2468,8 +2468,9 @@ int mmc_hw_reset(struct mmc_host *host) ret = host->bus_ops->reset(host); mmc_bus_put(host); - if (ret != -EOPNOTSUPP) - pr_warn("%s: tried to reset card\n", mmc_hostname(host)); + if (ret) + pr_warn("%s: tried to reset card, got error %d\n", + mmc_hostname(host), ret); return ret; } diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index 96cc7e2..deb8c16 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c @@ -1988,19 +1988,17 @@ static int mmc_reset(struct mmc_host *host) { struct mmc_card *card = host->card; - if (!(host->caps & MMC_CAP_HW_RESET) || !host->ops->hw_reset) - return -EOPNOTSUPP; - - if (!mmc_can_reset(card)) - return -EOPNOTSUPP; - mmc_set_clock(host, host->f_init); - - host->ops->hw_reset(host); - + if ((host->caps & MMC_CAP_HW_RESET) && host->ops->hw_reset && + mmc_can_reset(card)) { + /* If the card accept RST_n signal, send it. */ + host->ops->hw_reset(host); + } else { + /* Do a brute force power cycle */ + mmc_power_cycle(host, host->card->ocr); + } /* Set initial state and call mmc_set_ios */ mmc_set_initial_state(host); - return mmc_init_card(host, card->ocr, card); }