From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753730AbdA0CDk (ORCPT ); Thu, 26 Jan 2017 21:03:40 -0500 Received: from lucky1.263xmail.com ([211.157.147.135]:40458 "EHLO lucky1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750784AbdA0CDi (ORCPT ); Thu, 26 Jan 2017 21:03:38 -0500 X-263anti-spam: KSV:0;BIG:0; X-MAIL-GRAY: 1 X-MAIL-DELIVERY: 0 X-KSVirus-check: 0 X-ADDR-CHECKED4: 1 X-ABS-CHECKED: 1 X-SKE-CHECKED: 1 X-RL-SENDER: shawn.lin@rock-chips.com X-FST-TO: linux-kernel@vger.kernel.org X-SENDER-IP: 220.200.59.95 X-LOGIN-NAME: shawn.lin@rock-chips.com X-UNIQUE-TAG: X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 Subject: Re: [PATCH 01/13] mmc: bcm2835: add bcm2835_read_wait_sdcmd To: Gerd Hoffmann , linux-rpi-kernel@lists.infradead.org References: <1485473846-24537-1-git-send-email-kraxel@redhat.com> <1485473846-24537-2-git-send-email-kraxel@redhat.com> Cc: Stefan Wahren , Eric Anholt , Ulf Hansson , linux-mmc@vger.kernel.org, Florian Fainelli , Ray Jui , Scott Branden , "maintainer:BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITE..." , Stephen Warren , Lee Jones , "moderated list:BROADCOM BCM2835 ARM ARCHITECTURE" , open list From: Shawn Lin Message-ID: Date: Fri, 27 Jan 2017 10:03:19 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 In-Reply-To: <1485473846-24537-2-git-send-email-kraxel@redhat.com> Content-Type: text/plain; charset=gbk; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2017/1/27 7:37, Gerd Hoffmann wrote: > Signed-off-by: Gerd Hoffmann > --- > drivers/mmc/host/bcm2835.c | 30 ++++++++++++++++++++++++++++++ > 1 file changed, 30 insertions(+) > > diff --git a/drivers/mmc/host/bcm2835.c b/drivers/mmc/host/bcm2835.c > index 9744517..ceee4cf 100644 > --- a/drivers/mmc/host/bcm2835.c > +++ b/drivers/mmc/host/bcm2835.c > @@ -609,6 +609,36 @@ static void bcm2835_prepare_data(struct bcm2835_host *host, > writel(data->blocks, host->ioaddr + SDHBLC); > } > > +static u32 bcm2835_read_wait_sdcmd(struct bcm2835_host *host, u32 timeout, > + bool check_fail) > +{ > + struct device *dev = &host->pdev->dev; > + unsigned long start = jiffies; > + unsigned long fastpoll = start + usecs_to_jiffies(10); > + unsigned long end = start + msecs_to_jiffies(timeout); > + u32 value; > + > + for (;;) { > + value = readl(host->ioaddr + SDCMD); > + if (!(value & SDCMD_NEW_FLAG)) > + break; > + if (check_fail && (value & SDCMD_FAIL_FLAG)) > + break; > + if (time_after(jiffies, end)) { > + dev_err(dev, "%s: timeout (%d us)\n", > + __func__, timeout); > + break; > + } > + > + /* if it takes longer reduce poll interval */ > + if (time_after(jiffies, fastpoll)) > + udelay(10); > + else > + cpu_relax(); > + } Use readl_poll_timeout intead of open-coding them.. > + return value; > +} > + > bool bcm2835_send_command(struct bcm2835_host *host, > struct mmc_command *cmd) > { > -- Best Regards Shawn Lin