Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp4066242ybz; Tue, 28 Apr 2020 05:18:00 -0700 (PDT) X-Google-Smtp-Source: APiQypKUtIpvMIhik7dSPQK5HUWGvswPnMioZcpum75W2wGuDZMW84IpqTGziqr8sFnaG70+EbHP X-Received: by 2002:a17:906:558a:: with SMTP id y10mr25378588ejp.192.1588076280338; Tue, 28 Apr 2020 05:18:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588076280; cv=none; d=google.com; s=arc-20160816; b=FrIKR10k6zetwRbu11JKI6M6L3aaV+WuXwIAfAciWvQoeiqcsRfw4HXJbqXmnfHQUG dVKXJKKI9GsG5JbT5qUYLOpTf8Dgd7czugaKG3ozm4DX9/+hJYrcnjzDLDipNmd/nx6l /k8taW4R7T0lJ2NJLKKNQPtOwvhx2vrTLOpvvcS4mJj/klHDXu4DhEhT8zoujJHVWatn v7m1xpT9skmBX6hde/PmwaNdMGpYQ+P/fKXzFcEDAbfHNmNNgOeUnhiJna4vCl6LS1+Y PCTnUZGtLU8aqe3LFXbeU9KvMGpUxelUWH89rwFZeSEplqXGtJ9k2QcZLV7sey5EkFl+ FP6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=Si7QUx2lJaDXoOqwKRzvd/FqwJiW8O4bymVE3/8B3ns=; b=mczM/aZFs+J7asAt8WwRTDipKwah26yH8lMydGLZZyyVfZ7tG5amR8uPVeVXtDqljQ JfGFqqd2iYhe8JgNxUpcCA8jlJK2kkxfa40FwJbrcmem44szLsN5oiFLsMMbi9vgS0Fp jixcVxmROLXDlNY5amnOI4fsss53orMV4gyrL2fQHpI15F1VHiDrO2/oJ08MV104hu7Z YyoFGTkNM2Gd6DYbldnWLukw+Vw6YOGHfMFekha1SiEJ2Gr2emHlZtZ5M+wr3ZMBOyZ5 fvr3YqwEc329cTy5OB/YqC6cTPkEc8TkO7Ap8F16vmlrODHnMOarQn/qJC2MiPhWG58r kFCA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=A5Sijg+k; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-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. [23.128.96.18]) by mx.google.com with ESMTP id o10si1547136edq.359.2020.04.28.05.17.37; Tue, 28 Apr 2020 05:18:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=A5Sijg+k; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-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 S1726766AbgD1MOI (ORCPT + 99 others); Tue, 28 Apr 2020 08:14:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41120 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726448AbgD1MOH (ORCPT ); Tue, 28 Apr 2020 08:14:07 -0400 Received: from mail-ua1-x942.google.com (mail-ua1-x942.google.com [IPv6:2607:f8b0:4864:20::942]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3FAF1C03C1AB for ; Tue, 28 Apr 2020 05:14:06 -0700 (PDT) Received: by mail-ua1-x942.google.com with SMTP id b6so7272700uak.6 for ; Tue, 28 Apr 2020 05:14:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Si7QUx2lJaDXoOqwKRzvd/FqwJiW8O4bymVE3/8B3ns=; b=A5Sijg+k44OBG56boCW5SC8UnJ7ex3iO/soWNrUQ5voF2m/ptYSQIKN71PHSiPPkoO eigYpYxmn6IxQ9IL7wRTmGeXrXf71r2La7KtTzOtGIfY1YtExiSFtYxvPIXBiJfIovsD VOcBL9NUzfeaw+ldYSjxbBxWl8FO3zJGE8Tt/4pjWZqRZFxEhgYYLmK1ornUQMBAqnm0 WTv3YzAb4txKP30dESYuDYf7O+vmvPoky1fidkQ52iKdlVE49UK6+Y9UvKgxjx7/kA8N EbUWenpXx5R1hjPo4LxyJaRTmL4Hf2L1g/UGjW8rCflH6my2LPpxPAQpUjZoU2WNixyw 39aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Si7QUx2lJaDXoOqwKRzvd/FqwJiW8O4bymVE3/8B3ns=; b=XGKE0wemmfDb3GMcLaZvHRA0Jy31oObnHjXUjLj93qIzPhSss9FU9pN7rI+0SkpunA fNx9WONqEn5DHCvkzesH/y5a0shk8MPI2Qlyan+PYkqNy/cGIMztCs3NFME4ymO6C355 Dd9StyPmi3ugUlGzF/CIpCfekPw4gtw3ITZ6Te+UohLw4N4uHL5Tf+hpDQP/s3IMcLeI vdcOh/dzrRXnKlt8m2TcjqTnig2gfO0N3JvRiP54ZMgfRnCtYvGYEMlqey2zUj4zINc9 COqToaztmKnX74tNi0Wyf/JBWSJ83xk+pC+EEJNfTcKtK0fb2ALudc5KZjpU6v75SH4e zMPA== X-Gm-Message-State: AGi0Pub8xTDXtnYw6ra7QRifP7uvy4h4/S5CMXce5ooWRaD8T4VQhnFt Uu2uOmPdQ5Is6VQgpSBdVaQYSTJiXLRqfIL6buFrBA== X-Received: by 2002:a67:f24b:: with SMTP id y11mr20631794vsm.165.1588076045066; Tue, 28 Apr 2020 05:14:05 -0700 (PDT) MIME-Version: 1.0 References: <1586835611-13857-1-git-send-email-yong.mao@mediatek.com> <1586835611-13857-2-git-send-email-yong.mao@mediatek.com> <1588066038.30914.28.camel@mhfsdcap03> In-Reply-To: <1588066038.30914.28.camel@mhfsdcap03> From: Ulf Hansson Date: Tue, 28 Apr 2020 14:13:28 +0200 Message-ID: Subject: Re: [PATCH 1/3] mmc: core: need do mmc_power_cycle in mmc_sdio_resend_if_cond To: "yong.mao@mediatek.com" Cc: Matthias Kaehlcke , Chaotian Jing , Matthias Brugger , "linux-mmc@vger.kernel.org" , Linux ARM , "moderated list:ARM/Mediatek SoC support" , Linux Kernel Mailing List , srv_heupstream Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 28 Apr 2020 at 11:28, yong.mao@mediatek.com wrote: > > > On Fri, 2020-04-24 at 12:09 +0200, Ulf Hansson wrote: > > On Tue, 14 Apr 2020 at 05:40, Yong Mao wrote: > > > > > > From: yong mao > > > > > > When mmc_sdio_resned_if_cond is invoked, it indicates the SDIO > > > device is not in the right state. In this condition, the previous > > > implementation of mmc_sdio_resend_if_cond can't make sure SDIO > > > device be back to idle state. mmc_power_cycle can reset the SDIO > > > device by HW and also make sure SDIO device enter to idle state > > > correctly. > > > > > > Signed-off-by: Yong Mao > > > --- > > > drivers/mmc/core/sdio.c | 1 + > > > 1 file changed, 1 insertion(+) > > > > > > diff --git a/drivers/mmc/core/sdio.c b/drivers/mmc/core/sdio.c > > > index ebb387a..ada0a80 100644 > > > --- a/drivers/mmc/core/sdio.c > > > +++ b/drivers/mmc/core/sdio.c > > > @@ -546,6 +546,7 @@ static int mmc_sdio_init_uhs_card(struct mmc_card *card) > > > static void mmc_sdio_resend_if_cond(struct mmc_host *host, > > > struct mmc_card *card) > > > { > > > + mmc_power_cycle(host, host->card->ocr); > > > > This looks wrong to me. mmc_sdio_resend_if_cond() is called from two places. > > > > 1. In the case when mmc_set_uhs_voltage() fails in > > mmc_sdio_init_card(), which means a call to mmc_power_cycle() has > > already been done. > > > Thanks for your comment. > Yes. It is right that mmc_power_cycle() has already been done when > mmc_sdio_resend_if_cond() is called. In normal re-initialization case, > this mmc_power_cycle() (currently in 1.8v voltage and 208Mhz clock) > can make SDIO device really back to idle state. Unfortunately, in some > special SDIO device, it will enter to unstable state. > > At this unstable state, device may keep data0 always low after receiving CMD11. > And then every other SDIO CMD can't be sent to device any more due to card > is busy(data0 is low). Therefore, previous implementation can't save the > device. At this time, mmc_power_cycle() may be the final solution to make > sure SDIO device can back to idle state correctly. Well, this still sounds a bit vague to me. I need to understand more exactly under what circumstances the problem occurs. What platform are you testing with and what SDIO card is being used? Is the problem happening during the system resume phase? Are the SDIO func driver using runtime PM and then is the host capable of MMC_CAP_POWER_OFF_CARD? Is it easy to reproduce the problem for you? > > > 2. Wen sdio_read_cccr() fails and when we decide to retry the UHS-I > > voltage switch. Then perhaps it could make sense to run a power cycle. > > But if so, we better do it only for that path. > > > > I will continue to look a bit, as I think there are really more issues > > that we may want to look into while looking at this piece of code. > > However, allow me some more time before I can provide some more ideas > > of how to move forward. > In the actual project, we do encounter many relative issues about re-initialized card. > The following two categories are the most common issue we met before. > A. the SDIO card is initialized by UHS-I mode at the first time, but will be > re-initialized by High Speed mode at the second time. > ==> All this type of issues is relative with S18A in response of CMD5. > And most of the issues are related to the interval between powering off and > powering on card. > B. If there is something wrong in the flow of voltage switch(after CMD11), card will > always keep all data pins to low. And then it hangs up because data0 is always low. > Hope this information will be helpful for you. Thanks for sharing these details! I think we need to continue to debug this issue, to fully understand. In principle, it sounds to me that maybe mmc_power_cycle(), isn't really successfully power-cycling the SDIO card. Perhaps insert a few delays or so in that code to see how that would affect things? Anyway, how is the power to the SDIO card controlled in this case? Are you using a mmc-pwrseq? > > Anyway, we will wait for your advises. > > > > > sdio_reset(host); > > > mmc_go_idle(host); > > > mmc_send_if_cond(host, host->ocr_avail); > > > -- > > > 1.9.1 > > > > Kind regards > > Uffe I have a few patches in the pipe, which fixes some other problems in mmc_sdio_init_card(). Possibly those can be related, but I need a day or so to post them, let's see. Kind regards Uffe