From patchwork Tue May 31 10:18:23 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dong Aisheng X-Patchwork-Id: 9144159 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id C821B60757 for ; Tue, 31 May 2016 10:26:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B9796272D8 for ; Tue, 31 May 2016 10:26:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AE28827E72; Tue, 31 May 2016 10:26:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,FREEMAIL_FROM,RCVD_IN_DNSWL_MED,T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 25FAA272D8 for ; Tue, 31 May 2016 10:26:03 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1b7gqK-0003tA-T4; Tue, 31 May 2016 10:24:12 +0000 Received: from mail-pa0-x244.google.com ([2607:f8b0:400e:c03::244]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1b7gqI-0003li-3H for linux-arm-kernel@lists.infradead.org; Tue, 31 May 2016 10:24:11 +0000 Received: by mail-pa0-x244.google.com with SMTP id gp3so17633339pac.2 for ; Tue, 31 May 2016 03:23:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=pGv9q/CGG7YlX2mG12nsYZUGlBbMehBQNak5lGtdci4=; b=lfytwDd4tqVBwutonJMkCC56i1ZQ5C3Ttf2qeVvUi7LxPpJY4L23gJPWa+iSYRwaAL Gua72bZg2XUfTITqLKwQpPdcDa+Jvd0/3z6Dnhn/C0r9uDEPK2GgZOG/R5GC/u6WHGdn yFGGjwP9x6HnEbdfBi9RgyWTqGw7GiAAuKUpjJCWryaPfH0r63/PQPeQ18Eev9NdPNeL FUkWWBzzGxFpmmKnLSs7neAVA5Bd0bRVgdIpbgYZXuKYvsmt9wHiisQR3zchPoB4Oa1F xNLPB9eoURNMEo0pVdY48YnP2iaN8Wi0T0IZtTLsafW32nBoMlJaeHMnaBzSww1iuelj xUFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=pGv9q/CGG7YlX2mG12nsYZUGlBbMehBQNak5lGtdci4=; b=ki/9vVVZx8623Jn0S9ixS4epj5CF9YofeqTHSOzi5Mo0ywKv4a78GE4cXVJmQmj8O2 UXS1KsK7AAeJCqPcAn3mrb+BTw/+psSa4z+tSV/8ukYtbwoU80Xg7Jy6FoJtDT95Pyid 6ZjWlY2EbdnBsGHZ/h3LMemqcF3c1DP3GFFAbtb4sY7gfLPgjY7X+k+HIZ+jYDzkq4LH yopbBsrd8OFVV8J0z7n+3sJE06ZIDzkSbeTFyFtJY8AX4Cxgm6KwuvWxS/4eMFnf5C7e tx/VNP6+e+DC0g27Qd2esWGuZ9dpnlziTLXJYCqrxxVNlIsuucSRqtW9TCuQ98ZCAHN3 AYhw== X-Gm-Message-State: ALyK8tI01DTwyZPpIAQPpDm8H5F757DnNat7CB03NyvX/DyH1P1gGJ1Bmkd2DL5jcb8yng== X-Received: by 10.66.43.51 with SMTP id t19mr54595951pal.48.1464690227876; Tue, 31 May 2016 03:23:47 -0700 (PDT) Received: from shlinux2 (gate-zmy3.freescale.com. [192.88.167.1]) by smtp.gmail.com with ESMTPSA id to9sm53757392pab.27.2016.05.31.03.23.43 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Tue, 31 May 2016 03:23:46 -0700 (PDT) Date: Tue, 31 May 2016 18:18:23 +0800 From: Dong Aisheng To: Adrian Hunter Subject: Re: [PATCH 10/23] mmc: core: disable auto retune during card detection process Message-ID: <20160531101823.GB4096@shlinux2> References: <1460741387-23815-1-git-send-email-aisheng.dong@nxp.com> <1460741387-23815-11-git-send-email-aisheng.dong@nxp.com> <571A1D85.3020200@intel.com> <5721B602.6010306@intel.com> <20160428132249.GB27560@shlinux2.ap.freescale.net> <57230515.9030602@intel.com> <20160429074258.GA28427@shlinux2.ap.freescale.net> <573185FC.5060506@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <573185FC.5060506@intel.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160531_032410_259527_732E81C1 X-CRM114-Status: GOOD ( 19.02 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Dong Aisheng , Ulf Hansson , "linux-mmc@vger.kernel.org" , Chris Ball , haibo.chen@nxp.com, Shawn Guo , "linux-arm-kernel@lists.infradead.org" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP On Tue, May 10, 2016 at 09:55:56AM +0300, Adrian Hunter wrote: > On 29/04/16 10:42, Dong Aisheng wrote: > > And IMX6DL ARD is even worser due to it's using common > > mmc_send_tuning() function. > > root@imx6qdlsolo:~# > > root@imx6qdlsolo:~# [ 129.462564] sysrq: SysRq : Changing Loglevel > > [ 129.466902] sysrq: Loglevel set to 8 > > [ 131.616078] sdhci-esdhc-imx 2198000.usdhc: desired SD clock: 198000000, actual: 198000000 > > [ 131.625311] sdhci-esdhc-imx 2198000.usdhc: change pinctrl state for uhs 6 > > [ 131.632133] sdhci-esdhc-imx 2198000.usdhc: desired SD clock: 198000000, actual: 198000000 > > [ 131.642121] mmc0: starting CMD13 arg 59b40000 flags 00000195 > > [ 131.648925] sdhci-esdhc-imx 2198000.usdhc: tunning with delay 0x0 ESDHC_TUNE_CTRL_STATUS 0x0 > > [ 131.657818] mmc0: starting CMD19 arg 00000000 flags 00000035 > > [ 131.663518] mmc0: blksz 64 blocks 1 flags 00000200 tsac 150 ms nsac 0 > > [ 131.670835] mmc0: req done (CMD19): -123: 00000000 00000000 00000000 00000000 > > You should stop here because -123 is -ENOMEDIUM > Hi Adrian, This is the last issue before V2. I just tried the way you proposed (see detailed log below). A few questions if we decide to let tuning routine to handle the card remove case: 1) we may have to fix it for all platforms tuning code. Below is the example i did for IMX uSDHC and common SDHCI. If yes, then we probably could move all the normal host CD check before sending CMD in MMC core (__mmc_start_request()) as well? 2) MMC core will print out tuning error for card remove case which is not before. e.g [ 98.730597] mmc0: tuning execution failed: -123 We probably may need make it debug level since it's meaningless for card removed case. Detailed log below: After the fix, card remove with calling mmc_send_tuning(): root@imx6qdlsolo:~# [ 98.664049] sdhci-esdhc-imx 2198000.usdhc: desired SD clock: 198000000, actual: 198000000 [ 98.673280] sdhci-esdhc-imx 2198000.usdhc: change pinctrl state for uhs 6 [ 98.680102] sdhci-esdhc-imx 2198000.usdhc: desired SD clock: 198000000, actual: 198000000 [ 98.689560] mmc0: starting CMD13 arg aaaa0000 flags 00000195 [ 98.696336] sdhci-esdhc-imx 2198000.usdhc: tunning with delay 0x0 ESDHC_TUNE_CTRL_STATUS 0x0 [ 98.705407] mmc0: starting CMD19 arg 00000000 flags 00000035 [ 98.711121] mmc0: blksz 64 blocks 1 flags 00000200 tsac 150 ms nsac 0 [ 98.718144] mmc0: req done (CMD19): -123: 00000000 00000000 00000000 00000000 [ 98.725351] mmc0: 0 bytes transferred: 0 [ 98.730597] mmc0: tuning execution failed: -123 [ 98.735255] mmc0: req failed (CMD13): -123, retrying... [ 98.740921] mmc0: req failed (CMD13): -123, retrying... [ 98.746344] mmc0: req failed (CMD13): -123, retrying... [ 98.751909] mmc0: req done (CMD13): -123: 00000000 00000000 00000000 00000000 [ 98.759206] mmc0: card remove detected [ 98.763514] mmc0: card aaaa removed [ 98.780475] mmc0: clock 0Hz busmode 2 powermode 0 cs 0 Vdd 0 width 1 timing 0 [ 98.787730] sdhci-esdhc-imx 2198000.usdhc: change pinctrl state for uhs 0 [ 99.028432] FAT-fs (mmcblk0p1): FAT read failed (blocknr 32)q card remove with calling standard sdhci_execute_tuning(): root@imx6qdlsolo:~# [ 210.555330] sysrq: SysRq : Changing Loglevel [ 210.559665] sysrq: Loglevel set to 8 [ 212.244148] sdhci-esdhc-imx 2198000.usdhc: desired SD clock: 198000000, actual: 198000000 [ 212.253376] sdhci-esdhc-imx 2198000.usdhc: change pinctrl state for uhs 6 [ 212.260199] sdhci-esdhc-imx 2198000.usdhc: desired SD clock: 198000000, actual: 198000000 [ 212.269637] mmc0: starting CMD13 arg aaaa0000 flags 00000195 [ 212.275399] mmc0: tuning execution failed: -123 [ 212.280601] mmc0: req failed (CMD13): -123, retrying... [ 212.286094] mmc0: req failed (CMD13): -123, retrying... [ 212.291763] mmc0: req failed (CMD13): -123, retrying... [ 212.297226] mmc0: req done (CMD13): -123: 00000000 00000000 00000000 00000000 [ 212.304899] mmc0: card remove detected [ 212.308948] mmc0: card aaaa removed [ 212.318162] mmc0: clock 0Hz busmode 2 powermode 0 cs 0 Vdd 0 width 1 timing 0 [ 212.325415] sdhci-esdhc-imx 2198000.usdhc: change pinctrl state for uhs 0 [ 212.580621] FAT-fs (mmcblk0p1): FAT read failed (blocknr 32) Regards Dong Aisheng diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c @@ -757,7 +757,11 @@ static void esdhc_post_tuning(struct sdhci_host *host) static int esdhc_executing_tuning(struct sdhci_host *host, u32 opcode) { - int min, max, avg, ret; + int min, max, avg, ret, present; + + present = host->mmc->ops->get_cd(host->mmc); + if (!present) + return -ENOMEDIUM; /* find the mininum delay first which can pass tuning */ min = ESDHC_TUNE_CTRL_MIN; diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 0027b8707ebd..7b7545dd1a4b 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -1767,6 +1767,11 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode) unsigned long flags; unsigned int tuning_count = 0; bool hs400_tuning; + int present; + + present = mmc->ops->get_cd(mmc); + if (!present) + return -ENOMEDIUM; And if we need fix all platforms, do you think we should do it in MMC core mmc_execute_tuning()?