From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
To: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
Peter Chen <Peter.Chen@nxp.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: usb: chipidea: Grab the (legacy) USB PHY by phandle first
Date: Wed, 16 Jan 2019 11:53:50 +0100 [thread overview]
Message-ID: <20190116115350.3daa9b4f@windsurf> (raw)
Hello,
Thanks for the patch!
On Wed, 16 Jan 2019 11:10:51 +0100, Paul Kocialkowski wrote:
> According to the chipidea driver bindings, the USB PHY is specified via
> the "phys" phandle node. However, this only takes effect for USB PHYs
> that use the common PHY framework. For legacy USB PHYs, a simple lookup
> based on the USB PHY type is done instead.
>
> This does not play out well when more than USB PHY is registered, since
"more than *one*"
> the first registered PHY matching the type will always be returned
> regardless of what the driver was bound to.
>
> Fix this by looking up the PHY based on the "phys" phandle node.
> Although generic PHYS and rather matched by their "phys-name"
I'm confused by "Although generic PHYS and rather matched". Perhaps
s/and/are/ ?
Also PHYS -> PHYs
> and not
> the "phys" phandle directly, there is no helper for similar lookup on
> legacy PHYs and it's probably not worth the effort to add it.
>
> When no legacy USB PHY is found by phandle, fallback to grabbing any
> registered USB2 PHY. This ensures backward compatibility if some users
> were actually relying on this mechanism.
>
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> ---
> drivers/usb/chipidea/core.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> index 7bfcbb23c2a4..11d3ee1e3fe5 100644
> --- a/drivers/usb/chipidea/core.c
> +++ b/drivers/usb/chipidea/core.c
> @@ -954,8 +954,14 @@ static int ci_hdrc_probe(struct platform_device *pdev)
> } else if (ci->platdata->usb_phy) {
> ci->usb_phy = ci->platdata->usb_phy;
> } else {
> + ci->usb_phy = devm_usb_get_phy_by_phandle(dev->parent, "phys",
> + 0);
> ci->phy = devm_phy_get(dev->parent, "usb-phy");
> - ci->usb_phy = devm_usb_get_phy(dev->parent, USB_PHY_TYPE_USB2);
I'm not sure why you change the order of legacy PHY lookup vs. generic
PHY lookup.
> +
> + /* Fallback to grabbing any registered USB2 PHY */
> + if (IS_ERR(ci->phy) && IS_ERR(ci->usb_phy))
> + ci->usb_phy = devm_usb_get_phy(dev->parent,
> + USB_PHY_TYPE_USB2);
Why is this conditional on the generic PHY lookup failing?
Don't we simply want:
ci->phy = devm_phy_get(dev->parent, "usb-phy");
ci->usb_phy = devm_usb_get_phy_by_phandle(dev->parent, "phys", 0);
if (IS_ERR(ci->usb_phy))
ci->usb_phy = devm_usb_get_phy(dev->parent, USB_PHY_TYPE_USB2);
?
Does this needs a "Fixes:" tag ? It's not fixing a regression because
nobody complained until now, but it's really fixing a behavior that
wasn't correct.
Best regards,
Thomas
WARNING: multiple messages have this Message-ID (diff)
From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
To: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
Peter Chen <Peter.Chen@nxp.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: Re: [PATCH] usb: chipidea: Grab the (legacy) USB PHY by phandle first
Date: Wed, 16 Jan 2019 11:53:50 +0100 [thread overview]
Message-ID: <20190116115350.3daa9b4f@windsurf> (raw)
In-Reply-To: <20190116101051.21202-1-paul.kocialkowski@bootlin.com>
Hello,
Thanks for the patch!
On Wed, 16 Jan 2019 11:10:51 +0100, Paul Kocialkowski wrote:
> According to the chipidea driver bindings, the USB PHY is specified via
> the "phys" phandle node. However, this only takes effect for USB PHYs
> that use the common PHY framework. For legacy USB PHYs, a simple lookup
> based on the USB PHY type is done instead.
>
> This does not play out well when more than USB PHY is registered, since
"more than *one*"
> the first registered PHY matching the type will always be returned
> regardless of what the driver was bound to.
>
> Fix this by looking up the PHY based on the "phys" phandle node.
> Although generic PHYS and rather matched by their "phys-name"
I'm confused by "Although generic PHYS and rather matched". Perhaps
s/and/are/ ?
Also PHYS -> PHYs
> and not
> the "phys" phandle directly, there is no helper for similar lookup on
> legacy PHYs and it's probably not worth the effort to add it.
>
> When no legacy USB PHY is found by phandle, fallback to grabbing any
> registered USB2 PHY. This ensures backward compatibility if some users
> were actually relying on this mechanism.
>
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> ---
> drivers/usb/chipidea/core.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> index 7bfcbb23c2a4..11d3ee1e3fe5 100644
> --- a/drivers/usb/chipidea/core.c
> +++ b/drivers/usb/chipidea/core.c
> @@ -954,8 +954,14 @@ static int ci_hdrc_probe(struct platform_device *pdev)
> } else if (ci->platdata->usb_phy) {
> ci->usb_phy = ci->platdata->usb_phy;
> } else {
> + ci->usb_phy = devm_usb_get_phy_by_phandle(dev->parent, "phys",
> + 0);
> ci->phy = devm_phy_get(dev->parent, "usb-phy");
> - ci->usb_phy = devm_usb_get_phy(dev->parent, USB_PHY_TYPE_USB2);
I'm not sure why you change the order of legacy PHY lookup vs. generic
PHY lookup.
> +
> + /* Fallback to grabbing any registered USB2 PHY */
> + if (IS_ERR(ci->phy) && IS_ERR(ci->usb_phy))
> + ci->usb_phy = devm_usb_get_phy(dev->parent,
> + USB_PHY_TYPE_USB2);
Why is this conditional on the generic PHY lookup failing?
Don't we simply want:
ci->phy = devm_phy_get(dev->parent, "usb-phy");
ci->usb_phy = devm_usb_get_phy_by_phandle(dev->parent, "phys", 0);
if (IS_ERR(ci->usb_phy))
ci->usb_phy = devm_usb_get_phy(dev->parent, USB_PHY_TYPE_USB2);
?
Does this needs a "Fixes:" tag ? It's not fixing a regression because
nobody complained until now, but it's really fixing a behavior that
wasn't correct.
Best regards,
Thomas
--
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next reply other threads:[~2019-01-16 10:53 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-16 10:53 Thomas Petazzoni [this message]
2019-01-16 10:53 ` [PATCH] usb: chipidea: Grab the (legacy) USB PHY by phandle first Thomas Petazzoni
-- strict thread matches above, loose matches on Subject: below --
2019-01-18 2:18 Peter Chen
2019-01-18 2:18 ` [PATCH] " Peter Chen
2019-01-17 16:38 Paul Kocialkowski
2019-01-17 16:38 ` [PATCH] " Paul Kocialkowski
2019-01-17 6:44 Peter Chen
2019-01-17 6:44 ` [PATCH] " Peter Chen
2019-01-16 14:22 Paul Kocialkowski
2019-01-16 14:22 ` [PATCH] " Paul Kocialkowski
2019-01-16 13:44 Thomas Petazzoni
2019-01-16 13:44 ` [PATCH] " Thomas Petazzoni
2019-01-16 13:30 Paul Kocialkowski
2019-01-16 13:30 ` [PATCH] " Paul Kocialkowski
2019-01-16 10:10 Paul Kocialkowski
2019-01-16 10:10 ` [PATCH] " Paul Kocialkowski
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=20190116115350.3daa9b4f@windsurf \
--to=thomas.petazzoni@bootlin.com \
--cc=Peter.Chen@nxp.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=paul.kocialkowski@bootlin.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.