diff options
author | Tom Rini <trini@ti.com> | 2011-12-15 08:40:51 -0700 |
---|---|---|
committer | Remy Bohmer <linux@bohmer.net> | 2011-12-16 21:37:17 +0100 |
commit | b2fb47f1873ae812ce33129996a22b11a36d0aa9 (patch) | |
tree | 8afeef2bce3d0ca0aa44ed59956086f6dae2767c /common/cmd_usb.c | |
parent | ddc7e541ae62f29d85b35cdf8d12c7322d353d51 (diff) | |
download | u-boot-imx-b2fb47f1873ae812ce33129996a22b11a36d0aa9.zip u-boot-imx-b2fb47f1873ae812ce33129996a22b11a36d0aa9.tar.gz u-boot-imx-b2fb47f1873ae812ce33129996a22b11a36d0aa9.tar.bz2 |
USB: Use (get|put)_unaligned for accessing wMaxPacketSize
In 9792987721c7980453fe6447c3fa6593b44f8458 Stefan describes a usecase
where the previous behavior of leaving wMaxPacketSize be unaligned
caused fatal problems. The initial fix for this problem was incomplete
however as it showed another cases of non-aligned access that previously
worked implicitly. This switches to making sure that all access of
wMaxPacketSize are done via (get|put)_unaligned.
In order to maintain a level of readability to the code in some cases
we now use a variable for the value of wMaxPacketSize and in others, a
macro.
Cc: Minkyu Kang <mk7.kang@samsung.com>
Cc: Remy Bohmer <linux@bohmer.net>
OpenRISC:
Tested-by: Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
Beagleboard xM, Pandaboard run-tested, s5p_goni build-tested.
Signed-off-by: Tom Rini <trini@ti.com>
Diffstat (limited to 'common/cmd_usb.c')
-rw-r--r-- | common/cmd_usb.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/common/cmd_usb.c b/common/cmd_usb.c index d4ec2a2..320667f 100644 --- a/common/cmd_usb.c +++ b/common/cmd_usb.c @@ -28,6 +28,7 @@ #include <common.h> #include <command.h> #include <asm/byteorder.h> +#include <asm/unaligned.h> #include <part.h> #include <usb.h> @@ -240,7 +241,7 @@ void usb_display_ep_desc(struct usb_endpoint_descriptor *epdesc) printf("Interrupt"); break; } - printf(" MaxPacket %d", epdesc->wMaxPacketSize); + printf(" MaxPacket %d", get_unaligned(&epdesc->wMaxPacketSize)); if ((epdesc->bmAttributes & 0x03) == 0x3) printf(" Interval %dms", epdesc->bInterval); printf("\n"); |