From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-bl2nam02on0091.outbound.protection.outlook.com ([104.47.38.91]:45338 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752753AbeBCSEq (ORCPT ); Sat, 3 Feb 2018 13:04:46 -0500 From: Sasha Levin To: "linux-kernel@vger.kernel.org" , "stable@vger.kernel.org" CC: Madalin Bucur , "David S . Miller" , Sasha Levin Subject: [PATCH AUTOSEL for 4.14 108/110] of_mdio: avoid MDIO bus removal when a PHY is missing Date: Sat, 3 Feb 2018 18:01:35 +0000 Message-ID: <20180203180015.29073-108-alexander.levin@microsoft.com> References: <20180203180015.29073-1-alexander.levin@microsoft.com> In-Reply-To: <20180203180015.29073-1-alexander.levin@microsoft.com> Content-Language: en-US Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Sender: stable-owner@vger.kernel.org List-ID: From: Madalin Bucur [ Upstream commit 95f566de0269a0c59fd6a737a147731302136429 ] 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. Signed-off-by: Madalin Bucur Reviewed-by: Andrew Lunn Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/of/of_mdio.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c index 98258583abb0..8c1819230ed2 100644 --- a/drivers/of/of_mdio.c +++ b/drivers/of/of_mdio.c @@ -228,7 +228,12 @@ int of_mdiobus_register(struct mii_bus *mdio, struct d= evice_node *np) rc =3D of_mdiobus_register_phy(mdio, child, addr); else rc =3D of_mdiobus_register_device(mdio, child, addr); - if (rc) + + if (rc =3D=3D -ENODEV) + dev_err(&mdio->dev, + "MDIO device at address %d is missing.\n", + addr); + else if (rc) goto unregister; } =20 @@ -252,7 +257,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct de= vice_node *np) =20 if (of_mdiobus_child_is_phy(child)) { rc =3D of_mdiobus_register_phy(mdio, child, addr); - if (rc) + if (rc && rc !=3D -ENODEV) goto unregister; } } --=20 2.11.0