From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753400AbbBYKgB (ORCPT ); Wed, 25 Feb 2015 05:36:01 -0500 Received: from mailout2.samsung.com ([203.254.224.25]:50436 "EHLO mailout2.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753231AbbBYKf6 (ORCPT ); Wed, 25 Feb 2015 05:35:58 -0500 X-AuditID: cbfee68d-f79296d000004278-73-54eda58c8b91 Message-id: <54EDA58C.7050605@samsung.com> Date: Wed, 25 Feb 2015 19:35:56 +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: Doug Anderson , Seungwon Jeon , Ulf Hansson Cc: Alim Akhtar , Sonny Rao , Andrew Bresticker , Heiko Stuebner , Addy Ke , Alexandru Stan , javier.martinez@collabora.co.uk, chris@printf.net, linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/2] mmc: dw_mmc: Give a good reset after we give power References: <1424458639-23330-1-git-send-email-dianders@chromium.org> <1424458639-23330-2-git-send-email-dianders@chromium.org> In-reply-to: <1424458639-23330-2-git-send-email-dianders@chromium.org> Content-type: text/plain; charset=windows-1252 Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrPIsWRmVeSWpSXmKPExsWyRsSkWLdn6dsQgxXb9C1Wvv/LaLHs/3cm iwfztrFZNLyYxGox4fJ2Rouzyw6yWfx/9JrV4ujvAovLu+awWRz5389o8eTMTEaLD/cvMlsc XxvuwOsxu+Eii8ff59dZPO5c28PmcePVQiaPv7P2s3j0bVnF6LH92jxmj8+b5AI4orhsUlJz MstSi/TtErgy/u+YxFawR6hiTfcrpgbGg3xdjJwcEgImEjfX7meHsMUkLtxbz9bFyMUhJLCU UWJXyxc2mKJl7XeZIBLTGSW+t3axQzivGSXOtF1mBqniFdCSeHf9PFgHi4CqxPJlq1lBbDYB HYnt344zgdiiAmESE28+ZoWoF5T4MfkeC4gtIlAuMWdrD9gGZoGrTBIHF59iBEkIC3hL7P92 C2pbI6PE3POzwLZxCrhJHH1xHCjBAdShJ3H/ohZImFlAXmLzmrfMIPUSAlM5JNav3Q11kYDE t8mHWEDqJQRkJTYdYIZ4TVLi4IobLBMYxWYhuWkWwtRZSKYuYGRexSiaWpBcUJyUXmSoV5yY W1yal66XnJ+7iREYz6f/PevdwXj7gPUhRgEORiUe3gThNyFCrIllxZW5hxhNgY6YyCwlmpwP TBp5JfGGxmZGFqYmpsZG5pZmSuK8ilI/g4UE0hNLUrNTUwtSi+KLSnNSiw8xMnFwSjUw5hy4 YDvLPc3NjWH1tJoPmWlvG/IMOllLt7O47FrofX5BKlv36Qufv6qlmkc/ttt23tmPoe7BhhlZ uxoyw1yV9Ve+utp2wkprfjnXr0dy1W+8exJS707fde/GmoIFz2su1O9ntXKNrv+SGP18e8Ex jZLMsjNNGmc+W2j2cjw5HdXymIvvz440JZbijERDLeai4kQA6jlKouICAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprJKsWRmVeSWpSXmKPExsVy+t9jQd2epW9DDLq61CxWvv/LaLHs/3cm iwfztrFZNLyYxGox4fJ2Rouzyw6yWfx/9JrV4ujvAovLu+awWRz5389o8eTMTEaLD/cvMlsc XxvuwOsxu+Eii8ff59dZPO5c28PmcePVQiaPv7P2s3j0bVnF6LH92jxmj8+b5AI4ohoYbTJS E1NSixRS85LzUzLz0m2VvIPjneNNzQwMdQ0tLcyVFPISc1NtlVx8AnTdMnOATlZSKEvMKQUK BSQWFyvp22GaEBripmsB0xih6xsSBNdjZIAGEtYwZvzfMYmtYI9QxZruV0wNjAf5uhg5OSQE TCSWtd9lgrDFJC7cW8/WxcjFISQwnVHie2sXO4TzmlHiTNtlZpAqXgEtiXfXz7OB2CwCqhLL l61mBbHZBHQktn87DjZJVCBMYuLNx6wQ9YISPybfYwGxRQTKJeZs7WECGcoscJVJ4uDiU4wg CWEBb4n9325BbWtklJh7fhbYNk4BN4mjL44DJTiAOvQk7l/UAgkzC8hLbF7zlnkCo8AsJDtm IVTNQlK1gJF5FaNoakFyQXFSeq6RXnFibnFpXrpecn7uJkZwsngmvYNxVYPFIUYBDkYlHt5E 4TchQqyJZcWVuYcYJTiYlUR49898GyLEm5JYWZValB9fVJqTWnyI0RQYAhOZpUST84GJLK8k 3tDYxMzI0sjc0MLI2FxJnFfJvi1ESCA9sSQ1OzW1ILUIpo+Jg1OqgZHHYGWrlKnZ8ymhy8+u 9KtSeCxuzvhyy57VwspzdjYUPH6peGSu6o3KN+Fmx/azMZ47uWhS4ZQ5z0PnrOJwFrjycJeT ftGe4ndvPzM+YpxmKuAjUhBw5KxbzVIe3p+PIjlmPTKeECXde1PL2LPThrNiW8qaZ8o5IS++ HQ68wcT65HiCkrHQshdKLMUZiYZazEXFiQB8wXsRLAMAAA== 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 Dear, Doug. Looks good to me. Thanks! Acked-by: Jaehoon Chung Best Regards, Jaehoon Chung On 02/21/2015 03:57 AM, Doug Anderson wrote: > We should give dw_mmc a good reset after we apply power. On some > boards vqmmc may actually be connected to the IP block in the SoC so > it's good to reset after power comes in. > > Without this we sometimes see failures enumerating cards on rk3288. > > Signed-off-by: Doug Anderson > --- > drivers/mmc/host/dw_mmc.c | 27 ++++++++++++++++++--------- > 1 file changed, 18 insertions(+), 9 deletions(-) > > diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c > index 43fcae1..6a712ae 100644 > --- a/drivers/mmc/host/dw_mmc.c > +++ b/drivers/mmc/host/dw_mmc.c > @@ -1119,13 +1119,23 @@ static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) > mci_writel(slot->host, PWREN, regs); > break; > case MMC_POWER_ON: > - if (!IS_ERR(mmc->supply.vqmmc) && !slot->host->vqmmc_enabled) { > - ret = regulator_enable(mmc->supply.vqmmc); > - if (ret < 0) > - dev_err(slot->host->dev, > - "failed to enable vqmmc regulator\n"); > - else > + if (!slot->host->vqmmc_enabled) { > + if (!IS_ERR(mmc->supply.vqmmc)) { > + ret = regulator_enable(mmc->supply.vqmmc); > + if (ret < 0) > + dev_err(slot->host->dev, > + "failed to enable vqmmc\n"); > + else > + slot->host->vqmmc_enabled = true; > + > + } else { > + /* Keep track so we don't reset again */ > slot->host->vqmmc_enabled = true; > + } > + > + /* Reset our state machine after powering on */ > + dw_mci_ctrl_reset(slot->host, > + SDMMC_CTRL_ALL_RESET_FLAGS); > } > > /* Adjust clock / bus width after power is up */ > @@ -1139,10 +1149,9 @@ static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) > if (!IS_ERR(mmc->supply.vmmc)) > mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0); > > - if (!IS_ERR(mmc->supply.vqmmc) && slot->host->vqmmc_enabled) { > + if (!IS_ERR(mmc->supply.vqmmc) && slot->host->vqmmc_enabled) > regulator_disable(mmc->supply.vqmmc); > - slot->host->vqmmc_enabled = false; > - } > + slot->host->vqmmc_enabled = false; > > regs = mci_readl(slot->host, PWREN); > regs &= ~(1 << slot->id); >