devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Peter Chen <hzpeterchen@gmail.com>
To: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Cc: mark.rutland@arm.com, devicetree@vger.kernel.org,
	yixun.lan@amlogic.com, arnd@arndb.de,
	felipe.balbi@linux.intel.com, Peter.Chen@nxp.com,
	gregkh@linuxfoundation.org, linux-usb@vger.kernel.org,
	narmstrong@baylibre.com, robh+dt@kernel.org,
	jonathanh@nvidia.com, mathias.nyman@intel.com,
	matthias.bgg@gmail.com, thierry.reding@gmail.com,
	linux-mediatek@lists.infradead.org, linux@prisktech.co.nz,
	linux-amlogic@lists.infradead.org, linux-tegra@vger.kernel.org,
	stern@rowland.harvard.edu, linux-omap@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH usb-next v10 2/8] usb: add a flag to skip PHY initialization to struct usb_hcd
Date: Mon, 26 Feb 2018 11:26:59 +0800	[thread overview]
Message-ID: <20180226032659.GC22100@b29397-desktop> (raw)
In-Reply-To: <20180218184504.3331-3-martin.blumenstingl@googlemail.com>

On Sun, Feb 18, 2018 at 07:44:58PM +0100, Martin Blumenstingl wrote:
> The USB HCD core driver parses the device-tree node for "phys" and
> "usb-phys" properties. It also manages the power state of these PHYs
> automatically.
> However, drivers may opt-out of this behavior by setting "phy" or
> "usb_phy" in struct usb_hcd to a non-null value. An example where this
> is required is the "Qualcomm USB2 controller", implemented by the
> chipidea driver. The hardware requires that the PHY is only powered on
> after the "reset completed" event from the controller is received.
> 
> A follow-up patch will allow the USB HCD core driver to manage more than
> one PHY. Add a new "skip_phy_initialization" bitflag to struct usb_hcd
> so drivers can opt-out of any PHY management provided by the USB HCD
> core driver.
> 
> This also updates the existing drivers so they use the new flag if they
> want to opt out of the PHY management provided by the USB HCD core
> driver. This means that for these drivers the new "multiple PHY"
> handling (which will be added in a follow-up patch) will be disabled as
> well.
> 
> Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
> ---
>  drivers/usb/chipidea/host.c      | 6 ++----
>  drivers/usb/core/hcd.c           | 4 ++--
>  drivers/usb/host/ehci-fsl.c      | 2 ++
>  drivers/usb/host/ehci-platform.c | 4 ++--
>  drivers/usb/host/ehci-tegra.c    | 1 +
>  drivers/usb/host/ohci-omap.c     | 1 +
>  drivers/usb/host/ohci-platform.c | 4 ++--
>  drivers/usb/host/xhci-plat.c     | 1 +
>  include/linux/usb/hcd.h          | 6 ++++++
>  9 files changed, 19 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c
> index 19d60ed7e41f..af45aa3222b5 100644
> --- a/drivers/usb/chipidea/host.c
> +++ b/drivers/usb/chipidea/host.c
> @@ -124,10 +124,8 @@ static int host_start(struct ci_hdrc *ci)
>  
>  	hcd->power_budget = ci->platdata->power_budget;
>  	hcd->tpl_support = ci->platdata->tpl_support;
> -	if (ci->phy)
> -		hcd->phy = ci->phy;
> -	else
> -		hcd->usb_phy = ci->usb_phy;
> +	if (ci->phy || ci->usb_phy)
> +		hcd->skip_phy_initialization = 1;
>  
>  	ehci = hcd_to_ehci(hcd);
>  	ehci->caps = ci->hw_bank.cap;
> diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
> index fc32391a34d5..f2307470a31e 100644
> --- a/drivers/usb/core/hcd.c
> +++ b/drivers/usb/core/hcd.c
> @@ -2727,7 +2727,7 @@ int usb_add_hcd(struct usb_hcd *hcd,
>  	int retval;
>  	struct usb_device *rhdev;
>  
> -	if (IS_ENABLED(CONFIG_USB_PHY) && !hcd->usb_phy) {
> +	if (IS_ENABLED(CONFIG_USB_PHY) && !hcd->skip_phy_initialization) {
>  		struct usb_phy *phy = usb_get_phy_dev(hcd->self.sysdev, 0);
>  
>  		if (IS_ERR(phy)) {
> @@ -2745,7 +2745,7 @@ int usb_add_hcd(struct usb_hcd *hcd,
>  		}
>  	}
>  
> -	if (IS_ENABLED(CONFIG_GENERIC_PHY) && !hcd->phy) {
> +	if (IS_ENABLED(CONFIG_GENERIC_PHY) && !hcd->skip_phy_initialization) {
>  		struct phy *phy = phy_get(hcd->self.sysdev, "usb");
>  
>  		if (IS_ERR(phy)) {
> diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c
> index c5094cb88cd5..0a9fd2022acf 100644
> --- a/drivers/usb/host/ehci-fsl.c
> +++ b/drivers/usb/host/ehci-fsl.c
> @@ -155,6 +155,8 @@ static int fsl_ehci_drv_probe(struct platform_device *pdev)
>  			retval = -ENODEV;
>  			goto err2;
>  		}
> +
> +		hcd->skip_phy_initialization = 1;
>  	}
>  #endif
>  	return retval;
> diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c
> index b065a960adc2..b91eea8c73ae 100644
> --- a/drivers/usb/host/ehci-platform.c
> +++ b/drivers/usb/host/ehci-platform.c
> @@ -219,9 +219,9 @@ static int ehci_platform_probe(struct platform_device *dev)
>  			if (IS_ERR(priv->phys[phy_num])) {
>  				err = PTR_ERR(priv->phys[phy_num]);
>  					goto err_put_hcd;
> -			} else if (!hcd->phy) {
> +			} else {
>  				/* Avoiding phy_get() in usb_add_hcd() */
> -				hcd->phy = priv->phys[phy_num];
> +				hcd->skip_phy_initialization = 1;
>  			}
>  		}
>  
> diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c
> index c809f7d2f08f..a6f4389f7e88 100644
> --- a/drivers/usb/host/ehci-tegra.c
> +++ b/drivers/usb/host/ehci-tegra.c
> @@ -461,6 +461,7 @@ static int tegra_ehci_probe(struct platform_device *pdev)
>  		goto cleanup_clk_en;
>  	}
>  	hcd->usb_phy = u_phy;
> +	hcd->skip_phy_initialization = 1;
>  
>  	tegra->needs_double_reset = of_property_read_bool(pdev->dev.of_node,
>  		"nvidia,needs-double-reset");
> diff --git a/drivers/usb/host/ohci-omap.c b/drivers/usb/host/ohci-omap.c
> index 0201c49bc4fc..d8d35d456456 100644
> --- a/drivers/usb/host/ohci-omap.c
> +++ b/drivers/usb/host/ohci-omap.c
> @@ -230,6 +230,7 @@ static int ohci_omap_reset(struct usb_hcd *hcd)
>  		} else {
>  			return -EPROBE_DEFER;
>  		}
> +		hcd->skip_phy_initialization = 1;
>  		ohci->start_hnp = start_hnp;
>  	}
>  #endif
> diff --git a/drivers/usb/host/ohci-platform.c b/drivers/usb/host/ohci-platform.c
> index 1e6c954f4b3f..62ef36a9333f 100644
> --- a/drivers/usb/host/ohci-platform.c
> +++ b/drivers/usb/host/ohci-platform.c
> @@ -186,9 +186,9 @@ static int ohci_platform_probe(struct platform_device *dev)
>  			if (IS_ERR(priv->phys[phy_num])) {
>  				err = PTR_ERR(priv->phys[phy_num]);
>  				goto err_put_hcd;
> -			} else if (!hcd->phy) {
> +			} else {
>  				/* Avoiding phy_get() in usb_add_hcd() */
> -				hcd->phy = priv->phys[phy_num];
> +				hcd->skip_phy_initialization = 1;
>  			}
>  		}
>  
> diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
> index 6f038306c14d..6700e5ee82ad 100644
> --- a/drivers/usb/host/xhci-plat.c
> +++ b/drivers/usb/host/xhci-plat.c
> @@ -284,6 +284,7 @@ static int xhci_plat_probe(struct platform_device *pdev)
>  		ret = usb_phy_init(hcd->usb_phy);
>  		if (ret)
>  			goto put_usb3_hcd;
> +		hcd->skip_phy_initialization = 1;
>  	}
>  
>  	ret = usb_add_hcd(hcd, irq, IRQF_SHARED);
> diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h
> index 176900528822..693502c84c04 100644
> --- a/include/linux/usb/hcd.h
> +++ b/include/linux/usb/hcd.h
> @@ -151,6 +151,12 @@ struct usb_hcd {
>  	unsigned		msix_enabled:1;	/* driver has MSI-X enabled? */
>  	unsigned		msi_enabled:1;	/* driver has MSI enabled? */
>  	unsigned		remove_phy:1;	/* auto-remove USB phy */
> +	/*
> +	 * do not manage the PHY state in the HCD core, instead let the driver
> +	 * handle this (for example if the PHY can only be turned on after a
> +	 * specific event)
> +	 */
> +	unsigned		skip_phy_initialization:1;
>  
>  	/* The next flag is a stopgap, to be removed when all the HCDs
>  	 * support the new root-hub polling mechanism. */
> -- 

For chipidea part:

Acked-by: Peter Chen <peter.chen@nxp.com>

-- 

Best Regards,
Peter Chen

  reply	other threads:[~2018-02-26  3:26 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-18 18:44 [PATCH usb-next v10 0/8] initialize (multiple) PHYs for a HCD Martin Blumenstingl
     [not found] ` <20180218184504.3331-1-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org>
2018-02-18 18:44   ` [PATCH usb-next v10 1/8] dt-bindings: usb: add the documentation for USB HCDs Martin Blumenstingl
2018-02-18 18:44   ` [PATCH usb-next v10 2/8] usb: add a flag to skip PHY initialization to struct usb_hcd Martin Blumenstingl
2018-02-26  3:26     ` Peter Chen [this message]
2018-02-18 18:44   ` [PATCH usb-next v10 3/8] usb: core: add a wrapper for the USB PHYs on the HCD Martin Blumenstingl
2018-03-16 14:32     ` Roger Quadros
     [not found]       ` <7f511a6f-f3a2-2002-f601-5ce1742f4539-l0cyMroinI0@public.gmane.org>
2018-03-18 22:29         ` Martin Blumenstingl
     [not found]           ` <CAFBinCAOG9Yj5PQo4wsxH2Ev6WOwFge+jBMprRiOgxKuA_z8wA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-03-19  6:02             ` Chunfeng Yun
2018-03-19  8:49             ` Roger Quadros
     [not found]               ` <e723fe80-1ff3-6f47-fbbd-699dfcd0be4f-l0cyMroinI0@public.gmane.org>
2018-03-19 16:12                 ` Martin Blumenstingl
     [not found]                   ` <CAFBinCBB2eqHC-k9wN67ZehKb9eun=mPaLuqhrbR-J1C0Ldqtw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-03-20  7:54                     ` Chunfeng Yun
2018-03-20 10:55                     ` Roger Quadros
     [not found]                       ` <8812bba8-bd2e-85dd-9506-a2e856db4f14-l0cyMroinI0@public.gmane.org>
2018-03-20 11:02                         ` Roger Quadros
2018-03-20 12:04                     ` Chunfeng Yun
2018-03-20 22:01                       ` Martin Blumenstingl
     [not found]                         ` <CAFBinCC7X08oVt223FeZHSqmbCry9aKA8JXz+WmLuDRwwtr+gQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-03-21 11:30                           ` Roger Quadros
     [not found]                             ` <613ebb74-6167-56bc-6fa0-2b3c9876ccaa-l0cyMroinI0@public.gmane.org>
2018-03-22  8:10                               ` Chunfeng Yun
2018-03-22 12:41                                 ` Roger Quadros
     [not found]                                   ` <e9ef724f-0a62-cd35-9e0a-82643bde4a16-l0cyMroinI0@public.gmane.org>
2018-03-23  3:19                                     ` Chunfeng Yun
2018-03-24 11:23                               ` Martin Blumenstingl
2018-03-20 11:27                   ` Kishon Vijay Abraham I
     [not found]                     ` <e5dcaf32-7001-d647-1a36-359a9728fa9a-l0cyMroinI0@public.gmane.org>
2018-03-20 21:57                       ` Martin Blumenstingl
2018-03-20 23:47                         ` Chunfeng Yun
2018-03-19  5:43         ` Chunfeng Yun
2018-02-18 18:45   ` [PATCH usb-next v10 4/8] usb: core: hcd: integrate the PHY wrapper into the HCD core Martin Blumenstingl
2018-02-18 18:45   ` [PATCH usb-next v10 5/8] usb: host: xhci-mtk: remove custom USB PHY handling Martin Blumenstingl
2018-02-18 18:45   ` [PATCH usb-next v10 6/8] usb: host: ehci-platform: " Martin Blumenstingl
2018-02-18 18:45 ` [PATCH usb-next v10 7/8] usb: host: ohci-platform: " Martin Blumenstingl
2018-02-18 18:45 ` [PATCH usb-next v10 8/8] usb: core: hcd: remove support for initializing a single PHY Martin Blumenstingl

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=20180226032659.GC22100@b29397-desktop \
    --to=hzpeterchen@gmail.com \
    --cc=Peter.Chen@nxp.com \
    --cc=arnd@arndb.de \
    --cc=devicetree@vger.kernel.org \
    --cc=felipe.balbi@linux.intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jonathanh@nvidia.com \
    --cc=linux-amlogic@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=linux@prisktech.co.nz \
    --cc=mark.rutland@arm.com \
    --cc=martin.blumenstingl@googlemail.com \
    --cc=mathias.nyman@intel.com \
    --cc=matthias.bgg@gmail.com \
    --cc=narmstrong@baylibre.com \
    --cc=robh+dt@kernel.org \
    --cc=stern@rowland.harvard.edu \
    --cc=thierry.reding@gmail.com \
    --cc=yixun.lan@amlogic.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).