From patchwork Fri Apr 1 23:04:22 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gwendal Grignou X-Patchwork-Id: 8728441 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 9EB05C0553 for ; Fri, 1 Apr 2016 23:04:46 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id AA51920396 for ; Fri, 1 Apr 2016 23:04:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id AD9082038F for ; Fri, 1 Apr 2016 23:04:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755150AbcDAXEn (ORCPT ); Fri, 1 Apr 2016 19:04:43 -0400 Received: from mail-pf0-f171.google.com ([209.85.192.171]:34022 "EHLO mail-pf0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752898AbcDAXEn (ORCPT ); Fri, 1 Apr 2016 19:04:43 -0400 Received: by mail-pf0-f171.google.com with SMTP id x3so100487112pfb.1 for ; Fri, 01 Apr 2016 16:04:43 -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:in-reply-to:references; bh=SMAqyXvZIWORX0LH8bkcM4RwNfbO6nC/sgycN8UMDrY=; b=oKy4WDJIwSD6V272e63shPm62S7JdQz5/F9EksyJVHtR4LWITa1xO3YC80EMHR1lZc E2Yk3PK1bd5mYFDmtH6pMdT8Paw40+Fl5EIjXzq0eWvUM988FSrxeL1q3vzF5+cvZhpo STx7oQkyaq8zsv5t0VKHp+xvcv1ME00V/7AuJIQbEVLbZbX0Cenkv74hrkaJfbGOxnnT zczCe93Df5GnIhujCgtuRsuxNrC7mC8UX8AqxkKAE5LrwiOIz/EAdZU2OdQkbSpfzhKi ydk5b1xQRgn23FVm+2sItomP8wuMMNqoJyMmfL5suX3a+e1Wj3fWfH3mJrg4k05TcaXw SQ+w== 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 :in-reply-to:references; bh=SMAqyXvZIWORX0LH8bkcM4RwNfbO6nC/sgycN8UMDrY=; b=bDna4UUesaMrhgjFhBeLOIvozpJpjEgZIvUE2vxWsbnKAjNPCJDZFXXz9zlkV/bI7y xjDoabAOXwkEImNqd7GP2423jWyMF6Kyt0IucDdln2SqXByxLHLvyS0tpTDyNojBoO7r FG8zO63z5BvDoupVZ6rzeBqkibru1zBHVpqhB880PyP4agTy5/Nq43HVsjDelSNEDlMY wPuhIWNrdY/mov/EDnKh9k29sXSo32bkb+PVz9RGhI/V7j/nhMxq9QsFMdYQOGJYtABX 92yIcNX0g7FF9Zq8fZ3o6ptFFdJNMV7gtgQ/xFvKamjna5byC6duvcUaKXs3Afv8K+EC aR5g== X-Gm-Message-State: AD7BkJLucRmMAirAALWUEyeXidFAnT1xSAvZ/i5Lr6B2tFp+heweNqob6PnWLemsEQp5xLIq X-Received: by 10.98.93.12 with SMTP id r12mr2131931pfb.64.1459551882289; Fri, 01 Apr 2016 16:04:42 -0700 (PDT) Received: from gwendal.mtv.corp.google.com ([172.22.64.242]) by smtp.gmail.com with ESMTPSA id r65sm22307573pfa.27.2016.04.01.16.04.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 01 Apr 2016 16:04:41 -0700 (PDT) From: Gwendal Grignou To: ulf.hansson@linaro.org Cc: linux-mmc@vger.kernel.org Subject: [PATCH v3] mmc: core: in mmc_hw_reset(), allow power cycle. Date: Fri, 1 Apr 2016 16:04:22 -0700 Message-Id: <1459551862-38853-1-git-send-email-gwendal@chromium.org> X-Mailer: git-send-email 2.8.0.rc3.226.g39d4020 In-Reply-To: <1459531522-31874-1-git-send-email-gwendal@chromium.org> References: <1459531522-31874-1-git-send-email-gwendal@chromium.org> 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, try to do a brute force power cycle instead of returning EOPNOTSUPP. If power cycle is not supported by the hardware, mmc_init_card still send a CMD0, performing a Software Reset. Signed-off-by: Gwendal Grignou --- Changes in v3: - clock setting in already done in power_cycle. - clarify behavior when power cycle is not implemented. . drivers/mmc/core/core.c | 5 +++-- drivers/mmc/core/mmc.c | 24 +++++++++++------------- 2 files changed, 14 insertions(+), 15 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..92b7bea 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); - - /* Set initial state and call mmc_set_ios */ - mmc_set_initial_state(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. */ + mmc_set_clock(host, host->f_init); + host->ops->hw_reset(host); + /* Set initial state and call mmc_set_ios */ + mmc_set_initial_state(host); + } else { + /* Do a brute force power cycle */ + mmc_power_cycle(host, card->ocr); + } return mmc_init_card(host, card->ocr, card); }