From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751927AbeAEPMq (ORCPT + 1 other); Fri, 5 Jan 2018 10:12:46 -0500 Received: from vps0.lunn.ch ([185.16.172.187]:55545 "EHLO vps0.lunn.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751624AbeAEPMo (ORCPT ); Fri, 5 Jan 2018 10:12:44 -0500 Date: Fri, 5 Jan 2018 16:12:35 +0100 From: Andrew Lunn To: Madalin Bucur Cc: f.fainelli@gmail.com, davem@davemloft.net, geert+renesas@glider.be, robh+dt@kernel.org, frowand.list@gmail.com, netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH net] of_mdio: avoid MDIO bus removal when a PHY is missing Message-ID: <20180105151235.GD4038@lunn.ch> References: <1515144974-31377-1-git-send-email-madalin.bucur@nxp.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1515144974-31377-1-git-send-email-madalin.bucur@nxp.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: On Fri, Jan 05, 2018 at 11:36:14AM +0200, Madalin Bucur wrote: > If one of the child devices is missing the of_mdiobus_register_phy() > call will return -ENODEV. When a missing device is encountered the > registration of the remaining PHYs is stopped and the MDIO bus will > fail to register. Propagate all errors except ENODEV to avoid it. Hi Madalin This is is not clear cut. If the PHY is in device tree, the PHY should exist. So returning ENODEV is justified. The device tree blob is broken. But i can also see the value for continuing. There is a chance some of your other interfaces come up, allowing you to get the correct device tree blob for the hardware. Please add dev_err(&mdio->dev, "MDIO device at address %d is missing.\n"); Andrew > > Signed-off-by: Madalin Bucur > --- > drivers/of/of_mdio.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c > index 3481e69..93d41275 100644 > --- a/drivers/of/of_mdio.c > +++ b/drivers/of/of_mdio.c > @@ -231,7 +231,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) > rc = of_mdiobus_register_phy(mdio, child, addr); > else > rc = of_mdiobus_register_device(mdio, child, addr); > - if (rc) > + if (rc && rc != -ENODEV) > goto unregister; > } > > @@ -255,7 +255,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np) > > if (of_mdiobus_child_is_phy(child)) { > rc = of_mdiobus_register_phy(mdio, child, addr); > - if (rc) > + if (rc && rc != -ENODEV) > goto unregister; > } > } > -- > 2.1.0 >