Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp1070031pxk; Thu, 10 Sep 2020 06:24:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy2ShQQtcuGeW0ZOPH4PtWejRfz8M0T46RmlsNhMeTQbt4DZ7hz8GqqglTSIGrrG/B56F2h X-Received: by 2002:a17:906:3bd8:: with SMTP id v24mr9121812ejf.509.1599744282730; Thu, 10 Sep 2020 06:24:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1599744282; cv=none; d=google.com; s=arc-20160816; b=Fb+qq9gbnPH9K9VMBdXnsHxiih61tnzfZg6uA1GvAXvriNcnCCp1a5edeJAUvLlmOe tkQOeV74Wi8zXCqcP/eNfqK+VU4PT+int+G6dD3attJNEsITlLuPWlgBswQz1Zm7G0Jn Mzvd6LaGQxzH//ti+iYiQYXWaW749mQc+4tswnpOvAqW3BeJh3eYe1XBi3FPVzau8779 iEFXS7uFat9YD/zR9qySXrN/06JQ8OalcXi5D2rHHvL8C72fBEo5BPAE9kk3KrKRXNkF X+cqmcgopCnbyICtP4Xf/8BD0lLQNzgXP8tO2YAOf2ZcJF0rTIZ4pvrMh/lDQteVFKhJ 01YQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature; bh=Bq+U/roPoyR+PFGiWvFpI6j3vo6m28j+pYae81Oydrk=; b=tWIx2Ko8vr+GmaUj8qiMERw2YjF6iIMDUv5OR8v9kjZXd8y+3yjO+m2dC3o9p6NeLW LnsVh/VjjhV1C/gZwNfmc36LONqFyzKOXoTmOg5Dc0Nm9f266jDK+ttzE2ko1iptEeoB q36a7UwRvTznCpnQMvg7boHOINY5tMy2LOOLMslH6j0+7re7PiNs8BzJIS758fS/vLYy fMX08QMDdnWb5EWqmlw315mVT3lOzsfqamaJowyjfeO4eu3830W700rtz3RYhXJ6Kx1D N0HEW7OPl4/EHSOcZTYFq17rzXiwhRf0Mh4QgmE3jyE35kxUlsAAHeryjy2npXbhG36f wDxQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=LxW9JQar; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b29si3423832ejl.385.2020.09.10.06.24.19; Thu, 10 Sep 2020 06:24:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=LxW9JQar; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730755AbgIJNWn (ORCPT + 99 others); Thu, 10 Sep 2020 09:22:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43844 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730717AbgIJNMX (ORCPT ); Thu, 10 Sep 2020 09:12:23 -0400 Received: from mail-wr1-x441.google.com (mail-wr1-x441.google.com [IPv6:2a00:1450:4864:20::441]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C0A4AC061757 for ; Thu, 10 Sep 2020 06:12:16 -0700 (PDT) Received: by mail-wr1-x441.google.com with SMTP id m6so6688235wrn.0 for ; Thu, 10 Sep 2020 06:12:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=Bq+U/roPoyR+PFGiWvFpI6j3vo6m28j+pYae81Oydrk=; b=LxW9JQardfe6ovRqT818t4MTPCbypCYUo6YFqdrT244gD5a1S0M2FecEI0fJMIgCzr Ar89gXm/TIGENRR2BL49FoHZo7vujerVPjd5M+e2s3HXP4Wo7+O2P4figtbf5/nmwDS/ Q2R1sft6rUH2GuRa5ewLVT4dLProx4KzE35qEa4E6nG7xI6czJpWrd4mlBvx4KBv1Ccz A73yWuTvok4lQOj7F9He312DDKguKWTUTaFTwJ9WMRqZBv5IIXVbgFL3+SKSF4xaBQqF 6f2aAKtqQ+uZhXhgjIwYfEadfGfIDAA1hYNVQFQSDpaEu0fH3OPF+Cxvx5kbZQoNIkpH Yvmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=Bq+U/roPoyR+PFGiWvFpI6j3vo6m28j+pYae81Oydrk=; b=Uci+QvLkMqfIUi+bwDyPoL0p8n3Ae5wXJP5bHkSDPw5siVL8vU57u91dOPLjmfQhBc AKJRv650UDf1j/uIG0HOSwHGuU6aBvPIXhP1Ylz448smvowHIUHHL+E1+9J1wUTG1fIZ lBnlCtrq24MqBGV8rlEjIug7vPvX3eO+nkYF2bRIcf17qAsXGvg79GW8mHGMv3FXcV+c 5RF9YJk59mnV3quXZBVP9sl1TvMGESCPXS8krvcsBz6yQK+xFWC3E2tPiO3JZ2R0Hf6o iWQ0XJlHiYluyYgXVNbWucXOBrdGYV/q03SkVy00jutqUytzeuN6pzoQQtL6Miz2DXzX ObKA== X-Gm-Message-State: AOAM532A968/F4Jykc6iF8Y3o1v7Y2c3agKfJhGm299uZvh3T+IVg79M 3umaMhW2GlBXkvB75Cy4pjMJ4A== X-Received: by 2002:a5d:6301:: with SMTP id i1mr8482460wru.323.1599743535091; Thu, 10 Sep 2020 06:12:15 -0700 (PDT) Received: from holly.lan (cpc141214-aztw34-2-0-cust773.18-1.cable.virginm.net. [86.9.19.6]) by smtp.gmail.com with ESMTPSA id j14sm3301883wmj.19.2020.09.10.06.12.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2020 06:12:14 -0700 (PDT) Date: Thu, 10 Sep 2020 14:12:12 +0100 From: Daniel Thompson To: Chunfeng Yun Cc: Greg Kroah-Hartman , Mathias Nyman , Felipe Balbi , Matthias Brugger , Douglas Anderson , "Eric W. Biederman" , Lee Jones , Sumit Garg , Jann Horn , Arnd Bergmann , Jason Yan , Chuhong Yuan , "Gustavo A. R. Silva" , Ben Dooks , Saurav Girepunje , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, Mathias Nyman , Yoshihiro Shimoda Subject: Re: [PATCH RESEND v3 04/11] usb: xhci-rcar: convert to readl_poll_timeout_atomic() Message-ID: <20200910131212.wm7zskxvcesl652c@holly.lan> References: <1599726112-4439-1-git-send-email-chunfeng.yun@mediatek.com> <1599726112-4439-4-git-send-email-chunfeng.yun@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1599726112-4439-4-git-send-email-chunfeng.yun@mediatek.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Sep 10, 2020 at 04:21:45PM +0800, Chunfeng Yun wrote: > Use readl_poll_timeout_atomic() to simplify code > > Cc: Mathias Nyman > Cc: Yoshihiro Shimoda > Signed-off-by: Chunfeng Yun > --- > v2~v3: no changes > --- > drivers/usb/host/xhci-rcar.c | 43 ++++++++++++------------------------------- > 1 file changed, 12 insertions(+), 31 deletions(-) > > diff --git a/drivers/usb/host/xhci-rcar.c b/drivers/usb/host/xhci-rcar.c > index c1025d3..74f836f 100644 > --- a/drivers/usb/host/xhci-rcar.c > +++ b/drivers/usb/host/xhci-rcar.c > @@ -6,6 +6,7 @@ > */ > > #include > +#include > #include > #include > #include > @@ -127,8 +128,7 @@ static int xhci_rcar_download_firmware(struct usb_hcd *hcd) > void __iomem *regs = hcd->regs; > struct xhci_plat_priv *priv = hcd_to_xhci_priv(hcd); > const struct firmware *fw; > - int retval, index, j, time; > - int timeout = 10000; > + int retval, index, j; > u32 data, val, temp; > u32 quirks = 0; > const struct soc_device_attribute *attr; > @@ -166,32 +166,19 @@ static int xhci_rcar_download_firmware(struct usb_hcd *hcd) > temp |= RCAR_USB3_DL_CTRL_FW_SET_DATA0; > writel(temp, regs + RCAR_USB3_DL_CTRL); > > - for (time = 0; time < timeout; time++) { > - val = readl(regs + RCAR_USB3_DL_CTRL); > - if ((val & RCAR_USB3_DL_CTRL_FW_SET_DATA0) == 0) > - break; > - udelay(1); > - } > - if (time == timeout) { > - retval = -ETIMEDOUT; > + retval = readl_poll_timeout_atomic(regs + RCAR_USB3_DL_CTRL, > + val, !(val & RCAR_USB3_DL_CTRL_FW_SET_DATA0), > + 1, 10000); > + if (retval < 0) > break; > - } > } > > temp = readl(regs + RCAR_USB3_DL_CTRL); > temp &= ~RCAR_USB3_DL_CTRL_ENABLE; > writel(temp, regs + RCAR_USB3_DL_CTRL); > > - for (time = 0; time < timeout; time++) { > - val = readl(regs + RCAR_USB3_DL_CTRL); > - if (val & RCAR_USB3_DL_CTRL_FW_SUCCESS) { > - retval = 0; > - break; > - } > - udelay(1); > - } > - if (time == timeout) > - retval = -ETIMEDOUT; > + retval = readl_poll_timeout_atomic((regs + RCAR_USB3_DL_CTRL), > + val, (val & RCAR_USB3_DL_CTRL_FW_SUCCESS), 1, 10000); Directly assigning to retval at this point will clobber a previous -ETIMEDOUT error. In other words if there is a timeout waiting for FW_SET_DATA0, but not for DW_SUCCESS, then we will return the wrong return value. Daniel. > > release_firmware(fw); > > @@ -200,18 +187,12 @@ static int xhci_rcar_download_firmware(struct usb_hcd *hcd) > > static bool xhci_rcar_wait_for_pll_active(struct usb_hcd *hcd) > { > - int timeout = 1000; > + int retval; > u32 val, mask = RCAR_USB3_AXH_STA_PLL_ACTIVE_MASK; > > - while (timeout > 0) { > - val = readl(hcd->regs + RCAR_USB3_AXH_STA); > - if ((val & mask) == mask) > - return true; > - udelay(1); > - timeout--; > - } > - > - return false; > + retval = readl_poll_timeout_atomic(hcd->regs + RCAR_USB3_AXH_STA, > + val, ((val & mask) == mask), 1, 1000); > + return !!retval; This function returns a bool so !! is either wrong or redundant... I think in this case it is wrong and should be a single ! . Daniel.