linux_dsm_epyc7002/drivers/net/phy
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
..
amd.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
aquantia.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
at803x.c net: phy: at803x: Request 'reset' GPIO only for AT8030 PHY 2016-03-23 13:39:25 -04:00
bcm7xxx.c net: phy: bcm7xxx: Add entries for Broadcom BCM7346 and BCM7362 2016-03-25 11:37:57 -04:00
bcm63xx.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
bcm87xx.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
bcm-cygnus.c net: phy: Broadcom Cygnus internal Etherent PHY driver 2015-10-08 04:45:52 -07:00
bcm-phy-lib.c phy: phy_{read|write}_mmd_indirect: get addr from phydev 2016-01-07 14:31:25 -05:00
bcm-phy-lib.h net: phy: Add Broadcom phy library for common interfaces 2015-10-08 04:45:46 -07:00
broadcom.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
cicada.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
davicom.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
dp83640_reg.h
dp83640.c net: dp83640: Fix tx timestamp overflow handling. 2016-01-20 18:54:08 -08:00
dp83848.c net: phy: dp83848: Fix sysfs naming collision warning 2016-02-18 15:53:10 -05:00
dp83867.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
et1011c.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
fixed_phy.c fixed_phy: get_phy_device() doesn't return NULL anymore 2016-04-26 15:41:20 -04:00
icplus.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
Kconfig phy: mdio-thunder: Fix some Kconfig typos 2016-03-18 23:02:03 -04:00
lxt.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
Makefile phy: mdio-thunder: Add driver for Cavium Thunder SoC MDIO buses. 2016-03-14 15:27:22 -04:00
marvell.c phy: marvell: Fix 88E1510 initialization 2016-02-25 16:08:37 -05:00
mdio_bus.c mdio_bus: Fix MDIO bus scanning in __mdiobus_register() 2016-05-01 20:50:08 -04:00
mdio_device.c mdio: Abstract device_remove() and device_free() 2016-01-07 14:31:27 -05:00
mdio-bcm-iproc.c net: phy: Broadcom iProc MDIO bus driver 2015-10-08 04:44:46 -07:00
mdio-bcm-unimac.c mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
mdio-bitbang.c net: phy: mdio-gpio: Handle phy_ignore_ta_mask 2015-05-14 13:40:55 -04:00
mdio-cavium.c phy: mdio-cavium: Add missing MODULE_* annotations. 2016-03-16 19:55:37 -04:00
mdio-cavium.h phy: mdio-octeon: Refactor into two files/modules 2016-03-14 15:27:22 -04:00
mdio-gpio.c mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
mdio-moxart.c mdio: Move allocation of interrupts into core 2016-01-07 14:31:26 -05:00
mdio-mux-gpio.c gpiolib: rename gpiod_set_array to gpiod_set_array_value 2015-06-01 15:10:09 +02:00
mdio-mux-mmioreg.c net: phy: mdio: add missing of_node_put 2015-10-26 22:08:12 -07:00
mdio-mux.c net: mdio: Fix lockdep falls positive splat 2016-04-11 21:15:48 -04:00
mdio-octeon.c phy: mdio-octeon: Refactor into two files/modules 2016-03-14 15:27:22 -04:00
mdio-sun4i.c mdio-sun4i: oops in error handling in probe 2016-03-21 11:30:01 -04:00
mdio-thunder.c phy: mdio-thunder: Add driver for Cavium Thunder SoC MDIO buses. 2016-03-14 15:27:22 -04:00
micrel.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-03-08 12:34:12 -05:00
microchip.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
national.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
phy_device.c phylib: don't return NULL from get_phy_device() 2016-04-26 15:41:19 -04:00
phy.c phy: add generic function to support ksetting support 2016-04-18 14:45:08 -04:00
qsemi.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
realtek.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
smsc.c net: phy: smsc: Fix disabling energy detect mode 2016-01-21 12:06:03 -08:00
spi_ks8995.c net: phy: spi_ks8895: Don't leak references to SPI devices 2016-04-21 15:00:27 -04:00
ste10Xp.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
teranetics.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00
vitesse.c phy: Centralize setting driver module owner 2016-01-07 14:31:27 -05:00