[U-Boot] [PATCH] eth: asix88179: Reset device during probe with DM_ETH enabled

With the ethernet driver model enabled, reset the device before reading the MAC address, just like it's done for the non-device-model code path. This avoids a timeout when the interface is first used.
Signed-off-by: Nikolaus Schulz nikolaus.schulz@avionic-design.de --- drivers/usb/eth/asix88179.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/drivers/usb/eth/asix88179.c b/drivers/usb/eth/asix88179.c index 7548269..0725940 100644 --- a/drivers/usb/eth/asix88179.c +++ b/drivers/usb/eth/asix88179.c @@ -878,6 +878,10 @@ static int ax88179_eth_probe(struct udevice *dev) usb_dev = priv->ueth.pusb_dev; priv->maxpacketsize = usb_dev->epmaxpacketout[AX_ENDPOINT_OUT];
+ ret = asix_basic_reset(&priv->ueth, priv); + if (ret) + return ret; + /* Get the MAC address */ ret = asix_read_mac(&priv->ueth, pdata->enetaddr); if (ret)

On 08/30/2016 04:01 PM, Nikolaus Schulz wrote:
With the ethernet driver model enabled, reset the device before reading the MAC address, just like it's done for the non-device-model code path. This avoids a timeout when the interface is first used.
Signed-off-by: Nikolaus Schulz nikolaus.schulz@avionic-design.de
I'd like some more ACKs on this or Tested-bys before I apply it as I don't have that hardware. I am fine with the patch itself though.
drivers/usb/eth/asix88179.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/drivers/usb/eth/asix88179.c b/drivers/usb/eth/asix88179.c index 7548269..0725940 100644 --- a/drivers/usb/eth/asix88179.c +++ b/drivers/usb/eth/asix88179.c @@ -878,6 +878,10 @@ static int ax88179_eth_probe(struct udevice *dev) usb_dev = priv->ueth.pusb_dev; priv->maxpacketsize = usb_dev->epmaxpacketout[AX_ENDPOINT_OUT];
- ret = asix_basic_reset(&priv->ueth, priv);
- if (ret)
return ret;
- /* Get the MAC address */ ret = asix_read_mac(&priv->ueth, pdata->enetaddr); if (ret)

Hi,
On 30 August 2016 at 08:01, Nikolaus Schulz nikolaus.schulz@avionic-design.de wrote:
With the ethernet driver model enabled, reset the device before reading the MAC address, just like it's done for the non-device-model code path. This avoids a timeout when the interface is first used.
Signed-off-by: Nikolaus Schulz nikolaus.schulz@avionic-design.de
drivers/usb/eth/asix88179.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/drivers/usb/eth/asix88179.c b/drivers/usb/eth/asix88179.c index 7548269..0725940 100644 --- a/drivers/usb/eth/asix88179.c +++ b/drivers/usb/eth/asix88179.c @@ -878,6 +878,10 @@ static int ax88179_eth_probe(struct udevice *dev) usb_dev = priv->ueth.pusb_dev; priv->maxpacketsize = usb_dev->epmaxpacketout[AX_ENDPOINT_OUT];
ret = asix_basic_reset(&priv->ueth, priv);
if (ret)
return ret;
/* Get the MAC address */ ret = asix_read_mac(&priv->ueth, pdata->enetaddr); if (ret)
How come this doesn't happen in ax88179_eth_start()?
-- 2.1.4
Regards, Simon

On Mon, 5 Sep 2016 19:04:49 -0600 Simon Glass sjg@chromium.org wrote:
Hi,
On 30 August 2016 at 08:01, Nikolaus Schulz nikolaus.schulz@avionic-design.de wrote:
With the ethernet driver model enabled, reset the device before reading the MAC address, just like it's done for the non-device-model code path. This avoids a timeout when the interface is first used.
Signed-off-by: Nikolaus Schulz nikolaus.schulz@avionic-design.de
drivers/usb/eth/asix88179.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/drivers/usb/eth/asix88179.c b/drivers/usb/eth/asix88179.c index 7548269..0725940 100644 --- a/drivers/usb/eth/asix88179.c +++ b/drivers/usb/eth/asix88179.c @@ -878,6 +878,10 @@ static int ax88179_eth_probe(struct udevice *dev) usb_dev = priv->ueth.pusb_dev; priv->maxpacketsize = usb_dev->epmaxpacketout[AX_ENDPOINT_OUT];
ret = asix_basic_reset(&priv->ueth, priv);
if (ret)
return ret;
/* Get the MAC address */ ret = asix_read_mac(&priv->ueth, pdata->enetaddr); if (ret)
How come this doesn't happen in ax88179_eth_start()?
It happen in ax88179_eth_get_info() in the non DM case, that's why it was overseen when adding DM support.
Alban

On Mon, Sep 05, 2016 at 07:04:49PM -0600, Simon Glass wrote:
On 30 August 2016 at 08:01, Nikolaus Schulz nikolaus.schulz@avionic-design.de wrote:
With the ethernet driver model enabled, reset the device before reading the MAC address, just like it's done for the non-device-model code path. This avoids a timeout when the interface is first used.
Signed-off-by: Nikolaus Schulz nikolaus.schulz@avionic-design.de
drivers/usb/eth/asix88179.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/drivers/usb/eth/asix88179.c b/drivers/usb/eth/asix88179.c index 7548269..0725940 100644 --- a/drivers/usb/eth/asix88179.c +++ b/drivers/usb/eth/asix88179.c @@ -878,6 +878,10 @@ static int ax88179_eth_probe(struct udevice *dev) usb_dev = priv->ueth.pusb_dev; priv->maxpacketsize = usb_dev->epmaxpacketout[AX_ENDPOINT_OUT];
ret = asix_basic_reset(&priv->ueth, priv);
if (ret)
return ret;
/* Get the MAC address */ ret = asix_read_mac(&priv->ueth, pdata->enetaddr); if (ret)
How come this doesn't happen in ax88179_eth_start()?
In fact I first had put it there, but that was basically killing the ethernet. And having it in the probe function matches the non-DM code path, which has it in ax88179_eth_get_info.
Nikolaus

Hi,
On 6 September 2016 at 03:33, Nikolaus Schulz nikolaus.schulz@avionic-design.de wrote:
On Mon, Sep 05, 2016 at 07:04:49PM -0600, Simon Glass wrote:
On 30 August 2016 at 08:01, Nikolaus Schulz nikolaus.schulz@avionic-design.de wrote:
With the ethernet driver model enabled, reset the device before reading the MAC address, just like it's done for the non-device-model code path. This avoids a timeout when the interface is first used.
Signed-off-by: Nikolaus Schulz nikolaus.schulz@avionic-design.de
drivers/usb/eth/asix88179.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/drivers/usb/eth/asix88179.c b/drivers/usb/eth/asix88179.c index 7548269..0725940 100644 --- a/drivers/usb/eth/asix88179.c +++ b/drivers/usb/eth/asix88179.c @@ -878,6 +878,10 @@ static int ax88179_eth_probe(struct udevice *dev) usb_dev = priv->ueth.pusb_dev; priv->maxpacketsize = usb_dev->epmaxpacketout[AX_ENDPOINT_OUT];
ret = asix_basic_reset(&priv->ueth, priv);
if (ret)
return ret;
/* Get the MAC address */ ret = asix_read_mac(&priv->ueth, pdata->enetaddr); if (ret)
How come this doesn't happen in ax88179_eth_start()?
In fact I first had put it there, but that was basically killing the ethernet. And having it in the probe function matches the non-DM code path, which has it in ax88179_eth_get_info.
OK thanks.
Reviewed-by: Simon Glass sjg@chromium.org
Nikolaus
participants (4)
-
Alban Bedel
-
Marek Vasut
-
Nikolaus Schulz
-
Simon Glass