diff mbox

[U-Boot] net: asix: don't pad odd-length TX packets

Message ID 1393532822-28217-1-git-send-email-swarren@wwwdotorg.org
State Accepted
Delegated to: Tom Rini
Headers show

Commit Message

Stephen Warren Feb. 27, 2014, 8:27 p.m. UTC
From: Stephen Warren <swarren@nvidia.com>

For Ethernet/USB RX packets, the ASIX HW pads odd-sized packets so that
they have an even size. Currently, asix_recv() does remove this padding,
and asic_send() adds equivalent padding in the TX path. However, the HW
does not appear to need this packing for TX packets in practical testing
with "ASIX Elec. Corp. AX88x72A 000001" Vendor: 0x0b95 Product 0x7720
Version 0.1. The Linux kernel does no such padding for the TX path.

Remove the padding from the TX path:

* For consistency with the Linux kernel.
* NVIDIA has a Tegra simulator which validates that the length of USB
  packets sent to an ASIX device matches the packet length value inside
  the packet data. Having U-Boot and the kernel do the same thing when
  creating the TX packets simplifies the simulator's validation.

Cc: Lucas Stach <dev@lynxeye.de>
Cc: Marek Vasut <marex@denx.de>
Cc: Simon Glass <sjg@chromium.org>
Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
 drivers/usb/eth/asix.c | 2 --
 1 file changed, 2 deletions(-)

Comments

Simon Glass Feb. 27, 2014, 8:38 p.m. UTC | #1
Hi Stephen,

On 27 February 2014 13:27, Stephen Warren <swarren@wwwdotorg.org> wrote:

> From: Stephen Warren <swarren@nvidia.com>
>
> For Ethernet/USB RX packets, the ASIX HW pads odd-sized packets so that
> they have an even size. Currently, asix_recv() does remove this padding,
> and asic_send() adds equivalent padding in the TX path. However, the HW
> does not appear to need this packing for TX packets in practical testing
> with "ASIX Elec. Corp. AX88x72A 000001" Vendor: 0x0b95 Product 0x7720
> Version 0.1. The Linux kernel does no such padding for the TX path.
>
> Remove the padding from the TX path:
>
> * For consistency with the Linux kernel.
> * NVIDIA has a Tegra simulator which validates that the length of USB
>   packets sent to an ASIX device matches the packet length value inside
>   the packet data. Having U-Boot and the kernel do the same thing when
>   creating the TX packets simplifies the simulator's validation.
>
> Cc: Lucas Stach <dev@lynxeye.de>
> Cc: Marek Vasut <marex@denx.de>
> Cc: Simon Glass <sjg@chromium.org>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
>

My notes indicate I added this due to a problem I had at the time with
bootp. However, since you have tested it, perhaps the root cause was
somewhere else.

Acked-by: Simon Glass <sjg@chromium.org>


> ---
>  drivers/usb/eth/asix.c | 2 --
>  1 file changed, 2 deletions(-)
>
> diff --git a/drivers/usb/eth/asix.c b/drivers/usb/eth/asix.c
> index 659533a8d4e4..ce133f00698d 100644
> --- a/drivers/usb/eth/asix.c
> +++ b/drivers/usb/eth/asix.c
> @@ -468,8 +468,6 @@ static int asix_send(struct eth_device *eth, void
> *packet, int length)
>
>         memcpy(msg, &packet_len, sizeof(packet_len));
>         memcpy(msg + sizeof(packet_len), (void *)packet, length);
> -       if (length & 1)
> -               length++;
>
>         err = usb_bulk_msg(dev->pusb_dev,
>                                 usb_sndbulkpipe(dev->pusb_dev,
> dev->ep_out),
> --
> 1.8.1.5
>
>
Marek Vasut Feb. 28, 2014, 10:54 a.m. UTC | #2
On Thursday, February 27, 2014 at 09:38:48 PM, Simon Glass wrote:
> Hi Stephen,
> 
> On 27 February 2014 13:27, Stephen Warren <swarren@wwwdotorg.org> wrote:
> > From: Stephen Warren <swarren@nvidia.com>
> > 
> > For Ethernet/USB RX packets, the ASIX HW pads odd-sized packets so that
> > they have an even size. Currently, asix_recv() does remove this padding,
> > and asic_send() adds equivalent padding in the TX path. However, the HW
> > does not appear to need this packing for TX packets in practical testing
> > with "ASIX Elec. Corp. AX88x72A 000001" Vendor: 0x0b95 Product 0x7720
> > Version 0.1. The Linux kernel does no such padding for the TX path.
> > 
> > Remove the padding from the TX path:
> > 
> > * For consistency with the Linux kernel.
> > * NVIDIA has a Tegra simulator which validates that the length of USB
> > 
> >   packets sent to an ASIX device matches the packet length value inside
> >   the packet data. Having U-Boot and the kernel do the same thing when
> >   creating the TX packets simplifies the simulator's validation.
> > 
> > Cc: Lucas Stach <dev@lynxeye.de>
> > Cc: Marek Vasut <marex@denx.de>
> > Cc: Simon Glass <sjg@chromium.org>
> > Signed-off-by: Stephen Warren <swarren@nvidia.com>
> 
> My notes indicate I added this due to a problem I had at the time with
> bootp. However, since you have tested it, perhaps the root cause was
> somewhere else.
> 
> Acked-by: Simon Glass <sjg@chromium.org>

Tested on two different ASIX dongles:

0x2001:0x3c05 ; DUB-E100 ; D-Link Corporation
0x0b95:0x7720 ; ZoWii ; Zoltan Tech

Acked-by: Marek Vasut <marex@denx.de>
Tested-by: Marek Vasut <marex@denx.de>

Best regards,
Marek Vasut
Gerhard Sittig March 3, 2014, 2:14 p.m. UTC | #3
On Fri, Feb 28, 2014 at 11:54 +0100, Marek Vasut wrote:
> 
> On Thursday, February 27, 2014 at 09:38:48 PM, Simon Glass wrote:
> > Hi Stephen,
> > 
> > On 27 February 2014 13:27, Stephen Warren <swarren@wwwdotorg.org> wrote:
> > > From: Stephen Warren <swarren@nvidia.com>
> > > 
> > > For Ethernet/USB RX packets, the ASIX HW pads odd-sized packets so that
> > > they have an even size. Currently, asix_recv() does remove this padding,
> > > and asic_send() adds equivalent padding in the TX path. However, the HW
> > > does not appear to need this packing for TX packets in practical testing
> > > with "ASIX Elec. Corp. AX88x72A 000001" Vendor: 0x0b95 Product 0x7720
> > > Version 0.1. The Linux kernel does no such padding for the TX path.
> > > 
> > > Remove the padding from the TX path:
> > > 
> > > * For consistency with the Linux kernel.
> > > * NVIDIA has a Tegra simulator which validates that the length of USB
> > > 
> > >   packets sent to an ASIX device matches the packet length value inside
> > >   the packet data. Having U-Boot and the kernel do the same thing when
> > >   creating the TX packets simplifies the simulator's validation.
> > > 
> > > Cc: Lucas Stach <dev@lynxeye.de>
> > > Cc: Marek Vasut <marex@denx.de>
> > > Cc: Simon Glass <sjg@chromium.org>
> > > Signed-off-by: Stephen Warren <swarren@nvidia.com>
> > 
> > My notes indicate I added this due to a problem I had at the time with
> > bootp. However, since you have tested it, perhaps the root cause was
> > somewhere else.
> > 
> > Acked-by: Simon Glass <sjg@chromium.org>
> 
> Tested on two different ASIX dongles:
> 
> 0x2001:0x3c05 ; DUB-E100 ; D-Link Corporation
> 0x0b95:0x7720 ; ZoWii ; Zoltan Tech
> 
> Acked-by: Marek Vasut <marex@denx.de>
> Tested-by: Marek Vasut <marex@denx.de>

Tested with TFTP over a "Logilink UA0144" dongle ('usb info' says
"ASIX Elec. Corp. AX88772B 000001", vendor 0x0b95, prod 0x772b)
and "Edimax EU-4208" ("ASIX Elec. Corp. AX88772B 0E62D5", 0x0b95,
0x772b).

Tested-by: Gerhard Sittig <gsi@denx.de>


virtually yours
Gerhard Sittig
Marek Vasut March 3, 2014, 2:24 p.m. UTC | #4
On Monday, March 03, 2014 at 03:14:34 PM, Gerhard Sittig wrote:
> On Fri, Feb 28, 2014 at 11:54 +0100, Marek Vasut wrote:
> > On Thursday, February 27, 2014 at 09:38:48 PM, Simon Glass wrote:
> > > Hi Stephen,
> > > 
> > > On 27 February 2014 13:27, Stephen Warren <swarren@wwwdotorg.org> wrote:
> > > > From: Stephen Warren <swarren@nvidia.com>
> > > > 
> > > > For Ethernet/USB RX packets, the ASIX HW pads odd-sized packets so
> > > > that they have an even size. Currently, asix_recv() does remove this
> > > > padding, and asic_send() adds equivalent padding in the TX path.
> > > > However, the HW does not appear to need this packing for TX packets
> > > > in practical testing with "ASIX Elec. Corp. AX88x72A 000001" Vendor:
> > > > 0x0b95 Product 0x7720 Version 0.1. The Linux kernel does no such
> > > > padding for the TX path.
> > > > 
> > > > Remove the padding from the TX path:
> > > > 
> > > > * For consistency with the Linux kernel.
> > > > * NVIDIA has a Tegra simulator which validates that the length of USB
> > > > 
> > > >   packets sent to an ASIX device matches the packet length value
> > > >   inside the packet data. Having U-Boot and the kernel do the same
> > > >   thing when creating the TX packets simplifies the simulator's
> > > >   validation.
> > > > 
> > > > Cc: Lucas Stach <dev@lynxeye.de>
> > > > Cc: Marek Vasut <marex@denx.de>
> > > > Cc: Simon Glass <sjg@chromium.org>
> > > > Signed-off-by: Stephen Warren <swarren@nvidia.com>
> > > 
> > > My notes indicate I added this due to a problem I had at the time with
> > > bootp. However, since you have tested it, perhaps the root cause was
> > > somewhere else.
> > > 
> > > Acked-by: Simon Glass <sjg@chromium.org>
> > 
> > Tested on two different ASIX dongles:
> > 
> > 0x2001:0x3c05 ; DUB-E100 ; D-Link Corporation
> > 0x0b95:0x7720 ; ZoWii ; Zoltan Tech
> > 
> > Acked-by: Marek Vasut <marex@denx.de>
> > Tested-by: Marek Vasut <marex@denx.de>
> 
> Tested with TFTP over a "Logilink UA0144" dongle ('usb info' says
> "ASIX Elec. Corp. AX88772B 000001", vendor 0x0b95, prod 0x772b)
> and "Edimax EU-4208" ("ASIX Elec. Corp. AX88772B 0E62D5", 0x0b95,
> 0x772b).
> 
> Tested-by: Gerhard Sittig <gsi@denx.de>

Putting Joe back on CC. Joe, can you please pick this one ?

Thanks!

Best regards,
Marek Vasut
Tom Rini March 7, 2014, 10:27 p.m. UTC | #5
On Thu, Feb 27, 2014 at 01:27:02PM -0700, Stephen Warren wrote:

> From: Stephen Warren <swarren@nvidia.com>
> 
> For Ethernet/USB RX packets, the ASIX HW pads odd-sized packets so that
> they have an even size. Currently, asix_recv() does remove this padding,
> and asic_send() adds equivalent padding in the TX path. However, the HW
> does not appear to need this packing for TX packets in practical testing
> with "ASIX Elec. Corp. AX88x72A 000001" Vendor: 0x0b95 Product 0x7720
> Version 0.1. The Linux kernel does no such padding for the TX path.
> 
> Remove the padding from the TX path:
> 
> * For consistency with the Linux kernel.
> * NVIDIA has a Tegra simulator which validates that the length of USB
>   packets sent to an ASIX device matches the packet length value inside
>   the packet data. Having U-Boot and the kernel do the same thing when
>   creating the TX packets simplifies the simulator's validation.
> 
> Cc: Lucas Stach <dev@lynxeye.de>
> Cc: Marek Vasut <marex@denx.de>
> Cc: Simon Glass <sjg@chromium.org>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> Acked-by: Simon Glass <sjg@chromium.org>
> Acked-by: Marek Vasut <marex@denx.de>
> Tested-by: Marek Vasut <marex@denx.de>
> Tested-by: Gerhard Sittig <gsi@denx.de>

Applied to u-boot/master, thanks!
Marek Vasut March 8, 2014, 11:32 a.m. UTC | #6
On Friday, March 07, 2014 at 11:27:37 PM, Tom Rini wrote:
> On Thu, Feb 27, 2014 at 01:27:02PM -0700, Stephen Warren wrote:
> > From: Stephen Warren <swarren@nvidia.com>
> > 
> > For Ethernet/USB RX packets, the ASIX HW pads odd-sized packets so that
> > they have an even size. Currently, asix_recv() does remove this padding,
> > and asic_send() adds equivalent padding in the TX path. However, the HW
> > does not appear to need this packing for TX packets in practical testing
> > with "ASIX Elec. Corp. AX88x72A 000001" Vendor: 0x0b95 Product 0x7720
> > Version 0.1. The Linux kernel does no such padding for the TX path.
> > 
> > Remove the padding from the TX path:
> > 
> > * For consistency with the Linux kernel.
> > * NVIDIA has a Tegra simulator which validates that the length of USB
> > 
> >   packets sent to an ASIX device matches the packet length value inside
> >   the packet data. Having U-Boot and the kernel do the same thing when
> >   creating the TX packets simplifies the simulator's validation.
> > 
> > Cc: Lucas Stach <dev@lynxeye.de>
> > Cc: Marek Vasut <marex@denx.de>
> > Cc: Simon Glass <sjg@chromium.org>
> > Signed-off-by: Stephen Warren <swarren@nvidia.com>
> > Acked-by: Simon Glass <sjg@chromium.org>
> > Acked-by: Marek Vasut <marex@denx.de>
> > Tested-by: Marek Vasut <marex@denx.de>
> > Tested-by: Gerhard Sittig <gsi@denx.de>
> 
> Applied to u-boot/master, thanks!

Uh, where did Joe disappear to anyway ?

Best regards,
Marek Vasut
Joe Hershberger March 10, 2014, 10:11 p.m. UTC | #7
Hi Marek,

On Sat, Mar 8, 2014 at 5:32 AM, Marek Vasut <marex@denx.de> wrote:

> On Friday, March 07, 2014 at 11:27:37 PM, Tom Rini wrote:
> >
> > Applied to u-boot/master, thanks!
>
> Uh, where did Joe disappear to anyway ?
>
> Best regards,
> Marek Vasut
>

I've been traveling a lot recently and have not had much time for reviewing
and testing patches.  I expect to get back into it u-boot more heavily in a
few months.

Regards,
-Joe
diff mbox

Patch

diff --git a/drivers/usb/eth/asix.c b/drivers/usb/eth/asix.c
index 659533a8d4e4..ce133f00698d 100644
--- a/drivers/usb/eth/asix.c
+++ b/drivers/usb/eth/asix.c
@@ -468,8 +468,6 @@  static int asix_send(struct eth_device *eth, void *packet, int length)
 
 	memcpy(msg, &packet_len, sizeof(packet_len));
 	memcpy(msg + sizeof(packet_len), (void *)packet, length);
-	if (length & 1)
-		length++;
 
 	err = usb_bulk_msg(dev->pusb_dev,
 				usb_sndbulkpipe(dev->pusb_dev, dev->ep_out),