Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759410AbbBIEva (ORCPT ); Sun, 8 Feb 2015 23:51:30 -0500 Received: from mail-qg0-f43.google.com ([209.85.192.43]:65145 "EHLO mail-qg0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759334AbbBIEv2 (ORCPT ); Sun, 8 Feb 2015 23:51:28 -0500 MIME-Version: 1.0 In-Reply-To: <1423134801-23219-1-git-send-email-addy.ke@rock-chips.com> References: <1423134801-23219-1-git-send-email-addy.ke@rock-chips.com> Date: Mon, 9 Feb 2015 05:51:27 +0100 Message-ID: Subject: Re: [PATCH] mmc: dw_mmc: fix bug that cause 'Timeout sending command' From: Ulf Hansson To: Addy Ke Cc: Rob Herring , =?UTF-8?Q?Pawe=C5=82_Moll?= , Mark Rutland , Ian Campbell , Kumar Gala , Randy Dunlap , "tgih.jun@samsung.com" , Jaehoon Chung , Chris Ball , Dinh Nguyen , =?UTF-8?Q?Heiko_St=C3=BCbner?= , Olof Johansson , Doug Anderson , Sonny Rao , Alexandru Stan , "devicetree@vger.kernel.org" , "linux-doc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , linux-mmc , "linux-arm-kernel@lists.infradead.org" , "open list:ARM/Rockchip SoC..." , "zhenfu.fang" , Eddie Cai , lintao , chenfen , zyf , Jianqun Xu , Tao Huang , Chris Zhong , =?UTF-8?B?5aea5pm65oOF?= , Han Jiang , Kever Yang , zhangqing , Lin Huang Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3213 Lines: 88 On 5 February 2015 at 12:13, Addy Ke wrote: > > Because of some uncertain factors, such as worse card or worse hardware, > DAT[3:0](the data lines) may be pulled down by card, and mmc controller > will be in busy state. This should not happend when mmc controller > send command to update card clocks. If this happends, mci_send_cmd will > be failed and we will get 'Timeout sending command', and then system will > be blocked. To avoid this, we need reset mmc controller. > > Signed-off-by: Addy Ke Hi Addy, Should I consider $subject patch as a better option to the one below? [PATCH] mmc: dw_mmc: rockchip: Add DW_MCI_QUIRK_RETRY_DELAY https://lkml.org/lkml/2015/1/13/562 Kind regards Uffe > --- > drivers/mmc/host/dw_mmc.c | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c > index 4d2e3c2..b1d6dfb 100644 > --- a/drivers/mmc/host/dw_mmc.c > +++ b/drivers/mmc/host/dw_mmc.c > @@ -100,6 +100,7 @@ struct idmac_desc { > }; > #endif /* CONFIG_MMC_DW_IDMAC */ > > +static int dw_mci_card_busy(struct mmc_host *mmc); > static bool dw_mci_reset(struct dw_mci *host); > static bool dw_mci_ctrl_reset(struct dw_mci *host, u32 reset); > > @@ -888,6 +889,26 @@ static void mci_send_cmd(struct dw_mci_slot *slot, u32 cmd, u32 arg) > cmd, arg, cmd_status); > } > > +static void dw_mci_wait_busy(struct dw_mci_slot *slot) > +{ > + struct dw_mci *host = slot->host; > + unsigned long timeout = jiffies + msecs_to_jiffies(500); > + > + while (time_before(jiffies, timeout)) { > + if (!dw_mci_card_busy(slot->mmc)) > + return; > + } > + dev_err(host->dev, "Data busy (status %#x)\n", > + mci_readl(slot->host, STATUS)); > + > + /* > + * Data busy, this should not happend when mmc controller send command > + * to update card clocks in non-volt-switch state. If it happends, we > + * should reset controller to avoid getting "Timeout sending command". > + */ > + dw_mci_ctrl_reset(host, SDMMC_CTRL_ALL_RESET_FLAGS); > +} > + > static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit) > { > struct dw_mci *host = slot->host; > @@ -899,6 +920,8 @@ static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit) > /* We must continue to set bit 28 in CMD until the change is complete */ > if (host->state == STATE_WAITING_CMD11_DONE) > sdmmc_cmd_bits |= SDMMC_CMD_VOLT_SWITCH; > + else > + dw_mci_wait_busy(slot); > > if (!clock) { > mci_writel(host, CLKENA, 0); > -- > 1.8.3.2 > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-mmc" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- 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/