Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752755AbbBYJ4L (ORCPT ); Wed, 25 Feb 2015 04:56:11 -0500 Received: from mailout2.samsung.com ([203.254.224.25]:44049 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751959AbbBYJ4G (ORCPT ); Wed, 25 Feb 2015 04:56:06 -0500 X-AuditID: cbfee68e-f79b46d000002b74-7a-54ed9c320158 Message-id: <54ED9C32.60004@samsung.com> Date: Wed, 25 Feb 2015 18:56:02 +0900 From: Jaehoon Chung User-Agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Thunderbird/31.3.0 MIME-version: 1.0 To: Alim Akhtar , Doug Anderson Cc: Addy Ke , Jaehoon Chung , Ulf Hansson , Olof Johansson , Andrzej Hajda , =?UTF-8?B?SGVpa28gU3TDvGJuZXI=?= , Eddie Cai , lintao , Tao Huang , "linux-kernel@vger.kernel.org" , "linux-mmc@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "open list:ARM/Rockchip SoC..." , Javier Martinez Canillas Subject: Re: [PATCH v4 1/3] mmc: dw_mmc: update clock after host reach a stable voltage References: <1423828368-18456-1-git-send-email-addy.ke@rock-chips.com> <1423894668-8886-1-git-send-email-addy.ke@rock-chips.com> <1423894668-8886-2-git-send-email-addy.ke@rock-chips.com> In-reply-to: Content-type: text/plain; charset=utf-8 Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrIIsWRmVeSWpSXmKPExsWyRsSkQNdoztsQg7NTTCxurTvHarHs/3cm i6W3qi1aO16xWZxddpDN4v+j16wWWxZ8Z7Y4+rvA4savNlaLOR/iLDY9vsZqcXnXHDaLI//7 GS0+PfjPbHHq+mc2i+Nrwx0EPGY3XGTx+Pv8OovHzll32T3uXNvD5rF5Sb3HlRNNrB5/Z+1n 8ejbsorRY/u1ecwenzfJBXBFcdmkpOZklqUW6dslcGVsPGBV8F+l4vZywwbGjbJdjBwcEgIm En1vLLoYOYFMMYkL99azdTFycQgJLGWUmNKwkxEiYSJx4MVDFojEIkaJC7uaWSGc14wSM7de YAGp4hXQkNi++BBYB4uAqsSJZQ/ZQWw2AR2J7d+OM4HYogJhEhNvPmaFqBeU+DH5HliviICf xOUlt9lAbGaBtawSE9+qgdjCApESNy7+Z4dYNplZYu7udrBBnALBEo0v1zGBvMAsoC4xZUou RK+8xOY1b5lB6iUE1nJI7P38iBniIAGJb5MPsUC8LCux6QAzxGeSEgdX3GCZwCg2C8lJsxCm zkIydQEj8ypG0dSC5ILipPQiI73ixNzi0rx0veT83E2MwJg//e9Z3w7GmwesDzEKcDAq8fAm CL8JEWJNLCuuzD3EaAp0xERmKdHkfGBiySuJNzQ2M7IwNTE1NjK3NFMS502Q+hksJJCeWJKa nZpakFoUX1Sak1p8iJGJg1OqgXHW5IWcftNK59Tuu73Bak516TpX47mrC1eWCoTUvI00vF/c sfnblysiZRmCv1fOPsDodCNfgiNTZuf+gF+iaz4+4bu0VOMC35xDS5fs/2PsLj5PRkHI9Oze bW9Kb/664/fiKOd6Lq2ZqUHvWm1kDzwTmeCSWrPs3+ljvDN1Khfk8Jy3MbkToySsxFKckWio xVxUnAgAHgwJR/QCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrDKsWRmVeSWpSXmKPExsVy+t9jAV2jOW9DDP4s0LK4te4cq8Wy/9+Z LJbeqrZo7XjFZnF22UE2i/+PXrNabFnwndni6O8Cixu/2lgt5nyIs9j0+BqrxeVdc9gsjvzv Z7T49OA/s8Wp65/ZLI6vDXcQ8JjdcJHF4+/z6yweO2fdZfe4c20Pm8fmJfUeV040sXr8nbWf xaNvyypGj+3X5jF7fN4kF8AV1cBok5GamJJapJCal5yfkpmXbqvkHRzvHG9qZmCoa2hpYa6k kJeYm2qr5OIToOuWmQP0iJJCWWJOKVAoILG4WEnfDtOE0BA3XQuYxghd35AguB4jAzSQsIYx Y+MBq4L/KhW3lxs2MG6U7WLk5JAQMJE48OIhC4QtJnHh3nq2LkYuDiGBRYwSF3Y1s0I4rxkl Zm69AFbFK6AhsX3xIUYQm0VAVeLEsofsIDabgI7E9m/HmUBsUYEwiYk3H7NC1AtK/Jh8D6xX RMBP4vKS22wgNrPAWlaJiW/VQGxhgUiJGxf/s0Msm8wsMXd3O9ggToFgicaX64BsDqAGdYkp U3IheuUlNq95yzyBUWAWkhWzEKpmIalawMi8ilE0tSC5oDgpPddQrzgxt7g0L10vOT93EyM4 pTyT2sG4ssHiEKMAB6MSD2+C8JsQIdbEsuLK3EOMEhzMSiK8+2e+DRHiTUmsrEotyo8vKs1J LT7EaAoMgInMUqLJ+cB0l1cSb2hsYmZkaWRuaGFkbK4kzqtk3xYiJJCeWJKanZpakFoE08fE wSnVwCg0r0DpnsWR/N2prgbPtkhM6ljZ0RSz+Hprse0l3+/6k/alO9d+fPq4QKrq+pntdhfO H0yuvdE8Y6d64dmuZMOI5j1x6tu+tjyfFrDyzIEKrV6ZGQuYHLd+OzT/XW1YzPYOoYDnrW5y 2lyOv9n4/oRt9Lm/8M+c5rDItOKFbA+Wf+80vPpKKUuJpTgj0VCLuag4EQA6Tf/YPwMAAA== 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 Content-Length: 4852 Lines: 133 Hi, On 02/25/2015 04:52 PM, Alim Akhtar wrote: > Hi Doug, > > > On Fri, Feb 20, 2015 at 5:19 AM, Doug Anderson wrote: >> Alim and Addy, >> >> On Sun, Feb 15, 2015 at 3:28 PM, Alim Akhtar wrote: >>> Hi Addy, >>> >>> On Sat, Feb 14, 2015 at 11:47 AM, Addy Ke wrote: >>>> As show in mmc_power_up(), in MMC_POWER_UP state, the voltage isn't >>>> stable and we may get 'data busy' which can't be cleaned by resetting >>>> all blocks. So we should not send command to update clock in this state. >>>> >>>> Signed-off-by: Addy Ke >>>> --- >>>> drivers/mmc/host/dw_mmc.c | 3 ++- >>>> 1 file changed, 2 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c >>>> index 4d2e3c2..3472f9b 100644 >>>> --- a/drivers/mmc/host/dw_mmc.c >>>> +++ b/drivers/mmc/host/dw_mmc.c >>>> @@ -1102,7 +1102,8 @@ static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) >>>> drv_data->set_ios(slot->host, ios); >>>> >>>> /* Slot specific timing and width adjustment */ >>>> - dw_mci_setup_bus(slot, false); >>>> + if (ios->power_mode != MMC_POWER_UP) >>>> + dw_mci_setup_bus(slot, false); >>>> >>> This looks a HACK to me. >>> If stabilizing host voltage regulator is the problem, can you try out >>> below patch, and see if this resolve your issue? >> >> Actually, IMHO Alim's patch is more of a hack than Addy's. There's >> already a 10ms delay between "power up" and "power on" in the MMC core >> in mmc_power_up() state. That delay is commented as: >> > Well, my suggestion (adding 5ms in switch_volatge) was based on DW_MMC > databook (V2.41a) section "7.4.1.2 Voltage switch Normal Scenario" > step #7 which says:" After the 5ms timer expires, the host voltage > regulator is stable". if you want to stable power, How about using SDMMC_CMD_INIT flag? It waits for 80-clock before sending command.(To stable power) - You can refer to CMD register description. Best Regards, Jaehoon Chung > > PS: I have limited to no access of my mails and workstation until > March 9th, so replies will be slow. > >> /* >> * This delay should be sufficient to allow the power supply >> * to reach the minimum voltage. >> */ >> mmc_delay(10); >> >> That means that assuming that the voltage is stable in MMC_POWER_UP is >> not valid anyway. >> >> >> Addy's patch certainly needs more comments. In another context Olof suggested: >> >> /* >> * Skip bus setup while voltage is still stabilizing. Instead, >> * bus setup will be done at MMC_POWER_ON. >> */ >> >> >> ...thinking about this more, though: really the voltage should be >> stabilized when the regulator call returns (see my comments below). >> In actuality the "right" fix might be to just rearrange this function >> a little not to turn the clock on _before_ we even try to turn the >> voltage on. >> >> I've got that coded up but I'm still testing it... If you want to try >> it too, you can find it at >> . >> >> Note that without my patch I find that I _really_ need Addy's patch to >> make sure that the card isn't busy in setup_bus. With my patch Addy's >> code catches the card busy less often. I'm still trying to see if >> there's a way to totally remove the need for his setup_bus and still >> trying to grok all the patches flying around... >> >> >>> =========== >>> [PATCH] mmc: dw_mmc: Wait for host voltage regulator to be stable >>> >>> Signed-off-by: Alim Akhtar >>> --- >>> drivers/mmc/host/dw_mmc.c | 3 +++ >>> 1 file changed, 3 insertions(+) >>> >>> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c >>> index 4d2e3c2..dc10fbb 100644 >>> --- a/drivers/mmc/host/dw_mmc.c >>> +++ b/drivers/mmc/host/dw_mmc.c >>> @@ -1202,6 +1202,9 @@ static int dw_mci_switch_voltage(struct mmc_host >>> *mmc, struct mmc_ios *ios) >>> } >>> mci_writel(host, UHS_REG, uhs); >>> >>> + /* wait for 5ms so that host voltage regulator is stable */ >>> + usleep_range(5000, 5500); >>> + >> >> Alim: if you have some other instance where you actually need VQMMC to >> stabilize it should probably be done in a different way. If I >> understand correctly it is the regulator core's job to make sure that >> voltage is stable before returning. If you have a gpio-regulator you >> may be able to use "startup-delay-us" to specify how long the >> regulator takes to come up. You could also look at >> 'regulator-enable-ramp-delay' >> >> -Doug > > > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/