diff mbox series

[v4,04/11] usb: xhci-rcar: convert to readl_poll_timeout_atomic()

Message ID 1600668815-12135-4-git-send-email-chunfeng.yun@mediatek.com
State New
Headers show
Series [v4,01/11] usb: early: convert to readl_poll_timeout_atomic() | expand

Commit Message

Chunfeng Yun (云春峰) Sept. 21, 2020, 6:13 a.m. UTC
Use readl_poll_timeout_atomic() to simplify code

Cc: Mathias Nyman <mathias.nyman@linux.intel.com>
Cc: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>

---
v4: changes
    1. remove unnecessary parentheses suggested by Yoshihiro
    2. fix the wrong return value suggested by Yoshihiro & Daniel

v2~v3: no changes
---
 drivers/usb/host/xhci-rcar.c | 43 ++++++++++++-------------------------------
 1 file changed, 12 insertions(+), 31 deletions(-)

-- 
1.9.1

Comments

Yoshihiro Shimoda Sept. 23, 2020, 8:47 a.m. UTC | #1
Hi Chungeng,

Thank you for the patch!

> From: Chunfeng Yun, Sent: Monday, September 21, 2020 3:13 PM

> 

> Use readl_poll_timeout_atomic() to simplify code

> 

> Cc: Mathias Nyman <mathias.nyman@linux.intel.com>

> Cc: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>

> Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>

> ---

> v4: changes

>     1. remove unnecessary parentheses suggested by Yoshihiro

>     2. fix the wrong return value suggested by Yoshihiro & Daniel

> 

> 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..1bc4fe7 100644

> --- a/drivers/usb/host/xhci-rcar.c

> +++ b/drivers/usb/host/xhci-rcar.c

> @@ -6,6 +6,7 @@

>   */

> 

>  #include <linux/firmware.h>

> +#include <linux/iopoll.h>

>  #include <linux/module.h>

>  #include <linux/platform_device.h>

>  #include <linux/of.h>

> @@ -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),


We can also remove these unnecessary parentheses like below.

+	retval = readl_poll_timeout_atomic(regs + RCAR_USB3_DL_CTRL,

After fixed this:

Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>


Best regards,
Yoshihiro Shimoda
Chunfeng Yun (云春峰) Sept. 23, 2020, 8:53 a.m. UTC | #2
On Wed, 2020-09-23 at 08:47 +0000, Yoshihiro Shimoda wrote:
> Hi Chungeng,

> 

> Thank you for the patch!

> 

> > From: Chunfeng Yun, Sent: Monday, September 21, 2020 3:13 PM

> > 

> > Use readl_poll_timeout_atomic() to simplify code

> > 

> > Cc: Mathias Nyman <mathias.nyman@linux.intel.com>

> > Cc: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>

> > Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>

> > ---

> > v4: changes

> >     1. remove unnecessary parentheses suggested by Yoshihiro

> >     2. fix the wrong return value suggested by Yoshihiro & Daniel

> > 

> > 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..1bc4fe7 100644

> > --- a/drivers/usb/host/xhci-rcar.c

> > +++ b/drivers/usb/host/xhci-rcar.c

> > @@ -6,6 +6,7 @@

> >   */

> > 

> >  #include <linux/firmware.h>

> > +#include <linux/iopoll.h>

> >  #include <linux/module.h>

> >  #include <linux/platform_device.h>

> >  #include <linux/of.h>

> > @@ -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),

> 

> We can also remove these unnecessary parentheses like below.

Ok, will remove it, thanks a lot

> 

> +	retval = readl_poll_timeout_atomic(regs + RCAR_USB3_DL_CTRL,

> 

> After fixed this:

> 

> Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>

> 

> Best regards,

> Yoshihiro Shimoda

>
diff mbox series

Patch

diff --git a/drivers/usb/host/xhci-rcar.c b/drivers/usb/host/xhci-rcar.c
index c1025d3..1bc4fe7 100644
--- a/drivers/usb/host/xhci-rcar.c
+++ b/drivers/usb/host/xhci-rcar.c
@@ -6,6 +6,7 @@ 
  */
 
 #include <linux/firmware.h>
+#include <linux/iopoll.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
 #include <linux/of.h>
@@ -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);
 
 	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 needs to initialize a "phy" of usb before */