linux/drivers/net
Marek Vasut 70e927b98b mdio_bus: Fix MDIO bus scanning in __mdiobus_register()
Since commit b74766a0a0 ("phylib: don't return NULL
from get_phy_device()") in linux-next, phy_get_device() will return
ERR_PTR(-ENODEV) instead of NULL if the PHY device ID is all ones.

This causes problem with stmmac driver and likely some other drivers
which call mdiobus_register(). I triggered this bug on SoCFPGA MCVEVK
board with linux-next 20160427 and 20160428. In case of the stmmac, if
there is no PHY node specified in the DT for the stmmac block, the stmmac
driver ( drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c function
stmmac_mdio_register() ) will call mdiobus_register() , which will
register the MDIO bus and probe for the PHY.

The mdiobus_register() resp. __mdiobus_register() iterates over all of
the addresses on the MDIO bus and calls mdiobus_scan() for each of them,
which invokes get_phy_device(). Before the aforementioned patch, the
mdiobus_scan() would return NULL if no PHY was found on a given address
and mdiobus_register() would continue and try the next PHY address. Now,
mdiobus_scan() returns ERR_PTR(-ENODEV), which is caught by the
'if (IS_ERR(phydev))' condition and the loop exits immediately if the
PHY address does not contain PHY.

Repair this by explicitly checking for the ERR_PTR(-ENODEV) and if this
error comes around, continue with the next PHY address.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: David S. Miller <davem@davemloft.net>
Cc: Dinh Nguyen <dinguyen@opensource.altera.com>
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-05-01 20:50:08 -04:00
..
appletalk
arcnet arcnet: com90xx: add __init attribute 2016-04-19 20:17:45 -04:00
bonding bonding: fix bond_get_stats() 2016-03-18 23:14:15 -04:00
caif
can
cris
dsa Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-04-23 18:51:33 -04:00
ethernet net/mlx5e: Enabling aRFS mechanism 2016-04-29 16:29:12 -04:00
fddi
fjes fjes: Update fjes driver version : 1.1 2016-04-16 21:51:01 -04:00
hamradio drivers: net: use NETDEV_TX_OK instead of NETDEV_TX_LOCKED 2016-04-26 15:53:05 -04:00
hippi
hyperv hv_netvsc: Fix the list processing for network change event 2016-04-24 23:27:58 -04:00
ieee802154 ieee802154: atusb: update my copyright years for this driver 2016-04-21 00:21:28 +02:00
ipvlan ipvlan: Fix failure path in dev registration during link creation 2016-04-28 17:23:08 -04:00
irda irda: sh_irda: remove driver 2016-04-04 16:24:13 -04:00
phy mdio_bus: Fix MDIO bus scanning in __mdiobus_register() 2016-05-01 20:50:08 -04:00
plip
ppp ppp: add rtnetlink device creation support 2016-04-29 16:09:44 -04:00
slip
team team: team should sync the port's uc/mc addrs when add a port 2016-03-30 17:06:58 -04:00
usb cdc_mbim: apply "NDP to end" quirk to all Huawei devices 2016-04-14 21:04:04 -04:00
vmxnet3 Driver: Vmxnet3: set CHECKSUM_UNNECESSARY for IPv6 packets 2016-04-21 15:28:05 -04:00
wan farsync: fix off-by-one bug in fst_add_one 2016-03-14 13:09:49 -04:00
wimax
wireless drivers/wireless: use nla_put_u64_64bit() 2016-04-26 12:00:48 -04:00
xen-netback xen-netback: reduce log spam 2016-03-13 22:08:01 -04:00
dummy.c
eql.c
geneve.c geneve: break dependency with netdev drivers 2016-04-21 15:35:44 -04:00
ifb.c
Kconfig net: dummy: remove note about being Y by default 2016-04-26 01:11:55 -04:00
LICENSE.SRC
loopback.c
macsec.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-04-27 15:43:10 -04:00
macvlan.c macvlan: fix failure during registration v3 2016-04-26 15:17:18 -04:00
macvtap.c macvtap: check minor when unregistering 2016-04-26 15:17:45 -04:00
Makefile macsec: introduce IEEE 802.1AE driver 2016-03-13 22:40:24 -04:00
mdio.c
mii.c
netconsole.c
nlmon.c
ntb_netdev.c
rionet.c drivers: net: remove NETDEV_TX_LOCKED 2016-04-26 15:53:05 -04:00
sb1000.c
Space.c
sungem_phy.c
tun.c tuntap: calculate rps hash only when needed 2016-04-28 16:38:54 -04:00
veth.c veth: Update features to include all tunnel GSO types 2016-04-21 14:14:59 -04:00
virtio_net.c virtio/vhost: new features, performance improvements, cleanups 2016-03-20 13:28:18 -07:00
vrf.c net: vrf: Fix dst reference counting 2016-04-11 15:56:20 -04:00
vxlan.c vxlan: fix initialization with custom link parameters 2016-04-29 15:08:56 -04:00
xen-netfront.c