From: Thierry Reding <thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
Cc: Bjorn Helgaas <bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Pawel Moll <pawel.moll-5wv7dgnIgG8@public.gmane.org>,
Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
Ian Campbell
<ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org>,
Kumar Gala <galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
Alexandre Courbot
<gnurou-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH v3 2/2] PCI: tegra: Support per-lane PHYs
Date: Wed, 13 Apr 2016 18:01:12 +0200 [thread overview]
Message-ID: <20160413160112.GA30129@ulmo.ba.sec> (raw)
In-Reply-To: <56E9915F.9040608-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 2860 bytes --]
On Wed, Mar 16, 2016 at 11:01:19AM -0600, Stephen Warren wrote:
> On 03/08/2016 08:48 AM, Thierry Reding wrote:
> > From: Thierry Reding <treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> >
> > The current XUSB pad controller bindings are insufficient to describe
> > PHY devices attached to USB controllers. New bindings have been created
> > to overcome these restrictions. As a side-effect each root port now is
> > assigned a set of PHY devices, one for each lane associated with the
> > root port. This has the benefit of allowing fine-grained control of the
> > power management for each lane.
>
> > diff --git a/drivers/pci/host/pci-tegra.c b/drivers/pci/host/pci-tegra.c
>
> > +static int tegra_pcie_port_phy_power_on(struct tegra_pcie_port *port)
> > +{
> > + struct device *dev = port->pcie->dev;
> > + unsigned int i;
> > + int err;
> > +
> > + for (i = 0; i < port->lanes; i++) {
> > + err = phy_power_on(port->phys[i]);
>
> This assume the number of array entries is precisely the number of lanes.
> That seems to contradict the binding update which said the number might not
> match. Perhaps there's an expectation that phy_power_on() is a no-op for
> some "invalid" values like NULL or an error-pointer value? But...
>
> > +static struct phy *devm_of_phy_optional_get_index(struct device *dev,
> > + struct device_node *np,
> > + const char *consumer,
> > + unsigned int index)
> > +{
> > + struct phy *phy;
> > + char *name;
> > +
> > + name = kasprintf(GFP_KERNEL, "%s-%u", consumer, index);
> > + if (!name)
> > + return ERR_PTR(-ENOMEM);
> > +
> > + phy = devm_of_phy_get(dev, np, name);
> > + kfree(name);
> > +
> > + if (IS_ERR(phy) && PTR_ERR(phy) == -ENODEV)
> > + phy = NULL;
> > +
> > + return phy;
> > +}
>
> The error-handling there looks wrong. The function generally returns either
> a valid PHY or an error pointer. However, in the case of -ENODEV, NULL is
> returned. Subsystems are supposed to encode their handles as, and functions
> are supposed to return, either NULL or an error pointer for error cases, not
> both/either. Is the PHY API broken in this regard? If so, then this code is
> fine, but if not it might need a fix.
This function mimics phy_optional_get() which similarily returns NULL
for -ENODEV. The remainder of the PHY API treats NULL pointers as
"dummy" PHYs and returns early. I think that's a sensible approach to
handling optional resources.
It might have been more obvious had I implemented this function within
phy-core.c, but I didn't think it universally useful because it uses a
rather uncommon lookup pattern. I did keep a generic name in case it's
ever deemed useful outside of this driver, at which point it could
simply be moved into phy-core.c without requiring this driver to
change.
Thierry
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2016-04-13 16:01 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-08 15:48 [PATCH 1/2] dt-bindings: pci: tegra: Update for per-lane PHYs Thierry Reding
[not found] ` <1457452094-5409-1-git-send-email-thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-03-08 15:48 ` [PATCH v3 2/2] PCI: tegra: Support " Thierry Reding
2016-03-11 23:54 ` Bjorn Helgaas
[not found] ` <1457452094-5409-2-git-send-email-thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-03-16 17:01 ` Stephen Warren
[not found] ` <56E9915F.9040608-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2016-04-13 16:01 ` Thierry Reding [this message]
2016-04-13 17:01 ` Stephen Warren
2016-04-14 15:26 ` Thierry Reding
2016-04-05 17:07 ` Bjorn Helgaas
2016-03-16 16:51 ` [PATCH 1/2] dt-bindings: pci: tegra: Update for " Stephen Warren
2016-04-13 16:22 ` Thierry Reding
2016-04-13 17:04 ` Stephen Warren
2016-04-14 15:29 ` Thierry Reding
[not found] ` <20160414152905.GB3366-EkSeR96xj6Pcmrwk2tT4+A@public.gmane.org>
2016-04-18 14:48 ` Thierry Reding
2016-03-17 16:26 ` Rob Herring
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=20160413160112.GA30129@ulmo.ba.sec \
--to=thierry.reding-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=bhelgaas-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
--cc=gnurou-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org \
--cc=linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=pawel.moll-5wv7dgnIgG8@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org \
/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).