On Wed, Aug 28, 2019 at 06:36:36PM +0200, Thierry Reding wrote: > From: Thierry Reding <treding@xxxxxxxxxx> > > devm_phy_get() can fail for a number of resides besides probe deferral. > It can for example return -ENOMEM if it runs out of memory as it tries > to allocate devres structures. Propagating only -EPROBE_DEFER is > problematic because it results in these legitimately fatal errors being > treated as "PHY not specified in DT". > > What we really want is to ignore the optional PHYs only if they have not > been specified in DT. devm_phy_optional_get() is a function that exactly > does what's required here, so use that instead. > > Cc: Ray Jui <rjui@xxxxxxxxxxxx> > Cc: Scott Branden <sbranden@xxxxxxxxxxxx> > Cc: bcm-kernel-feedback-list@xxxxxxxxxxxx > Signed-off-by: Thierry Reding <treding@xxxxxxxxxx> > --- > drivers/pci/controller/pcie-iproc-platform.c | 9 +++------ > 1 file changed, 3 insertions(+), 6 deletions(-) > > diff --git a/drivers/pci/controller/pcie-iproc-platform.c b/drivers/pci/controller/pcie-iproc-platform.c > index 5a3550b6bb29..9ee6200a66f4 100644 > --- a/drivers/pci/controller/pcie-iproc-platform.c > +++ b/drivers/pci/controller/pcie-iproc-platform.c > @@ -93,12 +93,9 @@ static int iproc_pcie_pltfm_probe(struct platform_device *pdev) > pcie->need_ib_cfg = of_property_read_bool(np, "dma-ranges"); > > /* PHY use is optional */ > - pcie->phy = devm_phy_get(dev, "pcie-phy"); > - if (IS_ERR(pcie->phy)) { > - if (PTR_ERR(pcie->phy) == -EPROBE_DEFER) > - return -EPROBE_DEFER; > - pcie->phy = NULL; > - } > + pcie->phy = devm_phy_optional_get(dev, "pcie-phy"); > + if (IS_ERR(pcie->phy)) > + return PTR_ERR(pcie->phy); Once you've applied Bjorn's feedback you can add: Reviewed-by: Andrew Murray <andrew.murray@xxxxxxx> I initially thought that you forgot to check for -ENODEV - though I can see that the implementation of devm_phy_optional_get very helpfully does this for us and returns NULL instead of an error. What is also confusing is that devm_regulator_get_optional, despite its _optional suffix doesn't do this and returns an error. I wonder if devm_phy_optional_get should be changed to return NULL instead of an error instead of -ENODEV. I've copied Liam/Mark for feedback. Thanks, Andrew Murray > > ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, &resources, > &iobase); > -- > 2.22.0 >