Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751410AbeAEBcq (ORCPT + 1 other); Thu, 4 Jan 2018 20:32:46 -0500 Received: from regular1.263xmail.com ([211.150.99.135]:33060 "EHLO regular1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751100AbeAEBco (ORCPT ); Thu, 4 Jan 2018 20:32:44 -0500 X-263anti-spam: KSV:0; X-MAIL-GRAY: 0 X-MAIL-DELIVERY: 1 X-KSVirus-check: 0 X-ABS-CHECKED: 4 X-RL-SENDER: wxt@rock-chips.com X-FST-TO: linux-rockchip@lists.infradead.org X-SENDER-IP: 103.29.142.67 X-LOGIN-NAME: wxt@rock-chips.com X-UNIQUE-TAG: X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 Subject: Re: [PATCH 1/2] phy: rockchip-emmc: retry calpad busy trimming To: Shawn Lin , Kishon Vijay Abraham I Cc: Heiko Stuebner , Ziyuan Xu , linux-kernel@vger.kernel.org, Douglas Anderson , linux-rockchip@lists.infradead.org References: <1514859720-151161-1-git-send-email-shawn.lin@rock-chips.com> From: Caesar Wang Message-ID: <7fd47a8b-d254-6336-ced4-82b2a44a0e9d@rock-chips.com> Date: Fri, 5 Jan 2018 09:32:30 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: <1514859720-151161-1-git-send-email-shawn.lin@rock-chips.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: Hi Kishon & Shawn, As the bug had tracked on https://issuetracker.google.com/71561742. In some cases, the mmc phy power on failed during booting up. The log as below: ... [   2.375333] rockchip_emmc_phy_power: caldone timeout. [    2.377815] phy phy-ff770000.syscon:phy@f780.4: phy poweron failed --> -110 ... [    2.489295] mmc0: mmc_select_hs400es failed, error -110 [    2.489302] mmc0: error -110 whilst initialising MMC card .. 在 2018年01月02日 10:21, Shawn Lin 写道: > It turns out that 5us isn't enough for all cases, so let's > retry some more times to wait for caldone. > > Signed-off-by: Shawn Lin Tested-by: Caesar Wang I had tested on rk3399 chromebook, so feel free to add my tag. -Caesar > --- > > drivers/phy/rockchip/phy-rockchip-emmc.c | 21 +++++++++++++-------- > 1 file changed, 13 insertions(+), 8 deletions(-) > > diff --git a/drivers/phy/rockchip/phy-rockchip-emmc.c b/drivers/phy/rockchip/phy-rockchip-emmc.c > index f1b24f1..512a6ef 100644 > --- a/drivers/phy/rockchip/phy-rockchip-emmc.c > +++ b/drivers/phy/rockchip/phy-rockchip-emmc.c > @@ -76,6 +76,10 @@ > #define PHYCTRL_OTAPDLYSEL_MASK 0xf > #define PHYCTRL_OTAPDLYSEL_SHIFT 0x7 > > +#define PHYCTRL_IS_CALDONE(x) \ > + ((((x) >> PHYCTRL_CALDONE_SHIFT) & \ > + PHYCTRL_CALDONE_MASK) == PHYCTRL_CALDONE_DONE) > + > struct rockchip_emmc_phy { > unsigned int reg_offset; > struct regmap *reg_base; > @@ -160,15 +164,16 @@ static int rockchip_emmc_phy_power(struct phy *phy, bool on_off) > PHYCTRL_PDB_SHIFT)); > > /* > - * According to the user manual, it asks driver to > - * wait 5us for calpad busy trimming > + * According to the user manual, it asks driver to wait 5us for > + * calpad busy trimming. However it is documented that this value is > + * PVT(A.K.A process,voltage and temperature) relevant, so some > + * failure cases are found which indicates we should be more tolerant > + * to calpad busy trimming. > */ > - udelay(5); > - regmap_read(rk_phy->reg_base, > - rk_phy->reg_offset + GRF_EMMCPHY_STATUS, > - &caldone); > - caldone = (caldone >> PHYCTRL_CALDONE_SHIFT) & PHYCTRL_CALDONE_MASK; > - if (caldone != PHYCTRL_CALDONE_DONE) { > + if (regmap_read_poll_timeout(rk_phy->reg_base, > + rk_phy->reg_offset + GRF_EMMCPHY_STATUS, > + caldone, PHYCTRL_IS_CALDONE(caldone), > + 5, 50)) { > pr_err("rockchip_emmc_phy_power: caldone timeout.\n"); > return -ETIMEDOUT; > }