[U-Boot] OMAP4 u-boot broken (was [PATCH] usb: align usb_endpoint_descriptor to 16-bit boundary)

Michael Jones
2011-12-14T10:12:46Z

On 12/13/2011 02:29 PM, Aneesh V wrote:
> Hi Kristiansson,
>
> On Friday 21 October 2011 12:55 AM, Stefan Kristiansson wrote:
>> The usb_endpoint_descriptor struct is 7 bytes large and is
>> defined as an array (ep_desc[USB_MAXENDPOINTS])
>> in the usb_interface struct in include/usb.h
>>
>> This fact will result in that every odd index in that
>> array will start at an uneven address, this in
>> turn makes accesses to u16 wMaxPacketSize unaligned.
>> Such accesses are illegal on the OpenRISC architecture
>> (as well as other architectures) and will render a bus error.
>>
>> Setting the aligned(2) attribute on usb_endpoint_descriptor
>> will force wMaxPacketSize to a 16-bit boundary.
>>
>> Signed-off-by: Stefan Kristiansson<stefan.kristiansson@saunalahti.fi>
>> ---
>
> OMAP4 U-Boot is broken in the mainline. U-Boot wouldn't boot up on any
> OMAP4 platforms. I suspect this will be the case with any ARM platform
> that has enabled USB tty code. I git-bisected the issue to this patch.
> I did some analysis on it and here are my findings.

I can confirm this on my OMAP3 platform with CONFIG_USB_TTY set. I can
get it to boot again by either reverting this patch or unsetting
CONFIG_USB_TTY. Looking forward to the fix.

-Michael

MATRIX VISION GmbH, Talstrasse 16, DE-71570 Oppenweiler
Registergericht: Amtsgericht Stuttgart, HRB 271090
Geschaeftsfuehrer: Gerhard Thullner, Werner Armingeon, Uwe Furtner, Erhard Meier