On Thu, 2019-01-24 at 13:48 +0800, Zhang Run wrote: > The ax88772_bind() should return error code immediately when the PHY > was not reset properly through ax88772a_hw_reset(). > Otherwise, The asix_get_phyid() will block when get the PHY > Identifier from the PHYSID1 MII registers through asix_mdio_read() > due to the PHY isn't ready. Furthermore, it will produce a lot of > error message cause system crash.As follows: > asix 1-1:1.0 (unnamed net_device) (uninitialized): Failed to write > reg index 0x0000: -71 > asix 1-1:1.0 (unnamed net_device) (uninitialized): Failed to send > software reset: ffffffb9 > asix 1-1:1.0 (unnamed net_device) (uninitialized): Failed to write > reg index 0x0000: -71 > asix 1-1:1.0 (unnamed net_device) (uninitialized): Failed to enable > software MII access > asix 1-1:1.0 (unnamed net_device) (uninitialized): Failed to read > reg index 0x0000: -71 > asix 1-1:1.0 (unnamed net_device) (uninitialized): Failed to write > reg index 0x0000: -71 > asix 1-1:1.0 (unnamed net_device) (uninitialized): Failed to enable > software MII access > asix 1-1:1.0 (unnamed net_device) (uninitialized): Failed to read > reg index 0x0000: -71 > ... > > Signed-off-by: Zhang Run <zhang.run@xxxxxxxxxx> > Reviewed-by: Yang Wei <yang.wei9@xxxxxxxxxx> Tested-by: Marcel Ziswiler <marcel.ziswiler@xxxxxxxxxxx> > --- > drivers/net/usb/asix_devices.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/usb/asix_devices.c > b/drivers/net/usb/asix_devices.c > index b654f05..3d93993 100644 > --- a/drivers/net/usb/asix_devices.c > +++ b/drivers/net/usb/asix_devices.c > @@ -739,8 +739,13 @@ static int ax88772_bind(struct usbnet *dev, > struct usb_interface *intf) > asix_read_cmd(dev, AX_CMD_STATMNGSTS_REG, 0, 0, 1, &chipcode, > 0); > chipcode &= AX_CHIPCODE_MASK; > > - (chipcode == AX_AX88772_CHIPCODE) ? ax88772_hw_reset(dev, 0) : > - ax88772a_hw_reset(dev, 0); > + ret = (chipcode == AX_AX88772_CHIPCODE) ? ax88772_hw_reset(dev, > 0) : > + ax88772a_hw_reset(dev > , 0); > + > + if (ret < 0) { > + netdev_dbg(dev->net, "Failed to reset AX88772: %d\n", > ret); > + return ret; > + } > > /* Read PHYID register *AFTER* the PHY was reset properly */ > phyid = asix_get_phyid(dev);