Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp2377754ybh; Mon, 16 Mar 2020 01:59:02 -0700 (PDT) X-Google-Smtp-Source: ADFU+vutQqGf/ovwG+iMewGA/30MyZg52rYHz7jUv2VyqixncGDpLemlE49ISp6iRM/drRvQneAI X-Received: by 2002:a9d:3b8b:: with SMTP id k11mr8956319otc.245.1584349142671; Mon, 16 Mar 2020 01:59:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584349142; cv=none; d=google.com; s=arc-20160816; b=LoShr7AP7dQZaA39alPnO8sFtLOC3ZcnDIIKXlIWqH7pGpOBKCulmCxdueM9prlIe4 dGkVkfwyhCHXeiZUyBsQ3BVMcp+lwQXochnTxaQyywsSlr3jnSbYr0AMLGTu8HbnBMRW vlB7RdkFFn29uaS9vdKoKCuvYD63X0QKfxa3od82o8QOwDyXihWymug1YEEbu7kFvzhR uAsS5Z4OOIVnPfLRLTroVVJUBzLt0AIE1ZZZmDCKBVxQLXiV/D9i7Z6/i7lnJhuoKQZU /T5OWgDOADI3AHyJEUHqFxszG7GNJ2ZMYam/5lgp+0mqEfUbifsx2VsdeeftIWqzZ8Cx v8Xg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:message-id:references :in-reply-to:subject:cc:to:from:date:content-transfer-encoding :mime-version:dkim-signature; bh=ijq3uor9SMJb3ExZBsPo87hwudJNjl8YhdOh+sCNnWA=; b=yefKigwYWyTqYhJyuck8+N/8zb4WD6g5THNsnSqy7uEZm7Lvbkqlgk2dnyII6KFs0O /PS3X1nCHM4xpbLLzFbpfAJ5I5SBrH/G4NUwo/+IKwJpFYCn79neS5WUC6QXnxeLpKsV tXokhy7bVqXebF1SXRj+0El+58wvLyNCCNHWlEBbNNcuI+SaxOdRHkiw6gdZUx5UTtuA ncS2WwKDGZBKua82wZzyouI8euTYLREgoydf1j9IdKr2FOvKcaHH04viVvoX2FwTJ/u/ MT3x5KuFVmvrHsvme+O1m8789j5k3DMn3f2YpNgubv9RO/lzk8kUq2QcC0k5g1m4KCAa QCGA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@mg.codeaurora.org header.s=smtp header.b=rHQ1H3Wq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u21si8575880oiv.267.2020.03.16.01.58.48; Mon, 16 Mar 2020 01:59:02 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@mg.codeaurora.org header.s=smtp header.b=rHQ1H3Wq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730208AbgCPI5K (ORCPT + 99 others); Mon, 16 Mar 2020 04:57:10 -0400 Received: from mail26.static.mailgun.info ([104.130.122.26]:61987 "EHLO mail26.static.mailgun.info" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730075AbgCPI5J (ORCPT ); Mon, 16 Mar 2020 04:57:09 -0400 DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=mg.codeaurora.org; q=dns/txt; s=smtp; t=1584349028; h=Message-ID: References: In-Reply-To: Subject: Cc: To: From: Date: Content-Transfer-Encoding: Content-Type: MIME-Version: Sender; bh=ijq3uor9SMJb3ExZBsPo87hwudJNjl8YhdOh+sCNnWA=; b=rHQ1H3WqpyqR2AHkpKUUqcdN/LSDcCh7aj6kR4E8hzBzkpF1KO4U7OLH96BBjsKFxrf0eprn qIfhutMJownkC5Hzv5pOjOfyd01/ByouYtfLguX3yDjYefw3LrfmF178rly1XMIOqzYB0Y2w /F52GNsPReD1cEtHmU+S3ff6kRY= X-Mailgun-Sending-Ip: 104.130.122.26 X-Mailgun-Sid: WyI0MWYwYSIsICJsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIiwgImJlOWU0YSJd Received: from smtp.codeaurora.org (ec2-35-166-182-171.us-west-2.compute.amazonaws.com [35.166.182.171]) by mxa.mailgun.org with ESMTP id 5e6f3f56.7fe344735f80-smtp-out-n04; Mon, 16 Mar 2020 08:56:54 -0000 (UTC) Received: by smtp.codeaurora.org (Postfix, from userid 1001) id 6E05EC4478F; Mon, 16 Mar 2020 08:56:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-caf-mail-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=2.0 tests=ALL_TRUSTED,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.codeaurora.org (localhost.localdomain [127.0.0.1]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: cang) by smtp.codeaurora.org (Postfix) with ESMTPSA id 37B92C433CB; Mon, 16 Mar 2020 08:56:51 +0000 (UTC) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Mon, 16 Mar 2020 16:56:51 +0800 From: Can Guo To: Stanley Chu Cc: linux-scsi@vger.kernel.org, martin.peter~sen@oracle.com, avri.altman@wdc.com, alim.akhtar@samsung.com, jejb@linux.ibm.com, beanhuo@micron.com, asutoshd@codeaurora.org, matthias.bgg@gmail.com, bvanassche@acm.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kuohong.wang@mediatek.com, peter.wang@mediatek.com, chun-hung.wu@mediatek.com, andy.teng@mediatek.com Subject: Re: [PATCH v6 3/7] scsi: ufs: introduce common delay function In-Reply-To: <20200316085303.20350-4-stanley.chu@mediatek.com> References: <20200316085303.20350-1-stanley.chu@mediatek.com> <20200316085303.20350-4-stanley.chu@mediatek.com> Message-ID: <19f7e050d992c67e363d6d582393c5a0@codeaurora.org> X-Sender: cang@codeaurora.org User-Agent: Roundcube Webmail/1.3.9 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2020-03-16 16:52, Stanley Chu wrote: > Introduce common delay function to collect all delay requirements > to simplify driver and take choices of udelay and usleep_range into > consideration. > > Signed-off-by: Stanley Chu > Reviewed-by: Avri Altman Reviewed-by: Can Guo > --- > drivers/scsi/ufs/ufshcd.c | 27 ++++++++++++++++++--------- > drivers/scsi/ufs/ufshcd.h | 1 + > 2 files changed, 19 insertions(+), 9 deletions(-) > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > index 314e808b0d4e..9fea346f7d22 100644 > --- a/drivers/scsi/ufs/ufshcd.c > +++ b/drivers/scsi/ufs/ufshcd.c > @@ -597,6 +597,18 @@ static void ufshcd_print_pwr_info(struct ufs_hba > *hba) > hba->pwr_info.hs_rate); > } > > +void ufshcd_wait_us(unsigned long us, unsigned long tolerance, bool > can_sleep) > +{ > + if (!us) > + return; > + > + if (us < 10 || !can_sleep) > + udelay(us); > + else > + usleep_range(us, us + tolerance); > +} > +EXPORT_SYMBOL_GPL(ufshcd_wait_us); > + > /* > * ufshcd_wait_for_register - wait for register value to change > * @hba - per-adapter interface > @@ -620,10 +632,7 @@ int ufshcd_wait_for_register(struct ufs_hba *hba, > u32 reg, u32 mask, > val = val & mask; > > while ((ufshcd_readl(hba, reg) & mask) != val) { > - if (can_sleep) > - usleep_range(interval_us, interval_us + 50); > - else > - udelay(interval_us); > + ufshcd_wait_us(interval_us, 50, can_sleep); > if (time_after(jiffies, timeout)) { > if ((ufshcd_readl(hba, reg) & mask) != val) > err = -ETIMEDOUT; > @@ -3565,7 +3574,7 @@ static inline void > ufshcd_add_delay_before_dme_cmd(struct ufs_hba *hba) > } > > /* allow sleep for extra 50us if needed */ > - usleep_range(min_sleep_time_us, min_sleep_time_us + 50); > + ufshcd_wait_us(min_sleep_time_us, 50, true); > } > > /** > @@ -4289,7 +4298,7 @@ int ufshcd_hba_enable(struct ufs_hba *hba) > * instruction might be read back. > * This delay can be changed based on the controller. > */ > - usleep_range(1000, 1100); > + ufshcd_wait_us(1000, 100, true); > > /* wait for the host controller to complete initialization */ > retry = 10; > @@ -4301,7 +4310,7 @@ int ufshcd_hba_enable(struct ufs_hba *hba) > "Controller enable failed\n"); > return -EIO; > } > - usleep_range(5000, 5100); > + ufshcd_wait_us(5000, 100, true); > } > > /* enable UIC related interrupts */ > @@ -6224,7 +6233,7 @@ static int ufshcd_abort(struct scsi_cmnd *cmd) > reg = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL); > if (reg & (1 << tag)) { > /* sleep for max. 200us to stabilize */ > - usleep_range(100, 200); > + ufshcd_wait_us(100, 100, true); > continue; > } > /* command completed already */ > @@ -7786,7 +7795,7 @@ static void ufshcd_vreg_set_lpm(struct ufs_hba > *hba) > */ > if (!ufshcd_is_link_active(hba) && > hba->dev_quirks & UFS_DEVICE_QUIRK_DELAY_BEFORE_LPM) > - usleep_range(2000, 2100); > + ufshcd_wait_us(2000, 100, true); > > /* > * If UFS device is either in UFS_Sleep turn off VCC rail to save > some > diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h > index 52425371082a..842f0223f5e5 100644 > --- a/drivers/scsi/ufs/ufshcd.h > +++ b/drivers/scsi/ufs/ufshcd.h > @@ -792,6 +792,7 @@ int ufshcd_init(struct ufs_hba * , void __iomem * > , unsigned int); > int ufshcd_make_hba_operational(struct ufs_hba *hba); > void ufshcd_remove(struct ufs_hba *); > int ufshcd_uic_hibern8_exit(struct ufs_hba *hba); > +void ufshcd_wait_us(unsigned long us, unsigned long tolerance, bool > can_sleep); > int ufshcd_wait_for_register(struct ufs_hba *hba, u32 reg, u32 mask, > u32 val, unsigned long interval_us, > unsigned long timeout_ms, bool can_sleep);