
Hi Marcel,
On Wed, Jul 1, 2015 at 6:04 PM, Marcel Ziswiler marcel@ziswiler.com wrote:
From: Marcel Ziswiler marcel.ziswiler@toradex.com
This patch fixes operation of our on-board AX88772B chip without EEPROM but with a ethaddr coming from the regular U-Boot environment. This is a forward port of some remaining parts initially implemented by Antmicro.
Signed-off-by: Marcel Ziswiler marcel.ziswiler@toradex.com
drivers/usb/eth/asix.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/eth/asix.c b/drivers/usb/eth/asix.c index c8697ae..3926d50 100644 --- a/drivers/usb/eth/asix.c +++ b/drivers/usb/eth/asix.c @@ -1,5 +1,8 @@ /*
- Copyright (c) 2011 The Chromium OS Authors.
- Copyright (c) 2012-2014 Toradex, Inc.
*/
- Patched for AX88772B by Antmicro Ltd <www.antmicro.com>
- SPDX-License-Identifier: GPL-2.0+
@@ -64,8 +67,14 @@ AX_MEDIUM_AC | AX_MEDIUM_RE)
/* AX88772 & AX88178 RX_CTL values */ +#define AX_RX_CTL_RH2M 0x0200 /* Enable IP header in receive
buffer aligned on 32-bit
boundary */
Definitely use checkpatch.pl on this series. I recommend patman.
+#define AX_RX_CTL_RH1M 0x0100 /* Enable RX-Header mode 0 */ #define AX_RX_CTL_SO 0x0080 #define AX_RX_CTL_AB 0x0008 +#define AX_RX_HEADER_DEFAULT (AX_RX_CTL_RH1M | \
AX_RX_CTL_RH2M)
I'm guessing this is ported from the ASIX Linux driver. Perhaps mention in the log where it came from.
#define AX_DEFAULT_RX_CTL \ (AX_RX_CTL_SO | AX_RX_CTL_AB) @@ -426,7 +435,15 @@ static int asix_init(struct eth_device *eth, bd_t *bd)
debug("** %s()\n", __func__);
if (asix_write_rx_ctl(dev, AX_DEFAULT_RX_CTL) < 0)
if ((dev->pusb_dev->descriptor.idVendor == 0x0b95) &&
(dev->pusb_dev->descriptor.idProduct == 0x772b)) {
Please don't use magic numbers. Also, ideally don't create PID hacks.
if (asix_write_rx_ctl(dev, AX_DEFAULT_RX_CTL |
AX_RX_HEADER_DEFAULT) < 0)
goto out_err;
} else if (asix_write_rx_ctl(dev, AX_DEFAULT_RX_CTL) < 0)
goto out_err;
if (asix_write_hwaddr(eth) < 0) goto out_err; do {
@@ -447,6 +464,10 @@ static int asix_init(struct eth_device *eth, bd_t *bd) goto out_err; }
/* Wait some more to avoid timeout on first transfer
(e.g. EHCI timed out on TD - token=0x8008d80) */
udelay(25000);
Is this always needed or is it only helpful to your device?
return 0;
out_err: return -1; @@ -533,6 +554,10 @@ static int asix_recv(struct eth_device *eth) return -1; }
if ((dev->pusb_dev->descriptor.idVendor == 0x0b95) &&
(dev->pusb_dev->descriptor.idProduct == 0x772b))
Again, Avoid PID hacks and at least magic numbers.
buf_ptr += 2;
/* Notify net stack */ net_process_received_packet(buf_ptr + sizeof(packet_len), packet_len);
Thanks, -Joe