From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752065AbcHBKsd (ORCPT ); Tue, 2 Aug 2016 06:48:33 -0400 Received: from mailout4.samsung.com ([203.254.224.34]:58307 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751795AbcHBKsW (ORCPT ); Tue, 2 Aug 2016 06:48:22 -0400 MIME-version: 1.0 Content-type: text/plain; charset=gbk X-AuditID: cbfee68e-f79cb6d000006cfe-d9-57a07a446ea0 Content-transfer-encoding: 8BIT Message-id: <57A07A44.9000400@samsung.com> Date: Tue, 02 Aug 2016 19:47:32 +0900 From: Jaehoon Chung User-Agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 To: Shawn Lin , Ulf Hansson Cc: Adrian Hunter , linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, Doug Anderson , linux-rockchip@lists.infradead.org Subject: Re: [PATCH v2 2/2] mmc: core: fall back host->f_init if failing to init mmc card after resume References: <1468979860-28712-1-git-send-email-shawn.lin@rock-chips.com> <1468979860-28712-2-git-send-email-shawn.lin@rock-chips.com> <98cd6af4-3296-9020-aeae-802f797f0631@rock-chips.com> In-reply-to: <98cd6af4-3296-9020-aeae-802f797f0631@rock-chips.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrOIsWRmVeSWpSXmKPExsWyRsSkUNelakG4weI3ghYnn6xhszi77CCb xeVdc9gsjvzvZ7T49OA/s8WdJ+tZLY6vDXdg95jdcJHFY/Gel0wed67tYfPYvKTe4++s/Swe nzfJBbBFcdmkpOZklqUW6dslcGU8v7qYseCyZMX1k7OZGhgfCncxcnJICJhITHmzhQXCFpO4 cG89WxcjF4eQwApGif0NjSwwRa9OL4RKzGKUWHz0GitIgldAUOLH5HtARRwczALyEkcuZYOE mQVUJbZ9vcMCUf+AUWLjzI1sEPVaEo+WrWEEsVmAil7//wQ2h01AR2L7t+NMILaoQJjEg3V7 weIiAn4SW3dsBVvMLLCZUWLXgqlgCWGBDIlfP64wQWyYzCQx//dqdpAEp4CTxLXp+1hBEhIC 99glZvY+YYdYJyDxbfIhsFMlBGQlNh1ghnhNUuLgihssExjFZiF5aBbCQ7OQPLSAkXkVo2hq QXJBcVJ6kZFecWJucWleul5yfu4mRmD8nf73rG8H480D1ocYBTgYlXh4NR7MDxdiTSwrrsw9 xGgKdMREZinR5HxglOeVxBsamxlZmJqYGhuZW5opifMmSP0MFhJITyxJzU5NLUgtii8qzUkt PsTIxMEp1cCoHzmpaMvHPzwLWENe2C6LyFAyKFcw3/1i+YF/7/+7xO3cpOskO/NaToa8dfrd XXLBYZcsJ7dsnn1heYGchfGmh69vt+Uem715RYzku1Nn7zsU17WemeyY4Xd2KvuxRZpqQgbz u7b2HPq+ae68Omb/gLu2W2Q3XNd0LQo81fjRqO/9zUsZWht+KbEUZyQaajEXFScCAN11j0u6 AgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrCIsWRmVeSWpSXmKPExsVy+t9jQV2XqgXhBsvmc1ucfLKGzeLssoNs Fpd3zWGzOPK/n9Hi04P/zBZ3nqxntTi+NtyB3WN2w0UWj8V7XjJ53Lm2h81j85J6j7+z9rN4 fN4kF8AW1cBok5GamJJapJCal5yfkpmXbqvkHRzvHG9qZmCoa2hpYa6kkJeYm2qr5OIToOuW mQN0ipJCWWJOKVAoILG4WEnfDtOE0BA3XQuYxghd35AguB4jAzSQsIYx4/nVxYwFlyUrrp+c zdTA+FC4i5GTQ0LAROLV6YVsELaYxIV764FsLg4hgVmMEouPXmMFSfAKCEr8mHyPpYuRg4NZ QF7iyKVskDCzgKrEtq93WCDqHzBKbJy5kQ2iXkvi0bI1jCA2C1DR6/+fwOawCehIbP92nAnE FhUIk3iwbi9YXETAT2Lrjq1gi5kFNjNK7FowFSwhLJAh8evHFSaIDZOZJOb/Xs0OkuAUcJK4 Nn0f6wRGoDsRDpyFcOAsJAcuYGRexSiRWpBcUJyUnmuUl1quV5yYW1yal66XnJ+7iREc48+k dzAe3uV+iFGAg1GJh7fj5fxwIdbEsuLK3EOMEhzMSiK8TZULwoV4UxIrq1KL8uOLSnNSiw8x mgJ9OJFZSjQ5H5h+8kriDY1NzIwsjcwNLYyMzZXEeR//XxcmJJCeWJKanZpakFoE08fEwSnV wJhbtlKg/JlV+b5dTwS5mVUFuae1mmqcL3uztubmTs+Wn58kQ79ldoouf/s3Yk867/3JQfYy lx4dWOo+jcsksuTzBpH5GWscy00fsTfFR/1Y/LCs4qBTd+73lhN+knvltj7Mm/RD5d5T8/6z YZzs53816Z27fqn224XdfvGpt6/I5q38n99v91GJpTgj0VCLuag4EQBA2+fVBwMAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Shawn, On 08/02/2016 06:07 PM, Shawn Lin wrote: > Hi Ulf, > > ÔÚ 2016/7/20 9:57, Shawn Lin дµÀ: >> We observed the failure of initializing card after resume >> accidentally. It's hard to reproduce but we did get report from >> the suspend/resume test of our RK3399 mp test farm . Unfortunately, >> we still fail to figure out what was going wrong at that time. >> Also we can't achieve it by retrying the host->f_init without falling >> back it. But this patch will solve the problem as we could add some log >> there and see that we resume the mmc card successfully after falling >> back the host->f_init. There is no obvious side effect found, so it seems >> this patch will improve the stability. >> >> [ 93.405085] mmc1: unexpected status 0x800900 after switch >> [ 93.408474] mmc1: switch to bus width 1 failed >> [ 93.408482] mmc1: mmc_select_hs200 failed, error -110 >> [ 93.408492] mmc1: error -110 during resume (card was removed?) >> [ 93.408705] PM: resume of devices complete after 213.453 msecs >> Status 0x800900 is COM_CRC_ERROR..it seems that CRC check fails. But i don't know what is related with "fall back host->f_init". I don't have a knowledge of rockchip... but in my experience, there are some cases, not mmc core problem.. 1. Exynos is using the gpio as clk/cmd/data line..and gpio has the driver strength value. If driver strength is changed after resuming, it's possible to occur the error. 2. And glitch for I/O line..this loop has the delay..Just delay? So you can check the other problem... :) At Booting time, f_init can use 400K..but after resuming..f_init need to use 100K..hmm..strange.. Best Regards, Jaehoon Chung > > Any comments for this patch? :) > >> Signed-off-by: Shawn Lin >> >> --- >> >> Changes in v2: >> - remove mmc_power_off >> - take f_min into consideration >> >> drivers/mmc/core/mmc.c | 19 +++++++++++++++++-- >> 1 file changed, 17 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c >> index 403b97b..a2891c1 100644 >> --- a/drivers/mmc/core/mmc.c >> +++ b/drivers/mmc/core/mmc.c >> @@ -1945,6 +1945,7 @@ static int mmc_suspend(struct mmc_host *host) >> static int _mmc_resume(struct mmc_host *host) >> { >> int err = 0; >> + int i; >> >> BUG_ON(!host); >> BUG_ON(!host->card); >> @@ -1954,8 +1955,22 @@ static int _mmc_resume(struct mmc_host *host) >> if (!mmc_card_suspended(host->card)) >> goto out; >> >> - mmc_power_up(host, host->card->ocr); >> - err = mmc_init_card(host, host->card->ocr, host->card); >> + /* >> + * Let's try to fallback the host->f_init >> + * if failing to init mmc card after resume. >> + */ >> + for (i = 0; i < ARRAY_SIZE(freqs); i++) { >> + if (host->f_init < max(freqs[i], host->f_min)) >> + continue; >> + else >> + host->f_init = max(freqs[i], host->f_min); >> + >> + mmc_power_up(host, host->card->ocr); >> + err = mmc_init_card(host, host->card->ocr, host->card); >> + if (!err) >> + break; >> + } >> + >> mmc_card_clr_suspended(host->card); >> >> out: >> > >