Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759510AbbBIHFI (ORCPT ); Mon, 9 Feb 2015 02:05:08 -0500 Received: from mailout3.samsung.com ([203.254.224.33]:36769 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753201AbbBIHFD (ORCPT ); Mon, 9 Feb 2015 02:05:03 -0500 X-AuditID: cbfee68e-f79b46d000002b74-6f-54d85c15e698 Message-id: <54D85C15.8010007@samsung.com> Date: Mon, 09 Feb 2015 16:04:53 +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: Addy , Ulf Hansson Cc: Rob Herring , =?UTF-8?B?UGF3ZcWCIE1vbGw=?= , Mark Rutland , Ian Campbell , Kumar Gala , Randy Dunlap , "tgih.jun@samsung.com" , Chris Ball , Dinh Nguyen , =?UTF-8?B?SGVpa28gU3TDvGJuZXI=?= , 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 Subject: Re: [PATCH] mmc: dw_mmc: fix bug that cause 'Timeout sending command' References: <1423134801-23219-1-git-send-email-addy.ke@rock-chips.com> <54D85A2F.1090301@rock-chips.com> In-reply-to: <54D85A2F.1090301@rock-chips.com> Content-type: text/plain; charset=utf-8 Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA01Sa0iTYRjl/W5OS3pbaW+LDBcRSFlee8IMox99EITQDSKyZV+mOR2bSjdq lZpZzZmWZGVqs4tol000umAuwy4qrqXbRKZlqTmFyLxk2tpcUP/OOZznPOeBR0SLbaxElJiS JihTZMlSzoepmh+uWOm327ptdcvvKLjtHKdAPXCJhaycQQ4Grr5mQWuuQ3CzsZWFltsNHDS9 v0VD3lAZC85PDhZeOdoZmHj4loaa0nEaWgfvIagt+snB9W97QN/bwUJZto4B85PrHDQ68xB8 73HSUGExUfDWMsKBtqiageGuIgaynjd6wefmqwi+dZtoaKreCZdKxXDjvo6Dznybyz80QEPm r14KbvY8pmOW8lnPtRxfVVKF+GtqE8ObNRcp/t6dHxxvuBvE6yvPcXxXxzMX053kP7w+zfLW wTKKny6uZ3hNTSXi6zpKaH5EHxA7Z5fPuv1CcmKGoFy1fq/PQVtzJ6f4GHC4+VQNpUZ3FuQi bxHB4eSp6SXlwf6kzf6Ay0U+IjGuQKSnZMpFRDOmN1OHPXo5IvapWspDHIgU5dm83NO+OIiM ntexbszgZcT4bHJG5/AKUjfWNLPBD+8g+bZe1uOfSyYK7Iwbz8ebiPZWC3KH0lgzizisZ2c2 z8NbyKMrYW6PGD9CpOJzuht742AyWt3g5bbQeDkpLJS7ZRovIYaqYdpzTJ83uWiI9dTBZKzA yHhuWUz0L/5aFpKGu1ZGi/yL/ytU/C+0+L/QUkRXIj9BEa9Q7UtQhgarZHJVekpCcHyqXI9c H/fud5/mMbK9iDIiLELS2b5tI5ZtYlaWoToiN6IIV4l8WuIXn+p60pS0uJCwyFCICI8IC12z NlK6wHev5OdWMU6QpQmHBEEhKOOU6cmCyogokbdEjTZUbv8SOaHbLI2rLz1QYzgW2P1U3N5l /tDXHh3ZndRpXiJnShwPo6aVO+pnO2Mzai+cwBoJn2G3D+X2CQe23HgjBHMb2f6t2WsSyzKt Z/sDn+xzfBpfeGYoUPw1afv5dQU5MYZyf3vb5clCy9GdG4/HleP2RcM/wpYGRL/UzLE0SBnV QVlIEK1Uyf4AUr9HA2wDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrCJsWRmVeSWpSXmKPExsVy+t9jAV3RmBshBrPu61ks+/+dyaLhxSRW i9aOV2wWL2aeYLWYcHk7o8X8I+dYLc4uO8hmcfzSYmaL/jcLWS3+P3rNanH09VUWix8bTjFb bFnwndni3KuVjBbbpv9ks5jzIc5i0+NrrBYL25awWFzeNYfN4sj/fkaLTw/+M1ssvX6RyeLU 9c9sFhOmr2WxeHtnOotF694j7BZPzsxktPhw/yKzxfG14RaTFghZzF23hM3i1sSbQPVvXjBb tPx+zGQx/8EOZgdlj9a9E9g81sxbw+gxu+Eii8flvl4mj5XLv7B5bF6h5bFpVSebx51re4C8 JfUeV040sXrceLWQyePvrP0sHn1bVjF6bL82j9nj8ya5AP6oBkabjNTElNQihdS85PyUzLx0 WyXv4HjneFMzA0NdQ0sLcyWFvMTcVFslF58AXbfMHGAAKimUJeaUAoUCEouLlfTtME0IDXHT tYBpjND1DQmC6zEyQAMJaxgzbp65xVbwUK7iTOMWpgbG5eJdjBwcEgImEif/VHQxcgKZYhIX 7q1n62Lk4hASWMQoce/PNiYI5zWjxPT+m+wgVbwCWhJfu5ewgtgsAqoSh/b8AouzCehIbP92 nAnEFhUIk5h48zErRL2gxI/J91hAbBEBd4kJi88yggxlFujjlnh9o50N5AphAT+JjdOMQWqE BDYySix9UgpicwroSXxde5AdpIRZQF1iypRckDCzgLzE5jVvmScwCsxCsmEWQtUsJFULGJlX MYqmFiQXFCel5xrqFSfmFpfmpesl5+duYgSn0GdSOxhXNlgcYhTgYFTi4b34+XqIEGtiWXFl 7iFGCQ5mJRFeo49AId6UxMqq1KL8+KLSnNTiQ4ymQP9PZJYSTc4Hpve8knhDYxMzI0sjc0ML I2NzJXFeJfu2ECGB9MSS1OzU1ILUIpg+Jg5OqQbGGT08c2dVHVrHPsHoMP+DiH/u35vPut7J /ntsvveBxz3CPQ6L3O82zSlxOVAww+bht4au+cvvRExLPDlT8vjqRK05S0pWal5midafJbS+ Lln73KJfSxwUXh/fzmu0Sp1h07OgCxes7Lkscj1uWn7K3tGX+eCS8OUaw4L++iP90500ni8y /qcmqcRSnJFoqMVcVJwIAMPkVke3AwAA 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: 4073 Lines: 114 On 02/09/2015 03:56 PM, Addy wrote: > > > On 2015.02.09 12:51, Ulf Hansson wrote: >> 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. I know that it needs to check whether card is busy or not, before clock-off. This patch seems to related with it. right? Best Regards, Jaehoon Chung >>> >>> Signed-off-by: Addy Ke >> >> Hi Addy, >> >> Should I consider $subject patch as a better option to the one below? > No: > This patch fix the bug, which can be found by script: > cd /sys/bus/platform/drivers/dwmmc_rockchip > for i in $(seq 1 10000); do > echo "========================" $i > echo ff0c0000.dwmmc > unbind > sleep .5 > echo ff0c0000.dwmmc > bind > sleep 2 > done > >> [PATCH] mmc: dw_mmc: rockchip: Add DW_MCI_QUIRK_RETRY_DELAY > This patch is for tuning issue: we should delay until card go to idle state, when the previous command return error. >> 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/