On Wed, Aug 28, 2019 at 06:36:34PM +0200, Thierry Reding wrote: > From: Thierry Reding <treding@xxxxxxxxxx> > > devm_of_phy_get_by_index() 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_of_phy_get_by_index() returns -ENODEV in this > case, so that's the special case that we need to handle. So we propagate > all errors, except -ENODEV, so that real failures will still cause the > driver to fail probe. > > Cc: Thomas Petazzoni <thomas.petazzoni@xxxxxxxxxxx> > Signed-off-by: Thierry Reding <treding@xxxxxxxxxx> > --- > drivers/pci/controller/dwc/pcie-armada8k.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/drivers/pci/controller/dwc/pcie-armada8k.c b/drivers/pci/controller/dwc/pcie-armada8k.c > index 3d55dc78d999..49596547e8c2 100644 > --- a/drivers/pci/controller/dwc/pcie-armada8k.c > +++ b/drivers/pci/controller/dwc/pcie-armada8k.c > @@ -118,11 +118,10 @@ static int armada8k_pcie_setup_phys(struct armada8k_pcie *pcie) > > for (i = 0; i < ARMADA8K_PCIE_MAX_LANES; i++) { > pcie->phy[i] = devm_of_phy_get_by_index(dev, node, i); > - if (IS_ERR(pcie->phy[i]) && > - (PTR_ERR(pcie->phy[i]) == -EPROBE_DEFER)) > - return PTR_ERR(pcie->phy[i]); > - > if (IS_ERR(pcie->phy[i])) { > + if (PTR_ERR(pcie->phy[i]) != -ENODEV) > + return PTR_ERR(pcie->phy[i]); > + Once you've applied Bjorn's feedback you can add: Reviewed-by: Andrew Murray <andrew.murray@xxxxxxx> > pcie->phy[i] = NULL; > continue; > } > -- > 2.22.0 >