Dear Lucas Stach, > The basic device reset ensures that the device is ready to > service commands and does not need to get redone before each > network operation. > > Split out the basic reset from asix_init() and instead call it > from asix_eth_get_info(), so that it only gets called once. > > Signed-off-by: Lucas Stach <d...@lynxeye.de> > --- > drivers/usb/eth/asix.c | 44 ++++++++++++++++++++++++++------------------ > 1 Datei geändert, 26 Zeilen hinzugefügt(+), 18 Zeilen entfernt(-) > > diff --git a/drivers/usb/eth/asix.c b/drivers/usb/eth/asix.c > index 8fb7fc8..50cbbbd 100644 > --- a/drivers/usb/eth/asix.c > +++ b/drivers/usb/eth/asix.c > @@ -310,55 +310,60 @@ static int mii_nway_restart(struct ueth_data *dev) > return r; > } > > -/* > - * Asix callbacks > - */ > -static int asix_init(struct eth_device *eth, bd_t *bd) > +static int asix_basic_reset(struct ueth_data *dev) > { > int embd_phy; > - ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buf, ETH_ALEN); > u16 rx_ctl; > - struct ueth_data *dev = (struct ueth_data *)eth->priv; > - int timeout = 0; > -#define TIMEOUT_RESOLUTION 50 /* ms */ > - int link_detected; > - > - debug("** %s()\n", __func__); > > if (asix_write_gpio(dev, > AX_GPIO_RSE | AX_GPIO_GPO_2 | AX_GPIO_GPO2EN, 5) < 0) > - goto out_err; > + return -1;
You might want to use proper errno.h here ... like -ETIMEDOUT etc. > > /* 0x10 is the phy id of the embedded 10/100 ethernet phy */ > embd_phy = ((asix_get_phy_addr(dev) & 0x1f) == 0x10 ? 1 : 0); > if (asix_write_cmd(dev, AX_CMD_SW_PHY_SELECT, > embd_phy, 0, 0, NULL) < 0) { > debug("Select PHY #1 failed\n"); > - goto out_err; > + return -1; > } > > if (asix_sw_reset(dev, AX_SWRESET_IPPD | AX_SWRESET_PRL) < 0) > - goto out_err; > + return -1; > > if (asix_sw_reset(dev, AX_SWRESET_CLEAR) < 0) > - goto out_err; > + return -1; > > if (embd_phy) { > if (asix_sw_reset(dev, AX_SWRESET_IPRL) < 0) > - goto out_err; > + return -1; > } else { > if (asix_sw_reset(dev, AX_SWRESET_PRTE) < 0) > - goto out_err; > + return -1; > } > > rx_ctl = asix_read_rx_ctl(dev); > debug("RX_CTL is 0x%04x after software reset\n", rx_ctl); > if (asix_write_rx_ctl(dev, 0x0000) < 0) > - goto out_err; > + return -1; > > rx_ctl = asix_read_rx_ctl(dev); > debug("RX_CTL is 0x%04x setting to 0x0000\n", rx_ctl); > > + return 0; > +} > + > +/* > + * Asix callbacks > + */ > +static int asix_init(struct eth_device *eth, bd_t *bd) > +{ > + struct ueth_data *dev = (struct ueth_data *)eth->priv; > + int timeout = 0; > +#define TIMEOUT_RESOLUTION 50 /* ms */ > + int link_detected; > + > + debug("** %s()\n", __func__); > + > /* Get the MAC address */ > if (asix_read_cmd(dev, AX_CMD_READ_NODE_ID, > 0, 0, ETH_ALEN, buf) < 0) { > @@ -635,5 +640,8 @@ int asix_eth_get_info(struct usb_device *dev, struct > ueth_data *ss, eth->halt = asix_halt; > eth->priv = ss; > > + if (asix_basic_reset(ss)) > + return 0; > + > return 1; > } Best regards, Marek Vasut _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot