All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alan Stern <stern@rowland.harvard.edu>
To: Yinbo Zhu <yinbo.zhu@nxp.com>
Cc: Xiaobo Xie <xiaobo.xie@nxp.com>,
	Jerry Huang <jerry.huang@nxp.com>, Ran Wang <ran.wang_1@nxp.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Ramneek Mehresh <ramneek.mehresh@freescale.com>,
	Nikhil Badola <nikhil.badola@freescale.com>,
	Suresh Gupta <suresh.gupta@freescale.com>,
	"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Suresh Gupta <B42813@freescale.com>
Subject: Re: [PATCH v4 2/5] usb: phy: Workaround for USB erratum-A005728
Date: Mon, 28 Jan 2019 10:36:47 -0500 (EST)	[thread overview]
Message-ID: <Pine.LNX.4.44L0.1901281034080.1450-100000@iolanthe.rowland.org> (raw)
In-Reply-To: <20190125060356.14294-2-yinbo.zhu@nxp.com>

On Fri, 25 Jan 2019, Yinbo Zhu wrote:

> From: Suresh Gupta <B42813@freescale.com>
> 
> PHY_CLK_VALID bit for UTMI PHY in USBDR does not set even
> if PHY is providing valid clock. Workaround for this
> involves resetting of PHY and check PHY_CLK_VALID bit
> multiple times. If PHY_CLK_VALID bit is still not set even
> after 5 retries, it would be safe to deaclare that PHY
> clock is not available.
> This erratum is applicable for USBDR less then ver 2.4.
> 
> Signed-off-by: Suresh Gupta <B42813@freescale.com>
> Signed-off-by: Yinbo Zhu <yinbo.zhu@nxp.com>
> ---
> Change in v4:
> 		Incorrect indentation of the continuation line.
> 		replace pr_err with dev_err.
> 
>  drivers/usb/host/ehci-fsl.c |   38 +++++++++++++++++++++++++++-----------
>  drivers/usb/host/ehci-fsl.h |    3 +++
>  2 files changed, 30 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c
> index 38674b7..373a816 100644
> --- a/drivers/usb/host/ehci-fsl.c
> +++ b/drivers/usb/host/ehci-fsl.c
> @@ -183,6 +183,17 @@ static int fsl_ehci_drv_probe(struct platform_device *pdev)
>  	return retval;
>  }
>  
> +static bool usb_phy_clk_valid(struct usb_hcd *hcd)
> +{
> +	void __iomem *non_ehci = hcd->regs;
> +	bool ret = true;
> +
> +	if (!(ioread32be(non_ehci + FSL_SOC_USB_CTRL) & PHY_CLK_VALID))
> +		ret = false;
> +
> +	return ret;
> +}
> +
>  static int ehci_fsl_setup_phy(struct usb_hcd *hcd,
>  			       enum fsl_usb2_phy_modes phy_mode,
>  			       unsigned int port_offset)
> @@ -226,6 +237,17 @@ static int ehci_fsl_setup_phy(struct usb_hcd *hcd,
>  		/* fall through */
>  	case FSL_USB2_PHY_UTMI:
>  	case FSL_USB2_PHY_UTMI_DUAL:
> +		/* PHY_CLK_VALID bit is de-featured from all controller
> +		 * versions below 2.4 and is to be checked only for
> +		 * internal UTMI phy
> +		 */
> +		if (pdata->controller_ver > FSL_USB_VER_2_4 &&
> +		    pdata->have_sysif_regs && !usb_phy_clk_valid(hcd)) {
> +			dev_err(dev,
> +				"%s: USB PHY clock invalid\n", dev_name(dev));

This looks silly; it prints the device name twice (once because that's
what dev_err() does, and then again because you explicitly told it to
print the device name).

Look at how dev_err() is used in other parts of the driver and do the 
same thing.

> +			return -EINVAL;
> +		}
> +
>  		if (pdata->have_sysif_regs && pdata->controller_ver) {
>  			/* controller version 1.6 or above */
>  			tmp = ioread32be(non_ehci + FSL_SOC_USB_CTRL);
> @@ -249,17 +271,11 @@ static int ehci_fsl_setup_phy(struct usb_hcd *hcd,
>  		break;
>  	}
>  
> -	/*
> -	 * check PHY_CLK_VALID to determine phy clock presence before writing
> -	 * to portsc
> -	 */
> -	if (pdata->check_phy_clk_valid) {
> -		if (!(ioread32be(non_ehci + FSL_SOC_USB_CTRL) &
> -		    PHY_CLK_VALID)) {
> -			dev_warn(hcd->self.controller,
> -				 "USB PHY clock invalid\n");
> -			return -EINVAL;
> -		}
> +	if (pdata->have_sysif_regs &&
> +	    pdata->controller_ver > FSL_USB_VER_1_6 &&
> +		!usb_phy_clk_valid(hcd)) {
> +		dev_warn(hcd->self.controller, "USB PHY clock invalid\n");

Once again, you have a continuation line that is indented by the same 
amount as the code in the inner block.  Please fix this properly.

> +		return -EINVAL;
>  	}
>  
>  	ehci_writel(ehci, portsc, &ehci->regs->port_status[port_offset]);
> diff --git a/drivers/usb/host/ehci-fsl.h b/drivers/usb/host/ehci-fsl.h
> index cbc4220..9d18c6e 100644
> --- a/drivers/usb/host/ehci-fsl.h
> +++ b/drivers/usb/host/ehci-fsl.h
> @@ -50,4 +50,7 @@
>  #define UTMI_PHY_EN             (1<<9)
>  #define ULPI_PHY_CLK_SEL        (1<<10)
>  #define PHY_CLK_VALID		(1<<17)
> +
> +/* Retry count for checking UTMI PHY CLK validity */
> +#define UTMI_PHY_CLK_VALID_CHK_RETRY 5
>  #endif				/* _EHCI_FSL_H */

Alan Stern


WARNING: multiple messages have this Message-ID (diff)
From: Alan Stern <stern@rowland.harvard.edu>
To: Yinbo Zhu <yinbo.zhu@nxp.com>
Cc: Xiaobo Xie <xiaobo.xie@nxp.com>,
	Jerry Huang <jerry.huang@nxp.com>, Ran Wang <ran.wang_1@nxp.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Ramneek Mehresh <ramneek.mehresh@freescale.com>,
	Nikhil Badola <nikhil.badola@freescale.com>,
	Suresh Gupta <suresh.gupta@freescale.com>,
	"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Suresh Gupta <B42813@freescale.com>
Subject: [v4,2/5] usb: phy: Workaround for USB erratum-A005728
Date: Mon, 28 Jan 2019 10:36:47 -0500 (EST)	[thread overview]
Message-ID: <Pine.LNX.4.44L0.1901281034080.1450-100000@iolanthe.rowland.org> (raw)

On Fri, 25 Jan 2019, Yinbo Zhu wrote:

> From: Suresh Gupta <B42813@freescale.com>
> 
> PHY_CLK_VALID bit for UTMI PHY in USBDR does not set even
> if PHY is providing valid clock. Workaround for this
> involves resetting of PHY and check PHY_CLK_VALID bit
> multiple times. If PHY_CLK_VALID bit is still not set even
> after 5 retries, it would be safe to deaclare that PHY
> clock is not available.
> This erratum is applicable for USBDR less then ver 2.4.
> 
> Signed-off-by: Suresh Gupta <B42813@freescale.com>
> Signed-off-by: Yinbo Zhu <yinbo.zhu@nxp.com>
> ---
> Change in v4:
> 		Incorrect indentation of the continuation line.
> 		replace pr_err with dev_err.
> 
>  drivers/usb/host/ehci-fsl.c |   38 +++++++++++++++++++++++++++-----------
>  drivers/usb/host/ehci-fsl.h |    3 +++
>  2 files changed, 30 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c
> index 38674b7..373a816 100644
> --- a/drivers/usb/host/ehci-fsl.c
> +++ b/drivers/usb/host/ehci-fsl.c
> @@ -183,6 +183,17 @@ static int fsl_ehci_drv_probe(struct platform_device *pdev)
>  	return retval;
>  }
>  
> +static bool usb_phy_clk_valid(struct usb_hcd *hcd)
> +{
> +	void __iomem *non_ehci = hcd->regs;
> +	bool ret = true;
> +
> +	if (!(ioread32be(non_ehci + FSL_SOC_USB_CTRL) & PHY_CLK_VALID))
> +		ret = false;
> +
> +	return ret;
> +}
> +
>  static int ehci_fsl_setup_phy(struct usb_hcd *hcd,
>  			       enum fsl_usb2_phy_modes phy_mode,
>  			       unsigned int port_offset)
> @@ -226,6 +237,17 @@ static int ehci_fsl_setup_phy(struct usb_hcd *hcd,
>  		/* fall through */
>  	case FSL_USB2_PHY_UTMI:
>  	case FSL_USB2_PHY_UTMI_DUAL:
> +		/* PHY_CLK_VALID bit is de-featured from all controller
> +		 * versions below 2.4 and is to be checked only for
> +		 * internal UTMI phy
> +		 */
> +		if (pdata->controller_ver > FSL_USB_VER_2_4 &&
> +		    pdata->have_sysif_regs && !usb_phy_clk_valid(hcd)) {
> +			dev_err(dev,
> +				"%s: USB PHY clock invalid\n", dev_name(dev));

This looks silly; it prints the device name twice (once because that's
what dev_err() does, and then again because you explicitly told it to
print the device name).

Look at how dev_err() is used in other parts of the driver and do the 
same thing.

> +			return -EINVAL;
> +		}
> +
>  		if (pdata->have_sysif_regs && pdata->controller_ver) {
>  			/* controller version 1.6 or above */
>  			tmp = ioread32be(non_ehci + FSL_SOC_USB_CTRL);
> @@ -249,17 +271,11 @@ static int ehci_fsl_setup_phy(struct usb_hcd *hcd,
>  		break;
>  	}
>  
> -	/*
> -	 * check PHY_CLK_VALID to determine phy clock presence before writing
> -	 * to portsc
> -	 */
> -	if (pdata->check_phy_clk_valid) {
> -		if (!(ioread32be(non_ehci + FSL_SOC_USB_CTRL) &
> -		    PHY_CLK_VALID)) {
> -			dev_warn(hcd->self.controller,
> -				 "USB PHY clock invalid\n");
> -			return -EINVAL;
> -		}
> +	if (pdata->have_sysif_regs &&
> +	    pdata->controller_ver > FSL_USB_VER_1_6 &&
> +		!usb_phy_clk_valid(hcd)) {
> +		dev_warn(hcd->self.controller, "USB PHY clock invalid\n");

Once again, you have a continuation line that is indented by the same 
amount as the code in the inner block.  Please fix this properly.

> +		return -EINVAL;
>  	}
>  
>  	ehci_writel(ehci, portsc, &ehci->regs->port_status[port_offset]);
> diff --git a/drivers/usb/host/ehci-fsl.h b/drivers/usb/host/ehci-fsl.h
> index cbc4220..9d18c6e 100644
> --- a/drivers/usb/host/ehci-fsl.h
> +++ b/drivers/usb/host/ehci-fsl.h
> @@ -50,4 +50,7 @@
>  #define UTMI_PHY_EN             (1<<9)
>  #define ULPI_PHY_CLK_SEL        (1<<10)
>  #define PHY_CLK_VALID		(1<<17)
> +
> +/* Retry count for checking UTMI PHY CLK validity */
> +#define UTMI_PHY_CLK_VALID_CHK_RETRY 5
>  #endif				/* _EHCI_FSL_H */

Alan Stern

  reply	other threads:[~2019-01-28 15:36 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-25  6:02 [PATCH v4 1/5] usb: fsl: Set USB_EN bit to select ULPI phy Yinbo Zhu
2019-01-25  6:02 ` [v4,1/5] " yinbo.zhu
2019-01-25  6:02 ` [PATCH v4 2/5] usb: phy: Workaround for USB erratum-A005728 Yinbo Zhu
2019-01-25  6:02   ` [v4,2/5] " yinbo.zhu
2019-01-28 15:36   ` Alan Stern [this message]
2019-01-28 15:36     ` Alan Stern
2019-05-08  3:26     ` [PATCH v4 2/5] " Yinbo Zhu
2019-05-08  6:41       ` Greg Kroah-Hartman
2019-01-25  6:03 ` [PATCH v4 3/5] usb: linux/fsl_device: Add platform member has_fsl_erratum_a006918 Yinbo Zhu
2019-01-25  6:03   ` [v4,3/5] " yinbo.zhu
2019-01-25  6:03 ` [PATCH v4 4/5] usb: host: Stops USB controller init if PLL fails to lock Yinbo Zhu
2019-01-25  6:03   ` [v4,4/5] " yinbo.zhu
2019-01-28 15:38   ` [PATCH v4 4/5] " Alan Stern
2019-01-28 15:38     ` [v4,4/5] " Alan Stern
2019-01-25  6:03 ` [PATCH v4 5/5] usb :fsl: Change string format for errata property Yinbo Zhu
2019-01-25  6:03   ` [v4,5/5] " yinbo.zhu
2019-01-28 15:33 ` [PATCH v4 1/5] usb: fsl: Set USB_EN bit to select ULPI phy Alan Stern
2019-01-28 15:33   ` [v4,1/5] " Alan Stern

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.44L0.1901281034080.1450-100000@iolanthe.rowland.org \
    --to=stern@rowland.harvard.edu \
    --cc=B42813@freescale.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jerry.huang@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=nikhil.badola@freescale.com \
    --cc=ramneek.mehresh@freescale.com \
    --cc=ran.wang_1@nxp.com \
    --cc=suresh.gupta@freescale.com \
    --cc=xiaobo.xie@nxp.com \
    --cc=yinbo.zhu@nxp.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.